commonmarker 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of commonmarker might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Gemfile +3 -2
- data/README.md +67 -42
- data/Rakefile +22 -2
- data/commonmarker.gemspec +13 -9
- data/ext/commonmarker/cmark/api_test/main.c +35 -0
- data/ext/commonmarker/cmark/build/CMakeFiles/CMakeError.log +12 -12
- data/ext/commonmarker/cmark/build/CMakeFiles/CMakeOutput.log +141 -141
- data/ext/commonmarker/cmark/build/api_test/CMakeFiles/api_test.dir/main.c.o +0 -0
- data/ext/commonmarker/cmark/build/api_test/api_test +0 -0
- data/ext/commonmarker/cmark/build/src/CMakeFiles/cmark.dir/houdini_html_u.c.o +0 -0
- data/ext/commonmarker/cmark/build/src/CMakeFiles/cmark.dir/iterator.c.o +0 -0
- data/ext/commonmarker/cmark/build/src/CMakeFiles/libcmark.dir/houdini_html_u.c.o +0 -0
- data/ext/commonmarker/cmark/build/src/CMakeFiles/libcmark.dir/iterator.c.o +0 -0
- data/ext/commonmarker/cmark/build/src/CMakeFiles/libcmark_static.dir/houdini_html_u.c.o +0 -0
- data/ext/commonmarker/cmark/build/src/CMakeFiles/libcmark_static.dir/iterator.c.o +0 -0
- data/ext/commonmarker/cmark/build/src/cmark +0 -0
- data/ext/commonmarker/cmark/build/src/libcmark.0.19.0.dylib +0 -0
- data/ext/commonmarker/cmark/build/src/libcmark.a +0 -0
- data/ext/commonmarker/cmark/build/src/libcmark.dylib +0 -0
- data/ext/commonmarker/cmark/src/houdini_html_u.c +26 -13
- data/ext/commonmarker/cmark/src/iterator.c +2 -2
- data/ext/commonmarker/cmark/test/__pycache__/cmark.cpython-34.pyc +0 -0
- data/ext/commonmarker/cmark/test/__pycache__/normalize.cpython-34.pyc +0 -0
- data/ext/commonmarker/cmark/test/cmark.pyc +0 -0
- data/ext/commonmarker/cmark/test/normalize.pyc +0 -0
- data/ext/commonmarker/commonmarker.c +276 -3
- data/ext/commonmarker/extconf.rb +3 -1
- data/lib/commonmarker.rb +70 -360
- data/lib/commonmarker/config.rb +1 -1
- data/lib/commonmarker/renderer.rb +91 -0
- data/lib/commonmarker/renderer/html_renderer.rb +149 -0
- data/lib/commonmarker/version.rb +1 -1
- data/test/benchinput.md +148414 -0
- data/test/benchmark.rb +13 -9
- data/test/progit/Gemfile +5 -0
- data/test/progit/README.md +9 -0
- data/test/progit/README.original.md +70 -0
- data/test/progit/Rakefile +285 -0
- data/test/progit/ar/01-introduction/01-chapter1.markdown +264 -0
- data/test/progit/ar/02-git-basics/01-chapter2.markdown +1124 -0
- data/test/progit/ar/NOTES +18 -0
- data/test/progit/ar/README +14 -0
- data/test/progit/az/01-introduction/01-chapter1.markdown +257 -0
- data/test/progit/az/02-git-basics/01-chapter2.markdown +1127 -0
- data/test/progit/az/03-git-branching/01-chapter3.markdown +598 -0
- data/test/progit/az/04-git-server/01-chapter4.markdown +861 -0
- data/test/progit/az/05-distributed-git/01-chapter5.markdown +897 -0
- data/test/progit/az/06-git-tools/01-chapter6.markdown +1126 -0
- data/test/progit/az/07-customizing-git/01-chapter7.markdown +937 -0
- data/test/progit/az/08-git-and-other-scms/01-chapter8.markdown +690 -0
- data/test/progit/az/09-git-internals/01-chapter9.markdown +977 -0
- data/test/progit/be/01-introduction/01-chapter1.markdown +257 -0
- data/test/progit/be/02-git-basics/01-chapter2.markdown +1126 -0
- data/test/progit/ca/01-introduction/01-chapter1.markdown +257 -0
- data/test/progit/ca/README.txt +1 -0
- data/test/progit/couchapp/Makefile +41 -0
- data/test/progit/couchapp/Readme.md +17 -0
- data/test/progit/couchapp/_id +1 -0
- data/test/progit/couchapp/shows/chapter.js +14 -0
- data/test/progit/couchapp/templates/foot.html +7 -0
- data/test/progit/couchapp/templates/head.html +51 -0
- data/test/progit/couchapp/vendor/markdown/showdown.js +420 -0
- data/test/progit/couchapp/vendor/mustache.js/mustache.js +302 -0
- data/test/progit/cs/01-introduction/01-chapter1.markdown +259 -0
- data/test/progit/cs/02-git-basics/01-chapter2.markdown +1225 -0
- data/test/progit/cs/03-git-branching/01-chapter3.markdown +606 -0
- data/test/progit/cs/04-git-server/01-chapter4.markdown +871 -0
- data/test/progit/cs/05-distributed-git/01-chapter5.markdown +914 -0
- data/test/progit/cs/06-git-tools/01-chapter6.markdown +1167 -0
- data/test/progit/cs/07-customizing-git/01-chapter7.markdown +940 -0
- data/test/progit/cs/08-git-and-other-scms/01-chapter8.markdown +700 -0
- data/test/progit/cs/09-git-internals/01-chapter9.markdown +1014 -0
- data/test/progit/de/01-introduction/01-chapter1.markdown +445 -0
- data/test/progit/de/02-git-basics/01-chapter2.markdown +1589 -0
- data/test/progit/de/03-git-branching/01-chapter3.markdown +964 -0
- data/test/progit/de/04-git-server/01-chapter4.markdown +1337 -0
- data/test/progit/de/05-distributed-git/01-chapter5.markdown +1329 -0
- data/test/progit/de/06-git-tools/01-chapter6.markdown +1502 -0
- data/test/progit/de/07-customizing-git/01-chapter7.markdown +1361 -0
- data/test/progit/de/08-git-and-other-scms/01-chapter8.markdown +919 -0
- data/test/progit/de/09-git-internals/01-chapter9.markdown +1361 -0
- data/test/progit/de/README.md +626 -0
- data/test/progit/ebooks/cover.png +0 -0
- data/test/progit/en/01-introduction/01-chapter1.markdown +263 -0
- data/test/progit/en/02-git-basics/01-chapter2.markdown +1228 -0
- data/test/progit/en/03-git-branching/01-chapter3.markdown +606 -0
- data/test/progit/en/04-git-server/01-chapter4.markdown +871 -0
- data/test/progit/en/05-distributed-git/01-chapter5.markdown +914 -0
- data/test/progit/en/06-git-tools/01-chapter6.markdown +1150 -0
- data/test/progit/en/07-customizing-git/01-chapter7.markdown +940 -0
- data/test/progit/en/08-git-and-other-scms/01-chapter8.markdown +700 -0
- data/test/progit/en/09-git-internals/01-chapter9.markdown +983 -0
- data/test/progit/eo/01-introduction/01-chapter1.markdown +257 -0
- data/test/progit/eo/02-git-basics/01-chapter2.markdown +1171 -0
- data/test/progit/epub/ProGit.css +28 -0
- data/test/progit/epub/title.png +0 -0
- data/test/progit/es-ni/01-introduction/01-chapter1.markdown +257 -0
- data/test/progit/es-ni/02-git-basics/01-chapter2.markdown +1127 -0
- data/test/progit/es/01-introduction/01-chapter1.markdown +262 -0
- data/test/progit/es/02-git-basics/01-chapter2.markdown +1165 -0
- data/test/progit/es/03-git-branching/01-chapter3.markdown +598 -0
- data/test/progit/es/04-git-server/01-chapter4.markdown +707 -0
- data/test/progit/es/05-distributed-git/01-chapter5.markdown +890 -0
- data/test/progit/es/06-git-tools/01-chapter6.markdown +1113 -0
- data/test/progit/es/07-customizing-git/01-chapter7.markdown +875 -0
- data/test/progit/es/08-git-and-other-scms/01-chapter8.markdown +686 -0
- data/test/progit/es/09-git-internals/01-chapter9.markdown +976 -0
- data/test/progit/es/NOTES +29 -0
- data/test/progit/es/README +3 -0
- data/test/progit/es/glosario-Benzirpi.txt +27 -0
- data/test/progit/es/omegat-Benzirpi.tmx +29075 -0
- data/test/progit/fa/01-introduction/01-chapter1.markdown +262 -0
- data/test/progit/fa/03-git-branching/01-chapter3.markdown +608 -0
- data/test/progit/fa/04-git-server/01-chapter4.markdown +872 -0
- data/test/progit/fa/NOTES.en-fa.md +143 -0
- data/test/progit/fa/README.md +7 -0
- data/test/progit/fi/01-introduction/01-chapter1.markdown +259 -0
- data/test/progit/fi/02-git-basics/01-chapter2.markdown +1171 -0
- data/test/progit/fi/NOTES +5 -0
- data/test/progit/figures-dia/fig0101.dia +617 -0
- data/test/progit/figures-dia/fig0102.dia +921 -0
- data/test/progit/figures-dia/fig0103.dia +1468 -0
- data/test/progit/figures-dia/fig0104.dia +1432 -0
- data/test/progit/figures-dia/fig0105.dia +1924 -0
- data/test/progit/figures-dia/fig0106.dia +562 -0
- data/test/progit/figures-dia/fig0201.dia +774 -0
- data/test/progit/figures-dia/fig0301.dia +2006 -0
- data/test/progit/figures-dia/fig0302.dia +2148 -0
- data/test/progit/figures-dia/fig0303.dia +719 -0
- data/test/progit/figures-dia/fig0304.dia +525 -0
- data/test/progit/figures-dia/fig0305.dia +622 -0
- data/test/progit/figures-dia/fig0306.dia +622 -0
- data/test/progit/figures-dia/fig0307.dia +719 -0
- data/test/progit/figures-dia/fig0308.dia +734 -0
- data/test/progit/figures-dia/fig0309.dia +831 -0
- data/test/progit/figures-dia/fig0310.dia +412 -0
- data/test/progit/figures-dia/fig0311.dia +493 -0
- data/test/progit/figures-dia/fig0312.dia +596 -0
- data/test/progit/figures-dia/fig0313.dia +774 -0
- data/test/progit/figures-dia/fig0314.dia +846 -0
- data/test/progit/figures-dia/fig0315.dia +787 -0
- data/test/progit/figures-dia/fig0316.dia +1078 -0
- data/test/progit/figures-dia/fig0317.dia +881 -0
- data/test/progit/figures-dia/fig0318.dia +968 -0
- data/test/progit/figures-dia/fig0319.dia +957 -0
- data/test/progit/figures-dia/fig0320.dia +1637 -0
- data/test/progit/figures-dia/fig0321.dia +1494 -0
- data/test/progit/figures-dia/fig0322.dia +1142 -0
- data/test/progit/figures-dia/fig0323.dia +1377 -0
- data/test/progit/figures-dia/fig0324.dia +1603 -0
- data/test/progit/figures-dia/fig0325.dia +2003 -0
- data/test/progit/figures-dia/fig0326.dia +2013 -0
- data/test/progit/figures-dia/fig0327.dia +687 -0
- data/test/progit/figures-dia/fig0328.dia +814 -0
- data/test/progit/figures-dia/fig0329.dia +793 -0
- data/test/progit/figures-dia/fig0330.dia +693 -0
- data/test/progit/figures-dia/fig0331.dia +1159 -0
- data/test/progit/figures-dia/fig0332.dia +1362 -0
- data/test/progit/figures-dia/fig0333.dia +1165 -0
- data/test/progit/figures-dia/fig0334.dia +1450 -0
- data/test/progit/figures-dia/fig0335.dia +994 -0
- data/test/progit/figures-dia/fig0336.dia +786 -0
- data/test/progit/figures-dia/fig0337.dia +1546 -0
- data/test/progit/figures-dia/fig0338.dia +1755 -0
- data/test/progit/figures-dia/fig0339.dia +1882 -0
- data/test/progit/figures-dia/fig0501.dia +456 -0
- data/test/progit/figures-dia/fig0502.dia +956 -0
- data/test/progit/figures-dia/fig0503.dia +915 -0
- data/test/progit/figures-dia/fig0504.dia +620 -0
- data/test/progit/figures-dia/fig0505.dia +744 -0
- data/test/progit/figures-dia/fig0506.dia +747 -0
- data/test/progit/figures-dia/fig0507.dia +895 -0
- data/test/progit/figures-dia/fig0508.dia +1122 -0
- data/test/progit/figures-dia/fig0509.dia +1243 -0
- data/test/progit/figures-dia/fig0510.dia +1240 -0
- data/test/progit/figures-dia/fig0511.dia +1201 -0
- data/test/progit/figures-dia/fig0512.dia +801 -0
- data/test/progit/figures-dia/fig0513.dia +1387 -0
- data/test/progit/figures-dia/fig0514.dia +1568 -0
- data/test/progit/figures-dia/fig0515.dia +1721 -0
- data/test/progit/figures-dia/fig0516.dia +997 -0
- data/test/progit/figures-dia/fig0517.dia +994 -0
- data/test/progit/figures-dia/fig0518.dia +1145 -0
- data/test/progit/figures-dia/fig0519.dia +992 -0
- data/test/progit/figures-dia/fig0520.dia +1240 -0
- data/test/progit/figures-dia/fig0521.dia +801 -0
- data/test/progit/figures-dia/fig0522.dia +922 -0
- data/test/progit/figures-dia/fig0523.dia +922 -0
- data/test/progit/figures-dia/fig0524.dia +1828 -0
- data/test/progit/figures-dia/fig0525.dia +2685 -0
- data/test/progit/figures-dia/fig0526.dia +717 -0
- data/test/progit/figures-dia/fig0527.dia +856 -0
- data/test/progit/figures-dia/fig0601.dia +790 -0
- data/test/progit/figures-dia/fig0702.dia +795 -0
- data/test/progit/figures-dia/fig0703.dia +795 -0
- data/test/progit/figures-dia/fig0901.dia +669 -0
- data/test/progit/figures-dia/fig0902.dia +834 -0
- data/test/progit/figures-dia/fig0903.dia +1483 -0
- data/test/progit/figures-dia/fig0904.dia +1728 -0
- data/test/progit/figures-dia/makeimages +25 -0
- data/test/progit/figures-source/progit.graffle +123108 -0
- data/test/progit/figures/18333fig0101-tn.png +0 -0
- data/test/progit/figures/18333fig0102-tn.png +0 -0
- data/test/progit/figures/18333fig0103-tn.png +0 -0
- data/test/progit/figures/18333fig0104-tn.png +0 -0
- data/test/progit/figures/18333fig0105-tn.png +0 -0
- data/test/progit/figures/18333fig0106-tn.png +0 -0
- data/test/progit/figures/18333fig0107-tn.png +0 -0
- data/test/progit/figures/18333fig0201-tn.png +0 -0
- data/test/progit/figures/18333fig0202-tn.png +0 -0
- data/test/progit/figures/18333fig0301-tn.png +0 -0
- data/test/progit/figures/18333fig0302-tn.png +0 -0
- data/test/progit/figures/18333fig0303-tn.png +0 -0
- data/test/progit/figures/18333fig0304-tn.png +0 -0
- data/test/progit/figures/18333fig0305-tn.png +0 -0
- data/test/progit/figures/18333fig0306-tn.png +0 -0
- data/test/progit/figures/18333fig0307-tn.png +0 -0
- data/test/progit/figures/18333fig0308-tn.png +0 -0
- data/test/progit/figures/18333fig0309-tn.png +0 -0
- data/test/progit/figures/18333fig0310-tn.png +0 -0
- data/test/progit/figures/18333fig0311-tn.png +0 -0
- data/test/progit/figures/18333fig0312-tn.png +0 -0
- data/test/progit/figures/18333fig0313-tn.png +0 -0
- data/test/progit/figures/18333fig0314-tn.png +0 -0
- data/test/progit/figures/18333fig0315-tn.png +0 -0
- data/test/progit/figures/18333fig0316-tn.png +0 -0
- data/test/progit/figures/18333fig0317-tn.png +0 -0
- data/test/progit/figures/18333fig0318-tn.png +0 -0
- data/test/progit/figures/18333fig0319-tn.png +0 -0
- data/test/progit/figures/18333fig0320-tn.png +0 -0
- data/test/progit/figures/18333fig0321-tn.png +0 -0
- data/test/progit/figures/18333fig0322-tn.png +0 -0
- data/test/progit/figures/18333fig0323-tn.png +0 -0
- data/test/progit/figures/18333fig0324-tn.png +0 -0
- data/test/progit/figures/18333fig0325-tn.png +0 -0
- data/test/progit/figures/18333fig0326-tn.png +0 -0
- data/test/progit/figures/18333fig0327-tn.png +0 -0
- data/test/progit/figures/18333fig0328-tn.png +0 -0
- data/test/progit/figures/18333fig0329-tn.png +0 -0
- data/test/progit/figures/18333fig0330-tn.png +0 -0
- data/test/progit/figures/18333fig0331-tn.png +0 -0
- data/test/progit/figures/18333fig0332-tn.png +0 -0
- data/test/progit/figures/18333fig0333-tn.png +0 -0
- data/test/progit/figures/18333fig0334-tn.png +0 -0
- data/test/progit/figures/18333fig0335-tn.png +0 -0
- data/test/progit/figures/18333fig0336-tn.png +0 -0
- data/test/progit/figures/18333fig0337-tn.png +0 -0
- data/test/progit/figures/18333fig0338-tn.png +0 -0
- data/test/progit/figures/18333fig0339-tn.png +0 -0
- data/test/progit/figures/18333fig0401-tn.png +0 -0
- data/test/progit/figures/18333fig0402-tn.png +0 -0
- data/test/progit/figures/18333fig0403-tn.png +0 -0
- data/test/progit/figures/18333fig0404-tn.png +0 -0
- data/test/progit/figures/18333fig0405-tn.png +0 -0
- data/test/progit/figures/18333fig0406-tn.png +0 -0
- data/test/progit/figures/18333fig0407-tn.png +0 -0
- data/test/progit/figures/18333fig0408-tn.png +0 -0
- data/test/progit/figures/18333fig0409-tn.png +0 -0
- data/test/progit/figures/18333fig0410-tn.png +0 -0
- data/test/progit/figures/18333fig0411-tn.png +0 -0
- data/test/progit/figures/18333fig0412-tn.png +0 -0
- data/test/progit/figures/18333fig0413-tn.png +0 -0
- data/test/progit/figures/18333fig0414-tn.png +0 -0
- data/test/progit/figures/18333fig0415-tn.png +0 -0
- data/test/progit/figures/18333fig0501-tn.png +0 -0
- data/test/progit/figures/18333fig0502-tn.png +0 -0
- data/test/progit/figures/18333fig0503-tn.png +0 -0
- data/test/progit/figures/18333fig0504-tn.png +0 -0
- data/test/progit/figures/18333fig0505-tn.png +0 -0
- data/test/progit/figures/18333fig0506-tn.png +0 -0
- data/test/progit/figures/18333fig0507-tn.png +0 -0
- data/test/progit/figures/18333fig0508-tn.png +0 -0
- data/test/progit/figures/18333fig0509-tn.png +0 -0
- data/test/progit/figures/18333fig0510-tn.png +0 -0
- data/test/progit/figures/18333fig0511-tn.png +0 -0
- data/test/progit/figures/18333fig0512-tn.png +0 -0
- data/test/progit/figures/18333fig0513-tn.png +0 -0
- data/test/progit/figures/18333fig0514-tn.png +0 -0
- data/test/progit/figures/18333fig0515-tn.png +0 -0
- data/test/progit/figures/18333fig0516-tn.png +0 -0
- data/test/progit/figures/18333fig0517-tn.png +0 -0
- data/test/progit/figures/18333fig0518-tn.png +0 -0
- data/test/progit/figures/18333fig0519-tn.png +0 -0
- data/test/progit/figures/18333fig0520-tn.png +0 -0
- data/test/progit/figures/18333fig0521-tn.png +0 -0
- data/test/progit/figures/18333fig0522-tn.png +0 -0
- data/test/progit/figures/18333fig0523-tn.png +0 -0
- data/test/progit/figures/18333fig0524-tn.png +0 -0
- data/test/progit/figures/18333fig0525-tn.png +0 -0
- data/test/progit/figures/18333fig0526-tn.png +0 -0
- data/test/progit/figures/18333fig0527-tn.png +0 -0
- data/test/progit/figures/18333fig0601-tn.png +0 -0
- data/test/progit/figures/18333fig0701-tn.png +0 -0
- data/test/progit/figures/18333fig0702-tn.png +0 -0
- data/test/progit/figures/18333fig0703-tn.png +0 -0
- data/test/progit/figures/18333fig0901-tn.png +0 -0
- data/test/progit/figures/18333fig0902-tn.png +0 -0
- data/test/progit/figures/18333fig0903-tn.png +0 -0
- data/test/progit/figures/18333fig0904-tn.png +0 -0
- data/test/progit/fr/01-introduction/01-chapter1.markdown +371 -0
- data/test/progit/fr/02-git-basics/01-chapter2.markdown +1378 -0
- data/test/progit/fr/03-git-branching/01-chapter3.markdown +781 -0
- data/test/progit/fr/04-git-server/01-chapter4.markdown +1141 -0
- data/test/progit/fr/05-distributed-git/01-chapter5.markdown +1163 -0
- data/test/progit/fr/06-git-tools/01-chapter6.markdown +1356 -0
- data/test/progit/fr/07-customizing-git/01-chapter7.markdown +1200 -0
- data/test/progit/fr/08-git-and-other-scms/01-chapter8.markdown +832 -0
- data/test/progit/fr/09-git-internals/01-chapter9.markdown +1228 -0
- data/test/progit/fr/NOTES.fr-fr.markdown +1 -0
- data/test/progit/fr/NOTES.fr-fr.md +127 -0
- data/test/progit/fr/README.md +43 -0
- data/test/progit/fr/glossaire-git.adoc +108 -0
- data/test/progit/hi/01-introduction/01-chapter1.markdown +7 -0
- data/test/progit/hu/01-introduction/01-chapter1.markdown +257 -0
- data/test/progit/id/01-introduction/01-chapter1.markdown +257 -0
- data/test/progit/id/02-git-basics/01-chapter2.markdown +1127 -0
- data/test/progit/id/03-git-branching/01-chapter3.markdown +598 -0
- data/test/progit/it/01-introduction/01-chapter1.markdown +263 -0
- data/test/progit/it/02-git-basics/01-chapter2.markdown +1227 -0
- data/test/progit/it/03-git-branching/01-chapter3.markdown +598 -0
- data/test/progit/it/04-git-server/01-chapter4.markdown +864 -0
- data/test/progit/it/05-distributed-git/01-chapter5.markdown +897 -0
- data/test/progit/it/06-git-tools/01-chapter6.markdown +1144 -0
- data/test/progit/it/07-customizing-git/01-chapter7.markdown +606 -0
- data/test/progit/it/08-git-and-other-scms/01-chapter8.markdown +707 -0
- data/test/progit/it/09-git-internals/01-chapter9.markdown +1000 -0
- data/test/progit/ja/01-introduction/01-chapter1.markdown +260 -0
- data/test/progit/ja/02-git-basics/01-chapter2.markdown +1221 -0
- data/test/progit/ja/03-git-branching/01-chapter3.markdown +604 -0
- data/test/progit/ja/04-git-server/01-chapter4.markdown +863 -0
- data/test/progit/ja/05-distributed-git/01-chapter5.markdown +908 -0
- data/test/progit/ja/06-git-tools/01-chapter6.markdown +1133 -0
- data/test/progit/ja/07-customizing-git/01-chapter7.markdown +936 -0
- data/test/progit/ja/08-git-and-other-scms/01-chapter8.markdown +690 -0
- data/test/progit/ja/09-git-internals/01-chapter9.markdown +984 -0
- data/test/progit/ja/README.md +58 -0
- data/test/progit/ja/translation glossaries.txt +33 -0
- data/test/progit/ko/01-introduction/01-chapter1.markdown +258 -0
- data/test/progit/ko/02-git-basics/01-chapter2.markdown +1181 -0
- data/test/progit/ko/03-git-branching/01-chapter3.markdown +612 -0
- data/test/progit/ko/04-git-server/01-chapter4.markdown +867 -0
- data/test/progit/ko/05-distributed-git/01-chapter5.markdown +913 -0
- data/test/progit/ko/06-git-tools/01-chapter6.markdown +1142 -0
- data/test/progit/ko/07-customizing-git/01-chapter7.markdown +935 -0
- data/test/progit/ko/08-git-and-other-scms/01-chapter8.markdown +688 -0
- data/test/progit/ko/09-git-internals/01-chapter9.markdown +976 -0
- data/test/progit/ko/README.md +75 -0
- data/test/progit/ko/translation_guide.txt +65 -0
- data/test/progit/latex/README +27 -0
- data/test/progit/latex/config.yml +144 -0
- data/test/progit/latex/makepdf +207 -0
- data/test/progit/latex/template.tex +155 -0
- data/test/progit/makeebooks +125 -0
- data/test/progit/makepdfs +47 -0
- data/test/progit/mk/01-introduction/01-chapter1.markdown +258 -0
- data/test/progit/mk/02-git-basics/01-chapter2.markdown +1125 -0
- data/test/progit/mk/03-git-branching/01-chapter3.markdown +598 -0
- data/test/progit/mk/05-distributed-git/01-chapter5.markdown +897 -0
- data/test/progit/nl/01-introduction/01-chapter1.markdown +296 -0
- data/test/progit/nl/02-git-basics/01-chapter2.markdown +1253 -0
- data/test/progit/nl/03-git-branching/01-chapter3.markdown +642 -0
- data/test/progit/nl/04-git-server/01-chapter4.markdown +902 -0
- data/test/progit/nl/05-distributed-git/01-chapter5.markdown +953 -0
- data/test/progit/nl/06-git-tools/01-chapter6.markdown +1177 -0
- data/test/progit/nl/07-customizing-git/01-chapter7.markdown +974 -0
- data/test/progit/nl/08-git-and-other-scms/01-chapter8.markdown +725 -0
- data/test/progit/nl/09-git-internals/01-chapter9.markdown +1013 -0
- data/test/progit/no-nb/01-introduction/01-chapter1.markdown +261 -0
- data/test/progit/no-nb/02-git-basics/01-chapter2.markdown +1225 -0
- data/test/progit/no-nb/03-git-branching/01-chapter3.markdown +606 -0
- data/test/progit/no-nb/04-git-server/01-chapter4.markdown +867 -0
- data/test/progit/no-nb/05-distributed-git/01-chapter5.markdown +914 -0
- data/test/progit/no-nb/06-git-tools/01-chapter6.markdown +1144 -0
- data/test/progit/no-nb/07-customizing-git/01-chapter7.markdown +936 -0
- data/test/progit/no-nb/08-git-and-other-scms/01-chapter8.markdown +689 -0
- data/test/progit/no-nb/09-git-internals/01-chapter9.markdown +977 -0
- data/test/progit/no-nb/README +2 -0
- data/test/progit/pl/01-introduction/01-chapter1.markdown +257 -0
- data/test/progit/pl/02-git-basics/02-chapter2.markdown +1128 -0
- data/test/progit/pl/03-git-branching/01-chapter3.markdown +598 -0
- data/test/progit/pl/04-git-server/01-chapter4.markdown +897 -0
- data/test/progit/pl/05-distributed-git/01-chapter5.markdown +1278 -0
- data/test/progit/pl/06-git-tools/01-chapter6.markdown +1550 -0
- data/test/progit/pl/07-customizing-git/01-chapter7.markdown +1058 -0
- data/test/progit/pl/08-git-and-other-scms/01-chapter8.markdown +948 -0
- data/test/progit/pl/09-git-internals/01-chapter9.markdown +1382 -0
- data/test/progit/pl/translation-guidelines.txt +70 -0
- data/test/progit/pt-br/01-introduction/01-chapter1.markdown +256 -0
- data/test/progit/pt-br/02-git-basics/01-chapter2.markdown +1127 -0
- data/test/progit/pt-br/03-git-branching/01-chapter3.markdown +596 -0
- data/test/progit/pt-br/04-git-server/01-chapter4.markdown +888 -0
- data/test/progit/pt-br/05-distributed-git/01-chapter5.markdown +896 -0
- data/test/progit/pt-br/06-git-tools/01-chapter6.markdown +1122 -0
- data/test/progit/pt-br/07-customizing-git/01-chapter7.markdown +932 -0
- data/test/progit/pt-br/08-git-and-other-scms/01-chapter8.markdown +691 -0
- data/test/progit/pt-br/09-git-internals/01-chapter9.markdown +978 -0
- data/test/progit/pt-br/figures-dia/fig0101.dia +617 -0
- data/test/progit/pt-br/figures-dia/fig0102.dia +921 -0
- data/test/progit/pt-br/figures-dia/fig0103.dia +1468 -0
- data/test/progit/pt-br/figures-dia/fig0104.dia +1432 -0
- data/test/progit/pt-br/figures-dia/fig0105.dia +1924 -0
- data/test/progit/pt-br/figures-dia/fig0106.dia +562 -0
- data/test/progit/pt-br/figures-dia/fig0201.dia +776 -0
- data/test/progit/pt-br/figures-dia/fig0301.dia +2006 -0
- data/test/progit/pt-br/figures-dia/fig0302.dia +2148 -0
- data/test/progit/pt-br/figures-dia/fig0316.dia +1079 -0
- data/test/progit/pt-br/figures-dia/fig0322.dia +1142 -0
- data/test/progit/pt-br/figures-dia/fig0323.dia +1407 -0
- data/test/progit/pt-br/figures-dia/fig0324.dia +1603 -0
- data/test/progit/pt-br/figures-dia/fig0325.dia +2003 -0
- data/test/progit/pt-br/figures-dia/fig0326.dia +2013 -0
- data/test/progit/pt-br/figures-dia/fig0336.dia +786 -0
- data/test/progit/pt-br/figures-dia/fig0337.dia +1546 -0
- data/test/progit/pt-br/figures-dia/fig0338.dia +1755 -0
- data/test/progit/pt-br/figures-dia/fig0339.dia +1882 -0
- data/test/progit/pt-br/figures-dia/fig0501.dia +456 -0
- data/test/progit/pt-br/figures-dia/fig0502.dia +965 -0
- data/test/progit/pt-br/figures-dia/fig0503.dia +914 -0
- data/test/progit/pt-br/figures-dia/fig0511.dia +1201 -0
- data/test/progit/pt-br/figures-dia/fig0515.dia +1721 -0
- data/test/progit/pt-br/figures-dia/fig0702.dia +795 -0
- data/test/progit/pt-br/figures-dia/fig0703.dia +795 -0
- data/test/progit/pt-br/figures-dia/fig0901.dia +669 -0
- data/test/progit/pt-br/figures-dia/fig0902.dia +834 -0
- data/test/progit/pt-br/figures-dia/fig0903.dia +1483 -0
- data/test/progit/pt-br/figures-dia/fig0904.dia +1728 -0
- data/test/progit/ro/01-introduction/01-chapter1.markdown +257 -0
- data/test/progit/ru/01-introduction/01-chapter1.markdown +259 -0
- data/test/progit/ru/02-git-basics/01-chapter2.markdown +1155 -0
- data/test/progit/ru/03-git-branching/01-chapter3.markdown +598 -0
- data/test/progit/ru/04-git-server/01-chapter4.markdown +854 -0
- data/test/progit/ru/05-distributed-git/01-chapter5.markdown +897 -0
- data/test/progit/ru/06-git-tools/01-chapter6.markdown +1126 -0
- data/test/progit/ru/07-customizing-git/01-chapter7.markdown +938 -0
- data/test/progit/ru/08-git-and-other-scms/01-chapter8.markdown +691 -0
- data/test/progit/ru/09-git-internals/01-chapter9.markdown +977 -0
- data/test/progit/ru/Glossary +38 -0
- data/test/progit/ru/README +12 -0
- data/test/progit/ru/figures-dia/fig0101.dia +647 -0
- data/test/progit/ru/figures-dia/fig0102.dia +1009 -0
- data/test/progit/ru/figures-dia/fig0103.dia +1468 -0
- data/test/progit/ru/figures-dia/fig0104.dia +1432 -0
- data/test/progit/ru/figures-dia/fig0105.dia +1924 -0
- data/test/progit/ru/figures-dia/fig0106.dia +561 -0
- data/test/progit/ru/figures-dia/fig0201.dia +774 -0
- data/test/progit/ru/figures-dia/fig0322.dia +1182 -0
- data/test/progit/ru/figures-dia/fig0323.dia +1457 -0
- data/test/progit/ru/figures-dia/fig0324.dia +1698 -0
- data/test/progit/ru/figures-dia/fig0325.dia +2101 -0
- data/test/progit/ru/figures-dia/fig0326.dia +2111 -0
- data/test/progit/ru/figures-dia/fig0336.dia +786 -0
- data/test/progit/ru/figures-dia/fig0337.dia +1546 -0
- data/test/progit/ru/figures-dia/fig0338.dia +1755 -0
- data/test/progit/ru/figures-dia/fig0339.dia +1882 -0
- data/test/progit/ru/figures-dia/fig0501.dia +477 -0
- data/test/progit/ru/figures-dia/fig0502.dia +1063 -0
- data/test/progit/ru/figures-dia/fig0503.dia +915 -0
- data/test/progit/ru/figures-dia/fig0511.dia +1201 -0
- data/test/progit/ru/figures-dia/fig0515.dia +1741 -0
- data/test/progit/ru/figures-dia/fig0702.dia +851 -0
- data/test/progit/ru/figures-dia/fig0703.dia +851 -0
- data/test/progit/sr/01-introduction/01-chapter1.markdown +257 -0
- data/test/progit/summary.rb +29 -0
- data/test/progit/th/01-introduction/01-chapter1.markdown +257 -0
- data/test/progit/th/02-git-basics/01-chapter2.markdown +1126 -0
- data/test/progit/th/README.md +47 -0
- data/test/progit/tr/01-introduction/01-chapter1.markdown +258 -0
- data/test/progit/tr/02-git-basics/01-chapter2.markdown +1129 -0
- data/test/progit/tr/03-git-branching/01-chapter3.markdown +598 -0
- data/test/progit/tr/04-git-server/01-chapter4.markdown +73 -0
- data/test/progit/tr/05-distributed-git/01-chapter5.markdown +215 -0
- data/test/progit/uk/01-introduction/01-chapter1.markdown +522 -0
- data/test/progit/vi/01-introduction/01-chapter1.markdown +259 -0
- data/test/progit/vi/02-git-basics/01-chapter2.markdown +1172 -0
- data/test/progit/vi/03-git-branching/01-chapter3.markdown +598 -0
- data/test/progit/zh-tw/01-introduction/01-chapter1.markdown +259 -0
- data/test/progit/zh-tw/02-git-basics/01-chapter2.markdown +1183 -0
- data/test/progit/zh-tw/03-git-branching/01-chapter3.markdown +604 -0
- data/test/progit/zh-tw/04-git-server/01-chapter4.markdown +866 -0
- data/test/progit/zh-tw/05-distributed-git/01-chapter5.markdown +912 -0
- data/test/progit/zh-tw/06-git-tools/01-chapter6.markdown +1139 -0
- data/test/progit/zh-tw/07-customizing-git/01-chapter7.markdown +932 -0
- data/test/progit/zh-tw/08-git-and-other-scms/01-chapter8.markdown +689 -0
- data/test/progit/zh-tw/09-git-internals/01-chapter9.markdown +977 -0
- data/test/progit/zh/01-introduction/01-chapter1.markdown +259 -0
- data/test/progit/zh/02-git-basics/01-chapter2.markdown +1177 -0
- data/test/progit/zh/03-git-branching/01-chapter3.markdown +604 -0
- data/test/progit/zh/04-git-server/01-chapter4.markdown +866 -0
- data/test/progit/zh/05-distributed-git/01-chapter5.markdown +912 -0
- data/test/progit/zh/06-git-tools/01-chapter6.markdown +1125 -0
- data/test/progit/zh/07-customizing-git/01-chapter7.markdown +935 -0
- data/test/progit/zh/08-git-and-other-scms/01-chapter8.markdown +689 -0
- data/test/progit/zh/09-git-internals/01-chapter9.markdown +976 -0
- data/test/spec_tests.json +4382 -4070
- data/test/test_basics.rb +1 -1
- data/test/test_helper.rb +1 -0
- data/test/test_maliciousness.rb +4 -2
- data/test/test_pathological_inputs.rb +31 -30
- data/test/test_spec.rb +5 -4
- metadata +972 -4
@@ -0,0 +1,47 @@
|
|
1
|
+
[![Build Status](https://secure.travis-ci.org/progit/progit.png?branch=master)](https://travis-ci.org/progit/progit)
|
2
|
+
|
3
|
+
# เนื้อหาภายในหนังสือ Pro Git
|
4
|
+
|
5
|
+
ภายในนี้คือต้นฉบับของเนื้อหาภายใน Pro Git ทั้งหมด เนื้อหาในหนังสือ Pro Git ใช้สัญญาอนุญาตของครีเอทีฟคอมมอนส์เวอร์ชัน 3.0 ชนิด "อ้างอิงแหล่งที่มา ห้ามนำไปใช้เพื่อการค้า และให้อนุญาตต่อไปแบบเดียวกัน"
|
6
|
+
เราหวังว่าหนังสือเล่มนี้จะช่วยให้เรียนรู้การใช้ Git ได้สะดวกขึ้น คุณสามารถสนับสนุนเราและสำนักพิมพ์ Apress ได้โดยสั่งซื้อหนังสือเล่มนี้ผ่าน Amazon
|
7
|
+
|
8
|
+
http://tinyurl.com/amazonprogit
|
9
|
+
|
10
|
+
หรือสามารถเข้าถึงที่:
|
11
|
+
|
12
|
+
http://git-scm.com/book/
|
13
|
+
|
14
|
+
# การสร้าง Ebooks
|
15
|
+
|
16
|
+
บนระบบปฏิบัติการ Fedora เวอร์ชัน 16 ขึ้นไป สามารถใช้คำสั่งด้านล่างนี้เพื่อสร้าง ebook ได้
|
17
|
+
|
18
|
+
$ yum install ruby calibre rubygems ruby-devel rubygem-ruby-debug rubygem-rdiscount
|
19
|
+
$ makeebooks en # will produce a mobi
|
20
|
+
|
21
|
+
ในระบบปฏิบัติการ MacOS สามารถทำตามขั้นตอนดังนี้
|
22
|
+
|
23
|
+
1. ติดตั้ง ruby และ rubygems
|
24
|
+
2. `$ gem install rdiscount`
|
25
|
+
3. ดาวน์โหลดและติดตั้งโปรแกรม Calibre, command line tools และโปรแกรมสำหรับสร้างไฟล์ PDF:
|
26
|
+
* pandoc: http://johnmacfarlane.net/pandoc/installing.html
|
27
|
+
* xelatex: http://tug.org/mactex/
|
28
|
+
4. `$ makeebooks th` # จะได้ไฟล์ที่มี extension `.mobi`
|
29
|
+
|
30
|
+
# ข้อผิดพลาด
|
31
|
+
|
32
|
+
หากพบข้อผิดพลาดภายในหนังสือหรือพบจุดที่ต้องแก้ไข กรุณาแจ้งปัญหาผ่านระบบ issue ของ GitHub โดยการ[สร้าง issue](https://github.com/progit/progit/issues/new)
|
33
|
+
หลังจากสร้าง issue แล้ว ผู้ดูแลจะเข้ามารับเรื่องและดำเนินการต่อไป
|
34
|
+
|
35
|
+
|
36
|
+
# การแปลหนังสือ
|
37
|
+
|
38
|
+
หากต้องการแปลเนื้อหาภายในหนังสือ คุณสามารถแปลเนื้อหาภายในโฟลเดอร์ย่อยที่ตรงกับภาษาที่แปล ชื่อของโฟลเดอร์ย่อยจะใช้รหัสภาษาแบบ [ISO 639](http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes)
|
39
|
+
เมื่อแปลเสร็จเรียบร้อยแล้ว ขอให้ส่ง pull request กลับมายัง repository เดิม
|
40
|
+
|
41
|
+
# การส่ง pull request
|
42
|
+
|
43
|
+
* ขอให้แน่ใจว่า encoding ของไฟล์เป็น UTF-8
|
44
|
+
* โปรดแยกการ pull request หากคุณแก้ไขเนื้อหาที่เป็นภาษาหลักของหนังสือ และเนื้อหาที่แปลจากภาษาหลัก
|
45
|
+
* หากแปลเนื้อหาภายในหนังสือ ขอให้เขียน commit message โดยให้มีรหัสของภาษาตาม ISO 639 ที่ครอบด้วยวงเล็บแบบก้ามปู ตามด้วยสิ่งที่เปลี่ยนแปลง เช่น `[de] Update chapter 2`
|
46
|
+
* ตรวจสอบการ conflict ด้วยทุกครั้ง เนื่องจากเมื่อเกิด conflict ผู้ดูแลจะไม่รวมด้วยมือ
|
47
|
+
* ขอให้แน่ใจว่าสิ่งที่แก้ไขสามารถแปลงเป็น PDF, ebook และสามารถนำขึ้นเว็บไซต์ git-scm.com ได้โดยไม่มีปัญหาใด ๆ
|
@@ -0,0 +1,258 @@
|
|
1
|
+
# Başlangıç #
|
2
|
+
|
3
|
+
Bu bölümde Git kullanımı hakkında temel bilgileri bulacaksınız. İşe, sürüm kontrol sistemleri hakkında açıklamalarla başlayacağız; daha sonra Git kurulumunun nasıl yapılacağını, en son olarak da aracın yapılandırma ve kullanımını açıklayacağız. Bu bölümün sonunda Git'in varlık sebebini ve neden onu kullanmanız gerektiğini anlayacak, Git'i kullanmaya başlamak için kurulumu tamamlamış olacaksınız.
|
4
|
+
|
5
|
+
## Sürüm Kontrolü Hakkında ##
|
6
|
+
|
7
|
+
Sürüm kontrolü nedir ve ne işe yarar? Sürüm kontrolü, bir ya da daha fazla dosya üzerinde yapılan değişiklikleri kaydeden ve daha sonra belirli bir sürüme geri dönebilmenizi sağlayan bir sistemdir. Bu kitaptaki örneklerde yazılım kaynak kod dosyalarının sürüm kontrolünü yapacaksınız, ne var ki gerçekte sürüm kontrolünü neredeyse her türden dosya için kullanabilirsiniz.
|
8
|
+
|
9
|
+
Bir grafik ya da web tasarımcısıysanız ve bir görselin ya da tasarımın değişik sürümlerini korumak istiyorsanız (ki muhtemelen bunu yapmak istersiniz), bir Sürüm Kontrol Sistemi (SKS) kullanmanız çok akıllıca olacaktır. SKS, dosyaların ya da bütün projenin geçmişteki belirli bir sürümüne erişmenizi, zaman içinde yapılan değişiklikleri karşılaştırmanızı, soruna neden olan şeyde en son kimin değişiklik yaptığını, belirli bir hatayı kimin, ne zaman sisteme dahil ettiğini ve daha başka pek çok şeyi görebilmenizi sağlar. Öte yandan, SKS kullanmak, bir hata yaptığınızda ya da bazı dosyaları yanlışlıkla sildiğinizde durumu kolayca telâfi etmenize yardımcı olur. Üstelik, bütün bunlar size kayda değer bir ek yük de getirmez.
|
10
|
+
|
11
|
+
### Yerel Sürüm Kontrol Sistemleri ###
|
12
|
+
|
13
|
+
Çoğu insan, dosyaları bir klasöre (akılları başlarındaysa tarih ve zaman bilgisini de içeren bir klasöre) kopyalayarak sürüm kontrolü yapmayı tercih eder. Bu yaklaşım çok yaygındır, çünkü çok kolaydır; ama aynı zamanda hatalara da alabildiğine açıktır. Hangi klasörde olduğunuzu unutup yanlış dosyaya yazabilir ya da istemediğiniz dosyaların üstüne kopyalama yapabilirsiniz.
|
14
|
+
|
15
|
+
Bu sorunla baş edebilmek için, programcılar uzun zaman önce, dosyalardaki bütün değişiklikleri sürüm kontrolüne alan basit bir veritabanına sahip olan yerel SKS'ler geliştirdiler (bkz. Figür 1-1).
|
16
|
+
|
17
|
+
Insert 18333fig0101.png
|
18
|
+
Figür 1-1. Yerel sürüm kontrol diyagramı.
|
19
|
+
|
20
|
+
En yaygın SKS araçlarından biri, bugün hâlâ pekçok bilgisayara kurulu olarak dağıtılan, rcs adında bir sistemdi. Ünlü Mac OS X işletim sistemi bile, Developer Tools'u yüklediğinizde, rcs komutunu kurmaktadır. Bu araç, iki sürüm arasındaki yamaları (yani, dosyalar arasındaki farkları) özel bir biçimde diske kaydeder; daha sonra, bu yamaları birbirine ekleyerek, bir dosyanın belirli bir sürümdeki görünümünü yeniden oluşturur.
|
21
|
+
|
22
|
+
### Merkezi Sürüm Kontrol Sistemleri ###
|
23
|
+
|
24
|
+
İnsanların karşılaştığı ikinci büyük sorun, başka sistemlerdeki programcılarla birlikte çalışma ihtiyacından ileri gelir. Bu sorunla başa çıkabilmek için, Merkezi Sürüm Kontrol Sistemleri (MSKS) geliştirilmiştir. Bu sistemler, meselâ CVS, Subversion ve Perforce, sürüm kontrolüne alınan bütün dosyaları tutan bir sunucu ve bu sunucudan dosyaları seçerek alan (_check out_) istemcilerden oluşur. Bu yöntem, yıllarca, sürüm kontrolünde standart yöntem olarak kabul gördü (bkz. Figür 1-2).
|
25
|
+
|
26
|
+
Insert 18333fig0102.png
|
27
|
+
Figür 1-2. Merkezi sürüm kontrol diyagramı.
|
28
|
+
|
29
|
+
Bu yöntemin, özellikle yerel SKS'lere göre, çok sayıda avantajı vardır. Örneğin, bir projedeki herkes, diğerlerinin ne yaptığından belirli ölçüde haberdardır. Sistem yöneticileri kimin hangi yetkilere sahip olacağını oldukça ayrıntılı biçimde düzenleyebilirler; üstelik bir MSKS'yi yönetmek, her istemcide ayrı ayrı kurulu olan yerel veritabanlarını yönetmeye göre çok daha kolaydır.
|
30
|
+
|
31
|
+
Ne var ki, bu yöntemin de ciddi bazı sıkıntıları vardır. En aşikar sıkıntı, merkezi sunucunun arızalanması durumunda ortaya çıkacak kırılma noktası problemidir. Sunucu bir saatliğine çökecek olsa, o bir saat boyunca kullanıcıların çalışmalarını sisteme aktarmaları ya da çalıştıkları şeylerin sürümlenmiş kopyalarını kaydetmeleri mümkün olmayacaktır. Merkezi veritabanının sabit diski bozulacak olsa, yedekleme de olması gerektiği gibi yapılmamışsa, elinizdeki her şeyi —projenin, kullanıcıların bilgisayarlarında kalan yerel bellek kopyaları (_snapshot_) dışındaki bütün tarihçesini— kaybedersiniz. Yerel SKS'ler de bu sorundan muzdariptir —projenin bütün tarihçesini tek bir yerde tuttuğunuz sürece her şeyi kaybetme riskiniz vardır.
|
32
|
+
|
33
|
+
### Dağıtık Sürüm Kontrol Sistemleri ###
|
34
|
+
|
35
|
+
Bu noktada Dağıtık Sürüm Kontrol Sistemleri (DSKS) devreye girer. Bir DSKS'de (Git, Mercurial, Bazaar ya da Darcs örneklerinde olduğu gibi), istemciler (kullanıcılar) dosyaların yalnızca en son bellek kopyalarını almakla kalmazlar: yazılım havuzunu (_repository_) bütünüyle yansılarlar (kopyalarlar).
|
36
|
+
|
37
|
+
Böylece, sunuculardan biri çökerse, ve o sunucu üzerinden ortak çalışma yürüten sistemler varsa, istemcilerden birinin yazılım havuzu sunucuya geri yüklenerek sistem kurtarılabilir. Her seçme (_checkout_) işlemi esasında bütün verinin yedeklenmesiyle sonuçlanır (bkz. Figür 1-3).
|
38
|
+
|
39
|
+
Insert 18333fig0103.png
|
40
|
+
Figür 1-3. Dağıtık sürüm kontrol diyagramı.
|
41
|
+
|
42
|
+
Dahası, bu sistemlerden çoğu birden çok uzak uçbirimdeki yazılım havuzuyla rahatlıkla çalışır, böylece, aynı proje için aynı anda farklı insan topluluklarıyla farklı biçimlerde ortak çalışmalar yürütebilirsiniz. Bu, birden çok iş akışı ile çalışabilmenizi sağlar, ki bu merkezi sistemlerde (hiyerarşik modeller gibi) mümkün değildir.
|
43
|
+
|
44
|
+
## Git'in Kısa Bir Tarihçesi ##
|
45
|
+
|
46
|
+
Hayattaki pek çok harika şey gibi, Git de bir miktar yaratıcı yıkım ve ateşli tartışmayla başladı. Linux çekirdeği (_kernel_) oldukça büyük ölçekli bir açık kaynak kodlu yazılım projesidir. Linux çekirdek bakım ve geliştirme yaşam süresinin çoğunda (1991-2002), yazılım değişiklikleri yamalar ve arşiv dosyaları olarak tutulup taşındı. 2002 yılında, Linux çekirdek projesi, BitKeeper adında tescilli bir DSKS kullanmaya başladı.
|
47
|
+
|
48
|
+
2005 yılında, Linux çekirdeğini geliştiren toplulukla BitKeeper'ı geliştiren şirket arasındaki ilişki bozuldu ve aracın topluluk tarafından ücretsiz olarak kullanılabilmesi uygulamasına son verildi. Bu, Linux geliştirim topluluğunu (ve özellikle Linux'un yaratıcısı olan Linus Torvalds'ı) BitKeeper'ı kullanırken aldıkları derslerden yola çıkarak kendi araçlarını geliştirme konusunda harekete geçirdi. Yeni sistemin hedeflerinden bazıları şunlardı:
|
49
|
+
|
50
|
+
* Hız
|
51
|
+
* Basit tasarım
|
52
|
+
* Çizgisel olmayan geliştirim için güçlü destek (binlerce paralel dal (_branch_))
|
53
|
+
* Bütünüyle dağıtık olma
|
54
|
+
* Linux çekirdeği gibi büyük projelerle verimli biçimde başa çıkabilme (hız ve veri boyutu)
|
55
|
+
|
56
|
+
2005'teki doğumundan beri, Git kullanım kolaylıklarını geliştirebilmek için evrilip olgunlaştı, ama yine de bu niteliklerini korudu. Git, inanılmaz ölçüde hızlı, büyük ölçekli projelerde alabildiğine verimli ve çizgisel olmayan geliştirim (bkz. 3. Bölüm) için inanılmaz bir dallanma (_branching_) sistemine sahip.
|
57
|
+
|
58
|
+
## Git'in Temelleri ##
|
59
|
+
|
60
|
+
Peki Git özünde nedir? Bu, özümsenmesi gereken önemli bir alt bölüm, çünkü Git'in ne olduğunu ve temel çalışma ilkelerini anlarsanız, Git'i etkili biçimde kullanmanız çok daha kolay olacaktır. Git'i öğrenirken, Subversion ve Perforce gibi diğer SKS'ler hakkında bildiklerinizi aklınızdan çıkarmaya çalışın; bu aracı kullanırken yaşanabilecek kafa karışıklıklarını önlemenize yardımcı olacaktır. Git'in, kullanıcı arayüzü söz konusu sistemlerle benzerlik gösterse de, bilgiyi depolama ve yorumlama biçimi çok farklıdır; bu farklılıkları anlamak, aracı kullanırken kafa karışıklığına düşmenizi engellemekte yardımcı olacaktır.
|
61
|
+
|
62
|
+
### Farklar Değil, Bellek Kopyaları ###
|
63
|
+
|
64
|
+
Git ile diğer SKS'ler (Subversion ve ahbapları dahil) arasındaki esas fark, Git'in bilgiyi yorumlayış biçimiyle ilgilidir. Kavramsal olarak, diğer sistemlerin çoğu, bilgiyi dosya-tabanlı bir dizi değişiklik olarak depolar. Bu sistemler (CVS, Subversion, Perforce, Bazaar ve saire) bilgiyi, kayıt altında tuttukları bir dosya kümesi ve zamanla her bir dosya üzerinde yapılan değişikliklerin listesi olarak yorumlarlar (bkz. Figür 1-4).
|
65
|
+
|
66
|
+
Insert 18333fig0104.png
|
67
|
+
Figür 1-4. Diğer sistemler veriyi her bir dosyanın ilk sürümu üzerinde yapılan değişiklikler olarak depolama eğilimindedir.
|
68
|
+
|
69
|
+
Git, veriyi böyle yorumlayıp depolamaz. Bunun yerine, Git, veriyi, bir mini dosya sisteminin bellek kopyaları olarak yorumlar. Her kayıt işleminde (_commit_), ya da projenizin konumunu her kaydedişinizde, Git o anda dosyalarınızın nasıl göründüğünün bir fotoğrafını çekip o bellek kopyasına bir referansı depolar. Verimli olabilmek için, değişmeyen dosyaları yeniden depolamaz, yalnızca halihazırda depolanmış olan bir önceki özdeş kopyaya bir bağlantı kurar. Git'in veriyi yorumlayışı daha çok Figür 1-5'teki gibidir.
|
70
|
+
|
71
|
+
Insert 18333fig0105.png
|
72
|
+
Figür 1-5. Git veriyi projenin zaman içindeki bellek kopyaları olarak depolar.
|
73
|
+
|
74
|
+
Bu, Git'le neredeyse bütün diğer SKS'ler arasında ciddi bir ayrımdır. Bu ayrım nedeniyle Git, sürüm kontrolünün, diğer sürüm kontrol sistemlerinin çoğu tarafından önceki kuşaklardan devralınan neredeyse bütün yönlerini yeniden gözden geçirmek zorunda bırakır. Bu ayrım Git'i basit bir SKS olmanın ötesinde, etkili araçlara sahip bir mini dosya sistemi gibi olmaya iter. Veriyi bu şekilde yorumlamanın yararlarından bazılarını dallanmayı işleyeceğimiz 3. Bölüm'de ele alacağız.
|
75
|
+
|
76
|
+
### Neredeyse Her İşlem Yerel ###
|
77
|
+
|
78
|
+
Git'teki işlemlerin çoğu, yalnızca yerel dosyalara ve kaynaklara ihtiyaç duyar —genellikle bilgisayar ağındaki başka bir bilgisayardaki bilgilere ihtiyaç yoktur. Eğer çoğu işlemin ağ gecikmesi maliyetiyle gerçekleştiği bir MSKS kullanmışsanız, Git'in bu yönünü görünce, onun hız tanrıları tarafından kutsanmış olduğunu düşünebilirsiniz. Çünkü projenin bütün tarihçesi orada, yerel diskinde bulunmaktadır, işlemlerin çoğu anlık gerçekleşiyor gibi görünür.
|
79
|
+
|
80
|
+
Örneğin, projenin tarihçesini taramak için Git bir sunucuya bağlanıp oradan tarihçeyi indirdikten sonra görüntülemekle uğraşmaz —yerel veritabanını okumak yeterlidir. Bu da proje terihçesini neredeyse anında görünteleyebilmeniz anlamına gelir. Bir dosyanın şimdiki haliyle bir ay önceki hali arasındaki farkları görmek isterseniz, Git, bir sunucudan fark hesaplaması yapmasını talep etmek ya da karşılaştırmayı yerelde yapabilmek için dosyanın bir ay önceki halini indirmek zorunda kalmak yerine, dosyanın bir ay önceki halini yerelde bulup fark hesaplamasını yerelde yapar.
|
81
|
+
|
82
|
+
Bu aynı zamanda, eğer bağlantınız kopmuşsa, ya da VPN bağlantını yoksa yapamayacağınız şeylerin de sayıca oldukça sınırlı olduğu anlamına geliyor. Uçağa ya da trene binmiş olduğunuz halde biraz çalışmak istiyorsanız, yükleme yapabileceğiniz bir ağ bağlantısına kavuşana kadar güle oynaya kayıt yapabilirsiniz. Eve vardığınızda VPN istemcinizin olması gerektiği gibi çalışmıyorsa, yine de çalışmaya devam edebilirsiniz. pek çok başka sistemde bunları yapmak ya imk^ansız ya da zahmetlidir. Söz gelimi Perforce'ta, bir sunucuya bağlı değilseniz fazlaca bir şey yapamazsınız; Subversion ve CVS'te dosyaları değiştirebilirsiniz, ama veritabanına kayıt yapamazsınız (çünkü veritabanına bağlantınız yoktur). Bu, çok önemli bir sorun gibi görünmeyebilir, ama ne kadar fark yaratabileceğini gördüğünüzde şaşırabilirsiniz.
|
83
|
+
|
84
|
+
### Git Bütünlüklüdür ###
|
85
|
+
|
86
|
+
Git'te her şey depolanmadan önce sınama toplamından geçirilir (_checksum_) ve daha sonra bu sınama toplamı kullanılarak ifade edilir. Bu da demek oluyor ki, Git fark etmeden bir dosyanın ya da klasörün içeriğini değiştirmek mümkün değildir. Bu işlev Git'in merkezi işlevlerinden biridir ve felsefesiyle bir bütünlük oluşturur. Transfer sırasında veri kaybı ya da doysa arızası olmuşsa, Git bunu mutlaka fark edecektir.
|
87
|
+
|
88
|
+
Git'in sınama toplamı için kullandığı mekanizmaya SHA-1 özeti denir. Bu, on altılı sayı sisteminin (_hexadecimal_) sembolleriyle gösterilen (0-9 ve A-F) ve dosya ve klasör düzenini temel alan bir hesaplamayla elde denilen 40 karakterlik bir karakter dizisidir. Bir SHA-1 özeti şuna benzer:
|
89
|
+
|
90
|
+
24b9da6552252987aa493b52f8696cd6d3b00373
|
91
|
+
|
92
|
+
Bu özetler sıklıkla karşınıza çıkacak, çünkü Git onları yaygın biçimde kullanyor. Hatta, Git her şeyi dosya adıyla değil, içeriğinin özet değeriyle adreslenen veritabanında tutar.
|
93
|
+
|
94
|
+
### Git Genellikle Yalnızca Veri Ekler ###
|
95
|
+
|
96
|
+
Git'te işlem yaptığınızda neredeyse bu işlemlerin tamamı Git veritabanına veri ekler. Sistemin geri döndürülemez bir şey yapmasını ya da veri silmesini sağlamak çok zordur. Her SKS'de olduğu gibi henüz kaydetmediğiniz değişiklikleri kaybedebilir ya da bozabilirsiniz; ama Git'e bir bellek kopyasını kaydettikten sonra veri kaybetmek çok zordur, özellikle de veritabanınızı düzenli olarak başka bir yazılım havuzuna itiyorsanız (_push_).
|
97
|
+
|
98
|
+
Bu Git kullanmayı keyifli hale getirir, çünkü işleri ciddi biçimde sıkıntıya sokmadan denemeler yapabileceğimizi biliriz. Git'in veriyi nasıl depoladığı ve kaybolmuş görünen veriyi nasıl kurtarabileceğiniz hakkında daha derinlikli bir inceleme için bkz. 9. Bölüm.
|
99
|
+
|
100
|
+
### Üç Aşama ###
|
101
|
+
|
102
|
+
Şimdi dikkat! Öğrenme sürecinizin pürüzsüz ilerlemesini istiyorsanız, aklınızda bulundurmanız gereken esas şey bu. Git'te, dosyalarınızın içinde bulunabileceği üç aşama (_state_) vardır: kaydedilmiş, değiştirilmiş ve hazırlanmış. Kaydedilmiş, verinin güvenli biçimde veritabanında depolanmış olduğu anlamına gelir. Değiştirilmiş, dosyayı değiştirmiş olduğunuz fakat henüz veritabanına kaydetmediğiniz anlamına gelir. Hazırlanmış ise, değiştirilmiş bir dosyayı bir sonraki kayıt işleminde bellek kopyasına alınmak üzere işaretlediğiniz anlamına gelir.
|
103
|
+
|
104
|
+
Bu da bizi bir Git projesinin üç ana bölümüne getiriyor: Git klasörü, çalışma klasörü ve hazırlık alanı.
|
105
|
+
|
106
|
+
Insert 18333fig0106.png
|
107
|
+
Figür 1-6. Çalışma klasörü, hazırlık alanı ve Git klasörü.
|
108
|
+
|
109
|
+
Git klasörü, Git'in üstverileri (_metadata_) ve nesne veritabanını depoladığı yerdir. Bu, Git'in en önemli parçasıdır ve bir yazılım havuzunu bir bilgisayardan bir başkasına klonladığınızda kopyalanan şeydir.
|
110
|
+
|
111
|
+
Çalışma klasörü projenin bir sürümünden yapılan tek bir seçmedir. Bu dosyalar Git klasöründeki sıkıştırılmış veritabanından çıkartılıp sizin kullanımınız için sabit diske yerleştirilir.
|
112
|
+
|
113
|
+
Hazırlık alanı (_staging area_), genellikle Git klasörünüzde bulunan ve bir sonraki kayıt işlemine hangi değişikliklerin dahil olacağını tutan sade bir dosyadır. Buna bazen indeks dendiği de olur, ama hazırlık alanı ifadesi giderek daha standart hale geliyor.
|
114
|
+
|
115
|
+
Git işleyişi temelde şöyledir:
|
116
|
+
|
117
|
+
1. Çalışma klasörünüzdeki dosyalar üzerinde değişiklik yaparsınız.
|
118
|
+
2. Dosyaları bellek kopyalarını hazırlık alanına ekleyerek hazırlarsınız.
|
119
|
+
3. Dosyaların hazırlık alanındaki hallerini alıp oradaki bellek kopyasını kalıcı olarak Git klasörüne depolayan bir kayıt işlemi yaparsınız.
|
120
|
+
|
121
|
+
Bir dosyanın belirli bir sürümü Git klasöründeyse, onun kaydedilmiş olduğu kabul edilir. Eğer üzerinde değişiklik yapılmış fakat hazırlık alanına eklenmişse, hazırlanmış olduğu söylenir. Ve seçme işleminden sonra üzerinde değişiklik yapılmış fakat kayıt için hazırlanmamışsa, değiştirilmiş olarak nitelenir.
|
122
|
+
|
123
|
+
## Git'in Kurulumu ##
|
124
|
+
|
125
|
+
Gelin Git'i kullanmaya başlayalım. Her şeyden önce, Git'i kurmanız gerekiyor. Bunu iki başlıca biçimde gerçekleştirebilirsiniz: kaynak kodundan ya da platformunuz için halihazırda varolan paketi kullanarak kurabilirsiniz.
|
126
|
+
|
127
|
+
### Kaynak Kodundan Kurulum ###
|
128
|
+
|
129
|
+
Yapabiliyorsanız, Git'i kaynak kodundan kurmak kullanışlıdır, çünkü böylece en yeni versiyonunu edinebilirsiniz. Git'in her yeni versiyonu yararlı kullanıcı arayüzü güncellemeleri içerir, dolayısıyla en son versiyonu kurmak, eğer yazılım derlemek konusunda sıkıntı yaşamayacağınızı düşünüyorsanız, en iyi yoldur. Ayrıca kimi zaman, Linux dağıtımları yazılımların çok eski paketlerini içerirler; dolayısıyla, çok güncel bir dağıtıma sahip değilseniz ya da terstaşımalar (_backport_) kullanmıyorsanız, kaynak koddan kurulum en mantıklı seçenek olabilir.
|
130
|
+
|
131
|
+
Git'i kurmak için, Git'in bağımlı olduğu şu kütüphanelerin sisteminizde bulunması gerekiyor: curl, zlib, openssl, expat, ve libiconv. Örneğin, (Fedora gibi) yum aracına ya da (Debian tabanlı sistemler gibi) apt-get aracına sahip bir sistemdeyseniz, bağımlılıkları kurmak için şu komutlardan birini kullanabilirsiniz:
|
132
|
+
|
133
|
+
$ yum install curl-devel expat-devel gettext-devel \
|
134
|
+
openssl-devel zlib-devel
|
135
|
+
|
136
|
+
$ apt-get install libcurl4-gnutls-dev libexpat1-dev gettext \
|
137
|
+
libz-dev libssl-dev
|
138
|
+
|
139
|
+
Bütün gerekli bağımlılıkları yükledikten sonra Git web sitesinden en son bellek kopyasını edinebilirsiniz:
|
140
|
+
|
141
|
+
http://git-scm.com/download
|
142
|
+
|
143
|
+
Sonra derleyip kurabilirsiniz:
|
144
|
+
|
145
|
+
$ tar -zxf git-1.7.2.2.tar.gz
|
146
|
+
$ cd git-1.7.2.2
|
147
|
+
$ make prefix=/usr/local all
|
148
|
+
$ sudo make prefix=/usr/local install
|
149
|
+
|
150
|
+
Bu adımdan sonra, Git'teki yeni güncellemeleri Git'in kendisini kullanarak edinebilirsiniz:
|
151
|
+
|
152
|
+
$ git clone git://git.kernel.org/pub/scm/git/git.git
|
153
|
+
|
154
|
+
### Linux'ta Kurulum ###
|
155
|
+
|
156
|
+
Git'i Linux sisteminize paket kurucu yardımıyla kurmak istiyorsanız, bunu genellikle dağıtımınızla birlikte gelen temel paket yönetim aracıyla yapabilirsiniz. Fedora kullanıcısıysanız, yum'u kullanabilirsiniz:
|
157
|
+
|
158
|
+
$ yum install git-core
|
159
|
+
|
160
|
+
Ubuntu gibi Debian-tabanlı bir sistemdeyseniz, apt-get'i kullanabilirsiniz:
|
161
|
+
|
162
|
+
$ apt-get install git
|
163
|
+
|
164
|
+
### Mac'te Kurulum ###
|
165
|
+
|
166
|
+
Git'i Mac'te kurmak için iki kolay yol vardır. En kolayı, SourceForge sayfasından indirebileceğiniz görsel Git yükleyicisini kullanmaktır (bkz. Figür 1-7).
|
167
|
+
|
168
|
+
http://sourceforge.net/projects/git-osx-installer/
|
169
|
+
|
170
|
+
Insert 18333fig0107.png
|
171
|
+
Figür 1-7. Git OS X yükleyicisi.
|
172
|
+
|
173
|
+
Diğer başlıca yol, Git'i MacPorts (`http://www.macports.org`) vasıtasıyla kurmaktır. MacPorts halihazırda kurulu bulunuyorsa Git'i şu komutla kurabilirsiniz:
|
174
|
+
|
175
|
+
$ sudo port install git-core +svn +doc +bash_completion +gitweb
|
176
|
+
|
177
|
+
Bütün ek paketleri kurmanız şart değil, ama Git'i Subversion yazılım havuzlarıyla kullanmanız gerekecekse en azından +svn'i edinmelisiniz.
|
178
|
+
|
179
|
+
### Windows'ta Kurulum ###
|
180
|
+
|
181
|
+
Git'i Windows'da kurmak oldukça kolaydır. mysysGit projesi en basit kurulum yöntemlerinden birine sahip. Çalıştırılabilir kurulum dosyasını GitHub sayfasından indirip çalıştırmanız yeterli:
|
182
|
+
|
183
|
+
http://msysgit.github.com/
|
184
|
+
|
185
|
+
Kurulum tamamlandığında hem (daha sonra işe yarayacak olan SSH istemcisini de içeren) komut satırı nüshasına hem de standart kullanıcı arayüzüne sahip olacaksınız.
|
186
|
+
|
187
|
+
## İlk Ayarlamalar ##
|
188
|
+
|
189
|
+
Artık Git sisteminizde kurulu olduğuna göre, onu ihtiyacınıza göre uyarlamak için bazı düzenlemeler yapabilirsiniz. Bunları yalnızca bir kere yapmanız yeterli olacaktır: güncellemelerden etkilenmeyeceklerdir. Ayrıca istediğiniz zaman komutları yeniden çalıştırarak ayarları değiştirebilirsiniz.
|
190
|
+
|
191
|
+
Git, Git'in nasıl görüneceğini ve çalışacağını belirleyen bütün konfigürasyon değişkenlerini görmenizi ve değiştirmenizi sağlayan git config adında bir araçla birlikte gelir. Bu değişkenler üç farklı yerde depolanabilirler:
|
192
|
+
|
193
|
+
* `/etc/gitconfig` dosyası: Sistemdeki bütün kullanıcılar ve onların bütün yazılım havuzları için geçerli olan değerleri içerir. `git config` komutunu `--system` seçeneğiyle kullanırsanız, araç bu dosyadan okuyup değişiklikleri bu dosyaya kaydedecektir.
|
194
|
+
* `~/.gitconfig` dosyası: Kullanıcıya özeldir. `--global` seçeneğiyle Git'in bu dosyadan okuyup değişiklikleri bu dosyaya kaydetmesini sağlayabilirsiniz.
|
195
|
+
* kullanmakta olduğunuz yazılım havuzundaki git klasöründe bulunan config dosyası (yani `.git/config`): Söz konusu yazılım havuzuna özeldir. Her düzeydeki ayarlar kendisinden önce gelen düzeydeki ayarları gölgede bırakır (_override_), dolayısıyla `.git/config`'deki değerler `/etc/gitconfig`'deki değerlerden daha baskındır.
|
196
|
+
|
197
|
+
Git, Windows sistemlerde `$HOME` klasöründeki (çoğu kullanıcı için `C:\Documents and Settings\$USER` klasörüdür) `.gitconfig` dosyasına bakar (Ç.N.: Windows kullanıcı klasörüne %HOMEPATH% çevresel değişkenini kullanarak ulaşabilirsiniz). Git, Windows sistemlerde de /etc/gitconfig dosyasını arar fakat bu konum, Git kurulumu sırasında seçtiğiniz MSys kök dizinine göredir.
|
198
|
+
|
199
|
+
### Kimliğiniz ###
|
200
|
+
|
201
|
+
Git'i kurduğunuzda yapmanız gereken ilk şey adınızı ve e-posta adresinizi ayarlamaktır. Bunun önemli olmasının nedeni her bir Git kaydının bu bilgiyi kullanıyor olması ve bu bilgilerin dolaşıma soktuğunuz kayıtlara değişmez biçimde işlenmesidir.
|
202
|
+
|
203
|
+
$ git config --global user.name "John Doe"
|
204
|
+
$ git config --global user.email johndoe@example.com
|
205
|
+
|
206
|
+
Yinelemek gerekirse, `--global` seçeneğini kullandığınızda bunu bir kez yapmanız yeterli olacaktır, çünkü Git, o sistemde yapacağınız her işlem için bu bilgileri kullanacaktır. İsmi ya da e-posta adresini projeden projeye değiştirmek isterseniz, komutu değişiklik yapmak istediğiniz proje klasörünün içinde `--global` seçeneği olmadan çalıştırabilirsiniz.
|
207
|
+
|
208
|
+
### Editörünüz ###
|
209
|
+
|
210
|
+
Kimlik ayarlarınızı yaptığınıza göre, Git sizden bir mesaj yazmanızı istediğinde kullanacağınız editörle ilgili düzenlemeyi yapabilirsiniz. Aksi belirtilmedikçe Git sisteminizdeki öntanımlı (_default_) editörü kullanır, bu da genellikle Vi ya da Vim'dir. Emacs gibi başka bir metin editörü kullanmak isterseniz, şu komutu kullanabilirsiniz:
|
211
|
+
|
212
|
+
$ git config --global core.editor emacs
|
213
|
+
|
214
|
+
### Dosya Karşılaştırma Aracınız ###
|
215
|
+
|
216
|
+
Düzenlemek isteyeceğiniz bir diğer yararlı ayar da birleştirme (_merge_) uyuşmazlıklarını gidermek için kullanacağınız araçla ilgilidir. vimdiff aracını seçmek için şu komutu kullanabilirsiniz:
|
217
|
+
|
218
|
+
$ git config --global merge.tool vimdiff
|
219
|
+
|
220
|
+
Git kdiff3, tkdiff, meld, xxdiff, emerge, vimdiff, gvimdiff, ecmerge ve opendiff araçlarını kabul eder. Dilerseniz özel bir araç için de ayarlamalar yapabilirsiniz (bununla ilgili daha fazla bilgi için bkz. 7. Bölüm).
|
221
|
+
|
222
|
+
### Ayarlarınızı Gözden Geçirmek ###
|
223
|
+
|
224
|
+
Ayarlarınızı gözden geçirmek isterseniz, Git'in bulabildiği bütün ayarları listelemek için `git config --list` komutunu kullanabilirsiniz.
|
225
|
+
|
226
|
+
$ git config --list
|
227
|
+
user.name=Scott Chacon
|
228
|
+
user.email=schacon@gmail.com
|
229
|
+
color.status=auto
|
230
|
+
color.branch=auto
|
231
|
+
color.interactive=auto
|
232
|
+
color.diff=auto
|
233
|
+
...
|
234
|
+
|
235
|
+
Bir ayarı birden çok kez görebilirsiniz; bunun nedeni Git'in aynı ayarı değişik dosyalardan (örneğin `etc/gitconfig` ve `~/.gitconfig`'den) okumuş olmasıdır. Bu durumda Git gördüğü her bir tekil ayar için en son bulduğu değeri kullanır.
|
236
|
+
|
237
|
+
`git config {ayar}` komutunu kullanarak Git'ten bir ayarın değerini görüntülemesini de isteyebilirsiniz:
|
238
|
+
|
239
|
+
$ git config user.name
|
240
|
+
Scott Chacon
|
241
|
+
|
242
|
+
## Yardım Almak ##
|
243
|
+
|
244
|
+
Git'i kullanırken yardıma ihtiyacınız olursa, herhangi bir Git komutunun yardım kılavuzu sayfasını (_manpage_) üç değişik biçimde görüntüleyebilirsiniz:
|
245
|
+
|
246
|
+
$ git help <eylem>
|
247
|
+
$ git <eylem> --help
|
248
|
+
$ man git-<eylem>
|
249
|
+
|
250
|
+
Örneğin, config komutu için kılavuzu sayfasını görüntülemek için şu komutu çalıştırabilirsiniz:
|
251
|
+
|
252
|
+
$ git help config
|
253
|
+
|
254
|
+
Bu komutların güzel tarafı onlara her an, ağ bağlantınız olmasa bile ulaşabiliyor olmanızdır. Eğer kılavuz sayfaları ve bu kitap yeterli olmazsa ve kişisel yardıma ihtiyaç duyacak olursanız, Freenode IRC sunucusundaki (irc.freenode.net) `#git` ya da `#github` kanallarına bağlanmayı deneyebilirsiniz. Bu kanallar Git hakkında derin bilgiye sahip yüzlerce kişi tarafından düzenli olarak ziyaret edilmektedir.
|
255
|
+
|
256
|
+
## Özet ##
|
257
|
+
|
258
|
+
Artık Git'in ne olduğu ve kullanmış olabileceğiniz MSKS'den hangi açılardan farklı olduğu konusunda temel bilgilere sahipsiniz. Ayrıca sisteminizde, sizin kimlik bilgilerinize göre ayarlanmış bir Git kurulumu bulunuyor. Şimdi Git'in temellerini öğrenme zamanı.
|
@@ -0,0 +1,1129 @@
|
|
1
|
+
# Git'in Temelleri #
|
2
|
+
|
3
|
+
Git'i kullanmaya başlamak için yalnızca bir bölüm okuyacak kadar zamanınız varsa, o bölüm, bu bölüm olmalı. Bu bölüm, Git'i kullanarak yapacağınız şeylerin çok büyük kısmı için kullanacağınız bütün temel komutları içeriyor. Bu bölümün sonunda bir yazılım havuzunun nasıl yapılandırıp, ilkleneceğini (_initialize_), dosyaların nasıl izlemeye alınıp izlemeden çıkarılacağını ve değişikliklerin nasıl hazırlanıp kaydedileceğini öğreneceksiniz. Bunlara ek olarak, Git'i bazı dosyaları ya da konumları belli örüntülere (_pattern_) uyan dosyaları görmezden gelmesi için nasıl ayarlayacağınızı, hataları hızlıca ve kolayca nasıl geri alabileceğinizi, projenizin tarihçesine nasıl göz gezdirip kayıtlar arasındaki farkları nasıl görüntüleyebileceğinizi ve uzak uçbirimlerden nasıl kod çekme işlemi yapabileceğinizi göstereceğiz.
|
4
|
+
|
5
|
+
## Bir Git Yazılım Havuzu Edinmek ##
|
6
|
+
|
7
|
+
Bir Git projesi edinmenin başlıca iki yolu vardır. Bunlardan ilki, halihazırda varolan bir projeyi Git'e aktarmaktır. İkincisi ise bir sunucuda yer alan bir Git yazılım havuzunu klonlamakdır.
|
8
|
+
|
9
|
+
### Var olan Bir Klasörde Yazılım Havuzu Oluşturmak ###
|
10
|
+
|
11
|
+
Var olan bir projenizi sürüm kontrolü altına almak istiyorsanız, projenin bulunduğu klasöre gidip aşağıdaki komutu çalıştırmanız gerekir:
|
12
|
+
|
13
|
+
$ git init
|
14
|
+
|
15
|
+
Bu, gerekli yazılım havuzu dosyalarını —Git iskeletini— içeren `.git` adında bir klasör oluşturur. Bu noktada, projenizdeki hiçbir şey sürüm kontrolüne girmiş değildir. (Oluşturulan `.git` klasöründe tam olarak hangi dosyaların bulunduğu hakkında daha fazla bilgi edinmek için bkz. _9. Bölüm_.)
|
16
|
+
|
17
|
+
Var olan dosyalarınızı sürüm kontrolüne almak istiyorsanız, o dosyaları hazırlayıp kayıt etmelisiniz. Bunu, sürüm kontrolüne almak istediğiniz dosyaları belirleyip kayıt altına aldığınız birkaç git komutuyla gerçekleştirebilirsiniz:
|
18
|
+
|
19
|
+
$ git add *.c
|
20
|
+
$ git add README
|
21
|
+
$ git commit -m 'projenin ilk hali'
|
22
|
+
|
23
|
+
Birazdan bu komutların üzerinde duracağız. Bu noktada, sürüm kontrolüne aldığınız dosyaları içeren bir Git yazılım havuzunuz var.
|
24
|
+
|
25
|
+
### Var olan Bir Yazılım Havuzunu Klonlamak ###
|
26
|
+
|
27
|
+
Var olan bir Git yazılım havuzunu klonlamak istiyorsanız —söz gelimi, katkıda bulunmak istediğiniz bir proje varsa- ihtiyacınız olan komut `git clone`. Subversion gibi başka SKS'lere aşinaysanız, komutun `checkout` değil `clone` olduğunu fark etmişsinizdir. Bu önemli bir ayrımdır —Git, sunucuda bulunan neredeyse bütün veriyi kopyalar. `git clone` komutunu çalıştırdığınızda her dosyanın proje tarihçesinde bulunan her sürümü istemciye indirilir. Hatta, sunucunuzun diski bozulacak olsa, herhangi bir istemcideki herhangi bir klonu, sunucuyu klonlandığı zamanki haline geri getirmek için kullanabilirsiniz (sunucunuzdaki bazı çengel betikleri (_hook_) kaybedebilirsiniz, ama sürümlenmiş verinin tamamı elinizin altında olacaktır —daha fazla ayrıntı için bkz. _4. Bölüm_)
|
28
|
+
|
29
|
+
Bir yazılım havuzu `git clone [url]` komutuyla klonlanır. Örneğin, Grit adlı Ruby Git kütüphanesini klonlamak isterseniz, bunu şu şekilde yapabilirsiniz:
|
30
|
+
|
31
|
+
$ git clone git://github.com/schacon/grit.git
|
32
|
+
|
33
|
+
Bu komut `grit` adında bir klasör oluşturur, bu klasörün içinde bir `.git` alt dizini oluşturup ilklemesini yapar, söz konusu yazılım havuzunun bütün verisini indirir ve son sürümünün bir koyasını seçer (_checkout_). Bu yeni `grit` klasörüne gidecek olursanız, kullanılmaya ve üzerinde çalışılmaya hazır proje dosyalarını görürsünüz. Yazılım havuzunu adı grit'ten farklı bir klasöre kopyalamak isterseniz, bunu komut satırı seçeneği olarak vermelisiniz:
|
34
|
+
|
35
|
+
$ git clone git://github.com/schacon/grit.git mygrit
|
36
|
+
|
37
|
+
Bu komut da bir öncekiyle aynı şeyleri yapar, fakat oluşturulan klasörün adı `mygrit`'tir.
|
38
|
+
|
39
|
+
Git'in bir dizi farklı transfer protokolü vardır. Yukarıdaki örnek `git://` protokolünü kullanıyor, ama `http(s)://`'in ya da SSH transfer protokolünü kullanan `user@server:/path.git`'in kullanıldığına da tanık olabilirsiniz. _4. Bölüm_'de Git yazılım havuzuna erişmek için sunucunun kullanabileceği bütün geçerli seçenekleri ve bunların olumlu ve olumsuz yanlarını inceleyeceğiz.
|
40
|
+
|
41
|
+
## Değişiklikleri Yazılım Havuzuna Kaydetmek ##
|
42
|
+
|
43
|
+
Gerçek bir Git yazılım havuzuna ve söz konusu proje için gerekli olan bir dosya seçmesine sahipsiniz. Bu proje üzerinde değişiklikler yapmanız ve proje kaydetmek istediğiniz bir seviyeye geldiğinde bu değişikliklerin bir bellek kopyasını kaydetmeniz gerekecek.
|
44
|
+
|
45
|
+
Unutmayın, çalışma klasörünüzdeki dosyalar iki halden birinde bulunurlar: _izlenenler_ (_tracked_) ve _izlenmeyenler_ (_untracked_). _İzlenen_ dosyalar, bir önceki bellek kopyasında bulunan dosyalardır; bunlar _değişmemiş_, _değişmiş_ ya da _hazırlanmış_ olabilirler. Geri kalan her şey —çalışma klasörünüzde bulunan ve bir önceki bellek kopyasında ya da hazırlama alanında bulunmayan dosyalar— _izlenmeyen_ dosyalardır. Bir yazılım havuzunu yeni kopyalamışsanız, bütün dosyalar, henüz yeni seçme yaptığınız ve hiçbir şeyi değiştirmediğiniz için, izlenen ve değişmemiş olacaktır.
|
46
|
+
|
47
|
+
Dosyaları düzenlemeye başladığınızda, Git onları değişmiş olarak görecektir, çünkü son kaydınızdan beri üzerlerinde değişiklik yapmış olacaksınız. Değiştirdiğiniz bu dosyaları önce _hazırlayıp_ sonra bütün _hazırlanmış_ değişiklikleri kaydedeceksiniz ve bu döngü böyle sürüp gidecek. Bu döngü, Figür 2-1'de gösteriliyor.
|
48
|
+
|
49
|
+
|
50
|
+
Insert 18333fig0201.png
|
51
|
+
Figür 2-1. Dosyalarınızın değişik durumlarının döngüsü.
|
52
|
+
|
53
|
+
### Dosyaların Durumlarını Kontrol Etmek ###
|
54
|
+
|
55
|
+
Hangi dosyanın hangi durumda olduğunu görmek için kullanılacak temel araç `git status` komutudur. Bu komutu bir klonlama işleminin hemen sonrasında çalıştıracak olursanız, şöyle bir şey görmelisiniz:
|
56
|
+
|
57
|
+
$ git status
|
58
|
+
# On branch master
|
59
|
+
nothing to commit, working directory clean
|
60
|
+
|
61
|
+
Bu çalışma klasörünüzün temiz olduğu anlamına gelir —başka bir deyişle, izlenmekte olup da değiştirilmiş herhangi bir dosya yoktur. Git'in saptadığı herhangi bir izlenmeyen dosya da yok, olsaydı burada listelenmiş olurdu. Son olarak, bu komut size hangi dal (_branch_) üzerinde olduğunuzu söylüyor. Şimdilik bu, daima varsayılan dal olan `master` olacaktır; Şu anda buna kafa yormayın. Sonraki bölüm de dallar ve referanslar konusu derinlemesine ele alınacak.
|
62
|
+
|
63
|
+
Diyelim ki projenize yeni bir dosya, basit bir README dosyası eklediniz. Eğer dosya önceden orada bulunmuyorsa, ve `git status` komutunu çalıştırırsanız, bu izlenmeyen dosyayı şu şekilde görürsünüz:
|
64
|
+
|
65
|
+
$ vim README
|
66
|
+
$ git status
|
67
|
+
# On branch master
|
68
|
+
# Untracked files:
|
69
|
+
# (use "git add <file>..." to include in what will be committed)
|
70
|
+
#
|
71
|
+
# README
|
72
|
+
nothing added to commit but untracked files present (use "git add" to track)
|
73
|
+
|
74
|
+
Yeni README dosyanızın izlenmediğini görüyorsunuz, çünkü `status` çıktısında “Untracked files” başlığı altında listelenmiştir. Bir dosyanın izlenmemesi demek, Git'in onu bir önceki bellek kopyasında (_commit_) görmemesi demektir; siz açıkça belirtmediğiniz sürece Git bu dosyayı izlemeye başlamayacaktır. Bunun nedeni, derleme çıktısı olan ikili dosyaların ya da projeye dahil etmek istemediğiniz dosyaların yanlışlıkla projeye dahil olmasını engellemektir. README dosyasını projeye eklemek istiyorsunuz, öyleyse dosyayı izlemeye alalım.
|
75
|
+
|
76
|
+
### Yeni Dosyaları İzlemeye Almak ###
|
77
|
+
|
78
|
+
Yeni bir dosyayı izlemeye almak için `git add` komutunu kullanmalısınız. README dosyasını izlemeye almak için komutu şu şekilde çalıştırabilirsiniz:
|
79
|
+
|
80
|
+
$ git add README
|
81
|
+
|
82
|
+
`status` komutunu yeniden çalıştırırsanız, README dosyasının artık izlemeye alındığını ve hazırlık alanında olduğunu göreceksiniz:
|
83
|
+
|
84
|
+
$ git status
|
85
|
+
# On branch master
|
86
|
+
# Changes to be committed:
|
87
|
+
# (use "git reset HEAD <file>..." to unstage)
|
88
|
+
#
|
89
|
+
# new file: README
|
90
|
+
#
|
91
|
+
|
92
|
+
Hazırlık alanında olduğunu “Changes to be committed” başlığının altında olmasına bakarak söyleyebilirsiniz. Eğer bu noktada bir kayıt (_commit_) yapacak olursanız, dosyanın `git add` komutunu çalıştırdığınız andaki hali bellek kopyasına kaydedilecektir. Daha önce `git init` komutunu çalıştırdıktan sonra projenize dosya eklemek için `git add (dosya)` komutunu çalıştırdığınızı hatırlayacaksınız —bunun amacı klasörünüzdeki dosyaları izlemeye almaktı. `git add` komutu bir dosya ya da klasörün konumuyla çalışır; eğer söz konusu olan bir klasörse, klasördeki bütün dosyaları tekrarlamalı olarak projeye ekler.
|
93
|
+
|
94
|
+
### Değiştirilen Dosyaları Hazırlamak ###
|
95
|
+
|
96
|
+
Gelin şimdi halihazırda izlenmekte olan bir dosyayı değiştirelim. İzlenmekte olan `benchmarks.rb` adındaki bir dosyayı değiştirip `status` komutunu çalıştırdığınızda şöyle bir ekran çıktısıyla karşılaşırsınız:
|
97
|
+
|
98
|
+
$ git status
|
99
|
+
# On branch master
|
100
|
+
# Changes to be committed:
|
101
|
+
# (use "git reset HEAD <file>..." to unstage)
|
102
|
+
#
|
103
|
+
# new file: README
|
104
|
+
#
|
105
|
+
# Changes not staged for commit:
|
106
|
+
# (use "git add <file>..." to update what will be committed)
|
107
|
+
#
|
108
|
+
# modified: benchmarks.rb
|
109
|
+
#
|
110
|
+
|
111
|
+
`benchmarks.rb` dosyası “Changes not staged for commit” başlıklı bir bölümün altında görünüyor —bu başlık izlenmekte olan bir dosyada değişiklik yapılmış olduğu fakat dosyanın henüz hazırlık alanına alınmadığı durumlarda kullanılır. Dosyayı hazırlamak için, `git add` komutunu çalıştırın (`git add` çok amaçlı bir komuttur, bir dosyayı izlemeye almak için, kayda hazırlamak için, ya da birleştirme uyuşmazlıklarının çözüldüğünü işaretlemek gibi başka amaçlarla kullanılır). Gelin `benchmarks.rb` dosyasını kayda hazırlamak için `git add` komutunu çalıştırıp sonra da `git status` komutuyla duruma bakalım:
|
112
|
+
|
113
|
+
$ git add benchmarks.rb
|
114
|
+
$ git status
|
115
|
+
# On branch master
|
116
|
+
# Changes to be committed:
|
117
|
+
# (use "git reset HEAD <file>..." to unstage)
|
118
|
+
#
|
119
|
+
# new file: README
|
120
|
+
# modified: benchmarks.rb
|
121
|
+
#
|
122
|
+
|
123
|
+
Her iki dosya da kayda hazırlanmış durumdadır ve bir sonraki kaydınıza dahil edilecektir. Tam da bu noktada, henüz kaydı gerçekleştirmeden, aklınıza `benchmarks.rb` dosyasında yapmak istediğiniz küçük bir değişikliğin geldiğini düşünelim. Dosyayı yeniden açıp değişikliği yaptıktan sonra artık kaydı yapmaya hazırsınız. Fakat, `git status` komutunu bir kez daha çalıştıralım:
|
124
|
+
|
125
|
+
$ vim benchmarks.rb
|
126
|
+
$ git status
|
127
|
+
# On branch master
|
128
|
+
# Changes to be committed:
|
129
|
+
# (use "git reset HEAD <file>..." to unstage)
|
130
|
+
#
|
131
|
+
# new file: README
|
132
|
+
# modified: benchmarks.rb
|
133
|
+
#
|
134
|
+
# Changes not staged for commit:
|
135
|
+
# (use "git add <file>..." to update what will be committed)
|
136
|
+
#
|
137
|
+
# modified: benchmarks.rb
|
138
|
+
#
|
139
|
+
|
140
|
+
Ne oldu? `benchmarks.rb` dosyası hem kayda hazırlanmış hem de kayda hazırlanmamış görünüyor. Bu nasıl olabiliyor? Git, bir dosyayı `git add` komutunun alıştırıldığı haliyle kayda hazırlar. Eğer şimdi kayıt yapacak olursanız, `benchmarks.rb` dosyası, çalışma klasöründe göründüğü haliyle değil, `git add` komutunu son çalıştırdığınız haliyle kayıt edilecektir. Bir dosyayı `git add` komutunu çalıştırdıktan sonra değiştirecek olursanız, dosyanın son halini kayda hazırlamak için `git add` komutunu bir kez daha çalıştırmanız gerekir:
|
141
|
+
|
142
|
+
$ git add benchmarks.rb
|
143
|
+
$ git status
|
144
|
+
# On branch master
|
145
|
+
# Changes to be committed:
|
146
|
+
# (use "git reset HEAD <file>..." to unstage)
|
147
|
+
#
|
148
|
+
# new file: README
|
149
|
+
# modified: benchmarks.rb
|
150
|
+
#
|
151
|
+
|
152
|
+
### Dosyaları Görmezden Gelmek ###
|
153
|
+
|
154
|
+
Çoğu zaman, projenizde Git'in takip etmesini, hatta size izlenmeyenler arasında göstermesini bile istemediğiniz bir küme dosya olacaktır. Bunlar, genellikle otomatik olarak oluşturulan seyir (_log_) dosyaları ya da yazılım inşa sisteminin çıktılarıdır. Bu durumlarda, bu dosyaların konumlarıyla eşleşen örüntüleri listeleyen `.gitignore` adında bir dosya oluşturabilirsiniz:
|
155
|
+
|
156
|
+
$ cat .gitignore
|
157
|
+
*.[oa]
|
158
|
+
*~
|
159
|
+
|
160
|
+
İlk satır, Git'e `.o` ya da `.a` ile biten dosyaları —yazılım derlemesinin sonucunda ortaya çıkmış olabilecek _nesne_ ve _arşiv_ dosyalarını— görmezden gelmesini söylüyor. İkinci satır, Git'e Emacs gibi pek çok metin editörü tarafından geçici dosyaları işaretlemek için kullanılan tilda işaretiyle (`~`) biten bütün dosyaları görmezden gelmesini söylüyor. Bu listeye `log`, `tmp` ya da `pid` klasörlerini, otomatik olarak oluşturulan dokümantasyon dosyalarını ve sair dosyayı ekleyebilirsiniz. Daha projenin başlangıcında bir `.gitignore` dosyası oluşturmak yazılım havuzunuzda istemeyeceğiniz dosyaları yanlışlıkla kaydetmenize engel olacağından oldukça iyi bir fikirdir.
|
161
|
+
|
162
|
+
`.gitignore` dosyanızda bulundurabileceğiniz örüntüler şu kurallara bağlıdır:
|
163
|
+
|
164
|
+
* Boş satırlar ve `#` ile başlayan satırlar görmezden gelinir.
|
165
|
+
* Stadart _glob_ örüntüleri ayırt edilir (Ç.N.: _glob_ \*nix tarafından kullanılan sınırlı bir kurallı ifade (_regular expression_) biçimidir).
|
166
|
+
* Bir klasörü belirtmek üzere örüntüleri bir eğik çizgi (`/`) ile sonlandırabilirsiniz.
|
167
|
+
* Bir örüntüyü ünlem işaretiyle (`!`) başlattığınızda, örüntünün tersi gereçli olur.
|
168
|
+
|
169
|
+
_Glob_ örüntüleri _shell_'ler tarafından kullanılan basitleştirilmiş kurallı ifadelerdir (_regular expression_). Bir yıldız işareti (`*`) sıfır ya da daha fazla karakterle eşleşir; `[abc]` köşeli parantezin içindeki herhangi bir karakterle eşleşir (buradaki örnekte `a`, `b`, ya da `c` ile); soru işareti (`?`) bir karakterle eşleşir; tireyle ayrılmış karakterleri içine alan bir köşeli parantez (`[0-9]`) bu aralıktaki bütün karakterlerle eşleşir (bu örnekte 0'dan 9'a kadar olan karakterler).
|
170
|
+
|
171
|
+
Bir `.gitignore` dosyası örneği daha:
|
172
|
+
|
173
|
+
# bir yorum - bu görmezden gelinir
|
174
|
+
# .a dosyalarını görmezden gel
|
175
|
+
*.a
|
176
|
+
# ama yukarıda .a dosyalarını görmezden geliyor olsan bile lib.a dosyasını izlemeye al
|
177
|
+
!lib.a
|
178
|
+
# kök dizindeki /TODO dosyasını (TODO adındaki alt klasörü değil) görmezden gel
|
179
|
+
/TODO
|
180
|
+
# build/ klasöründeki bütün dosyaları görmezden gel
|
181
|
+
build/
|
182
|
+
# doc/notes.txt dosyasını görmezden gel ama doc/server/arch.txt dosyasını görmezden gelme
|
183
|
+
doc/*.txt
|
184
|
+
|
185
|
+
### Kayda Hazırlanmış ve Hazırlanmamış Değişiklikleri Görüntülemek ###
|
186
|
+
|
187
|
+
`git status` komutunu fazla anlaşılmaz buluyorsanız —yalnızca hangi dosyaların değiştiğini değil, bu dosyalarda tam olarak nelerin değiştiğini görmek istiyorsanız— `git diff` komutunu kullanabilirsiniz. `git diff` komutunu ileride ayrıntılı olarak inceleyeceğiz; ama bu komutu muhtemelen en çok şu iki soruya cevap bulmak için kullanacaksınız: Değiştirip de henüz kayda hazırlamadığınız neler var? Ve kayda olmak üzere hangi değişikliklerin hazırlığını yaptınız? `git status` bu soruları genel biçimde cevaplıyor olsa da `git diff` eklenen ve çıkarılan bütün dosyaları —olduğu gibi yamayı— gösterir.
|
188
|
+
|
189
|
+
Diyelim `README` dosyasını düzenleyip kayda hazırladınız, sonra da `benchmarks.rb` dosyasını düzenlediniz ama kayda hazırlamadınız. `status` komutunu çalıştırdığınızda şöyle bir şey görürsünüz:
|
190
|
+
|
191
|
+
$ git status
|
192
|
+
# On branch master
|
193
|
+
# Changes to be committed:
|
194
|
+
# (use "git reset HEAD <file>..." to unstage)
|
195
|
+
#
|
196
|
+
# new file: README
|
197
|
+
#
|
198
|
+
# Changes not staged for commit:
|
199
|
+
# (use "git add <file>..." to update what will be committed)
|
200
|
+
#
|
201
|
+
# modified: benchmarks.rb
|
202
|
+
#
|
203
|
+
|
204
|
+
Henüz kayda hazırlamadığınız değişiklikleri görmek için `git diff` komutunu (başka hiçbir argüman kullanmadan) çalıştırın:
|
205
|
+
|
206
|
+
$ git diff
|
207
|
+
diff --git a/benchmarks.rb b/benchmarks.rb
|
208
|
+
index 3cb747f..da65585 100644
|
209
|
+
--- a/benchmarks.rb
|
210
|
+
+++ b/benchmarks.rb
|
211
|
+
@@ -36,6 +36,10 @@ def main
|
212
|
+
@commit.parents[0].parents[0].parents[0]
|
213
|
+
end
|
214
|
+
|
215
|
+
+ run_code(x, 'commits 1') do
|
216
|
+
+ git.commits.size
|
217
|
+
+ end
|
218
|
+
+
|
219
|
+
run_code(x, 'commits 2') do
|
220
|
+
log = git.commits('master', 15)
|
221
|
+
log.size
|
222
|
+
|
223
|
+
Komut, çalışma klasörünüzün içeriğiyle kayda hazırlık alanının içeriğini karşılaştırır. Sonuç size henüz kayda hazırlamadığınız değişiklikleri gösterir.
|
224
|
+
|
225
|
+
Kayda hazırlamış olduğunuz değişiklikleri görmek için `git diff --cache` komutunu kullanabilirsiniz. (1.6.1'den sonraki Git sürümlerinde hatırlaması daha kolay olabilecek `git diff --staged` komutunu da kullanabilirsiniz.) Bu komut kayda hazırlanmış değişikliklerle son kaydı karşılaştırır.
|
226
|
+
|
227
|
+
$ git diff --cached
|
228
|
+
diff --git a/README b/README
|
229
|
+
new file mode 100644
|
230
|
+
index 0000000..03902a1
|
231
|
+
--- /dev/null
|
232
|
+
+++ b/README2
|
233
|
+
@@ -0,0 +1,5 @@
|
234
|
+
+grit
|
235
|
+
+ by Tom Preston-Werner, Chris Wanstrath
|
236
|
+
+ http://github.com/mojombo/grit
|
237
|
+
+
|
238
|
+
+Grit is a Ruby library for extracting information from a Git repository
|
239
|
+
|
240
|
+
Dikkat edilmesi gereken nokta, `git diff`'in son kayıttan beri yapılan bütün değişiklikleri değil yalnızca kayda hazırlanmamış değişiklikleri gösteriyor oluşudur. Bu zaman zaman kafa karıştırıcı olabilir, zira, bütün değişikliklerinizi kayda hazırladıysanız, `git diff`'in çıktısı boş olacaktır.
|
241
|
+
|
242
|
+
Yine, örnek olarak, `benchmarks.rb` dosyasını kayda hazırlayıp daha sonra üzerinde değişiklik yaparsanız, `git diff` komutunu kullanarak hangi değişikliklerin kayda hazırlandığını, hangilerinin hazırlanmadığını görüntüleyebilirsiniz:
|
243
|
+
|
244
|
+
$ git add benchmarks.rb
|
245
|
+
$ echo '# test line' >> benchmarks.rb
|
246
|
+
$ git status
|
247
|
+
# On branch master
|
248
|
+
#
|
249
|
+
# Changes to be committed:
|
250
|
+
#
|
251
|
+
# modified: benchmarks.rb
|
252
|
+
#
|
253
|
+
# Changes not staged for commit:
|
254
|
+
#
|
255
|
+
# modified: benchmarks.rb
|
256
|
+
#
|
257
|
+
|
258
|
+
Şimdi `git diff` komutuyla hangi değişikliklerin henüz kayda hazırlanmamış olduğunu
|
259
|
+
|
260
|
+
$ git diff
|
261
|
+
diff --git a/benchmarks.rb b/benchmarks.rb
|
262
|
+
index e445e28..86b2f7c 100644
|
263
|
+
--- a/benchmarks.rb
|
264
|
+
+++ b/benchmarks.rb
|
265
|
+
@@ -127,3 +127,4 @@ end
|
266
|
+
main()
|
267
|
+
|
268
|
+
##pp Grit::GitRuby.cache_client.stats
|
269
|
+
+# test line
|
270
|
+
|
271
|
+
ve `git diff --cached` komutuyla neleri kayda hazırlamış olduğunuzu görebilirsiniz:
|
272
|
+
|
273
|
+
$ git diff --cached
|
274
|
+
diff --git a/benchmarks.rb b/benchmarks.rb
|
275
|
+
index 3cb747f..e445e28 100644
|
276
|
+
--- a/benchmarks.rb
|
277
|
+
+++ b/benchmarks.rb
|
278
|
+
@@ -36,6 +36,10 @@ def main
|
279
|
+
@commit.parents[0].parents[0].parents[0]
|
280
|
+
end
|
281
|
+
|
282
|
+
+ run_code(x, 'commits 1') do
|
283
|
+
+ git.commits.size
|
284
|
+
+ end
|
285
|
+
+
|
286
|
+
run_code(x, 'commits 2') do
|
287
|
+
log = git.commits('master', 15)
|
288
|
+
log.size
|
289
|
+
|
290
|
+
### Değişiklikleri Kaydetmek ###
|
291
|
+
|
292
|
+
Yaptığınız değişiklikleri dilediğiniz gibi hazırlık alanına aldığınıza göre artık onları kaydedebilirsiniz (_commit_). Unutmayın, kayda hazırlanmamış —oluşturduğunuz ya da değiştirdiğiniz fakat `git add` komutunu kullanarak kayda hazırlamadığınız— değişiklikler kaydedilmeyecektir. Onlar sabit diskinizde değiştirilmiş dosyalar olarak kalacaklar.
|
293
|
+
|
294
|
+
Bu örnekte, `git status` komutunu son çalıştırdığınızda her şeyin kayda hazırlanmış olduğunu gördünüz, dolayısıyla değişikliklerinizi kaydetmeye hazırsınız. Kayıt yapmanın en kolay yolu `git commit` komutunu kullanmaktır:
|
295
|
+
|
296
|
+
$ git commit
|
297
|
+
|
298
|
+
Bu komutu çalıştırdığınızda sisteminizde seçili bulunan metin editörü açılacaktır. (Editörünüz _shell_'inizin `$EDITOR` çevresel değişkeni tarafından tanımlanır —genellikle vim ya da emacs'tır, fakat `git config --global core.editor` komutunu _1. Bölüm_'de gördüğünüz gibi çalıştırarak bu ayarı değiştirebilirsiniz.)
|
299
|
+
|
300
|
+
Metin editörü aşağıdaki metni görüntüler (bu örnek Vim ekranından):
|
301
|
+
|
302
|
+
# Please enter the commit message for your changes. Lines starting
|
303
|
+
# with '#' will be ignored, and an empty message aborts the commit.
|
304
|
+
# On branch master
|
305
|
+
# Changes to be committed:
|
306
|
+
# (use "git reset HEAD <file>..." to unstage)
|
307
|
+
#
|
308
|
+
# new file: README
|
309
|
+
# modified: benchmarks.rb
|
310
|
+
~
|
311
|
+
~
|
312
|
+
~
|
313
|
+
".git/COMMIT_EDITMSG" 10L, 283C
|
314
|
+
|
315
|
+
Gördüğünüz gibi hazır kayıt mesajı `git status` çıktısının `#` kullanılarak devre dışı bırakılmış haliyle en üstte bir boş satırdan oluşur. Bu devre dışı bırakılmış kayıt mesajını silip yerine kendi kayıt mesajınızı yazabilir, ya da neyi kaydettiğinizi size hatırlatması için orada bırakabilirsiniz. (Neyi değiştirdiğinizin daha ayrıntılı olarak hatırlatılmasını isterseniz, `git commit` mesajını `-v` seçeneğiyle kullanabilirsiniz. Bu seçenek kaydetmekte olduğunuz değişikliğin içeriğini de (_diff_) editörde gösterecektir.) Editörü kapattığınızda Git, yazdığınız mesajı kullanarak değişikliği kaydeder (devre dışı bırakılmış bölümü ve değişikliğin içeriğini mesajın dışında bırakır).
|
316
|
+
|
317
|
+
Bir başka seçenek de, kayıt mesajınızı `commit` komutunu `-m` seçeneğiyle aşağıdaki gibi kullanmaktır:
|
318
|
+
|
319
|
+
$ git commit -m "Story 182: Fix benchmarks for speed"
|
320
|
+
[master]: created 463dc4f: "Fix benchmarks for speed"
|
321
|
+
2 files changed, 3 insertions(+), 0 deletions(-)
|
322
|
+
create mode 100644 README
|
323
|
+
|
324
|
+
İlk kaydınızı oluşturmuş oldunuz! Görüldüğü gibi kayıt kendisiyle ilgili bilgiler veriyor: hangi dala kayıt yapmış olduğunuzu (`master`), kaydın SHA-1 sınama toplamının ne olduğunu (`463dc4f`), kaç dosyada değişiklik yaptığınızı ve kayıtta kaç satır ekleyip çıkardığınıza dair istatistiklerin çıktısını veriyor.
|
325
|
+
|
326
|
+
Unutmayın, kayıt, hazırlık alanında kayda hazırladığınız bellek kopyasının kaydıdır. Kayda hazırlamadığınız değişiklikler, değişiklik olarak duruyor; onları da proje tarihçesine eklemek isterseniz yeni bir kayıt yapabilirsiniz. Her kayıt işleminde projenizin bir bellek kopyasını kaydediyorsunuz; bu bellek kopyalarını daha sonra geriye sarabilir ya da birbiriyle karşılaştırabilirsiniz.
|
327
|
+
|
328
|
+
### Hazırlık Alanını Atlamak ###
|
329
|
+
|
330
|
+
Her ne kadar kayıtları tam istediğiniz gibi düzenlemek inanılmaz derecede yararlı bir şey olsa da, hazırlık alanı kimi zaman iş akışınıza fazladan bir yük getirebilir. Git, hazırlık alanını kullanmadan geçmek isteyenler için basit bir kısayol sunuyor. `git commit` komutunu `-a` seçeneğiyle kullanırsanız, Git, halihazırda izlenmekte olan bütün dosyaları otomatik olarak kayda hazırlayıp, `git add` aşamasını atlamanızı sağlar:
|
331
|
+
|
332
|
+
$ git status
|
333
|
+
# On branch master
|
334
|
+
#
|
335
|
+
# Changes not staged for commit:
|
336
|
+
#
|
337
|
+
# modified: benchmarks.rb
|
338
|
+
#
|
339
|
+
$ git commit -a -m 'added new benchmarks'
|
340
|
+
[master 83e38c7] added new benchmarks
|
341
|
+
1 files changed, 5 insertions(+), 0 deletions(-)
|
342
|
+
|
343
|
+
Gördüğünüz gibi, kayıt işlemi yapmadan önce `benchmarks.rb` dosyasını `git add` komutundan geçirmek zorunda kalmadınız.
|
344
|
+
|
345
|
+
### Dosyaları Ortadan Kaldırmak ###
|
346
|
+
|
347
|
+
Bir dosyayı Git'ten silmek için, önce izlenen dosyaları listesinden çıkarmalı (daha doğrusu, kayda hazırlık alanından kaldırmalı) sonra da kaydetmelisiniz. `git rm` hem bunu yapar hem de dosyayı çalışma klasörünüzden siler, böylece dosyayı izlenmeyen dosyalar arasında görmezsiniz.
|
348
|
+
|
349
|
+
Eğer dosyayı çalışma klasörünüzden silerseniz, `git status` çıktısının “Changes not staged for commit” (yani _kayda hazırlanmamış olanlar_) başlığı altında boy gösterecektir:
|
350
|
+
|
351
|
+
$ rm grit.gemspec
|
352
|
+
$ git status
|
353
|
+
# On branch master
|
354
|
+
#
|
355
|
+
# Changes not staged for commit:
|
356
|
+
# (use "git add/rm <file>..." to update what will be committed)
|
357
|
+
#
|
358
|
+
# deleted: grit.gemspec
|
359
|
+
#
|
360
|
+
|
361
|
+
Sonrasında `git rm` komutunu çalıştırırsanız, dosyanın ortadan kaldırılması için kayda hazırlanmasını sağlamış olursunuz:
|
362
|
+
|
363
|
+
$ git rm grit.gemspec
|
364
|
+
rm 'grit.gemspec'
|
365
|
+
$ git status
|
366
|
+
# On branch master
|
367
|
+
#
|
368
|
+
# Changes to be committed:
|
369
|
+
# (use "git reset HEAD <file>..." to unstage)
|
370
|
+
#
|
371
|
+
# deleted: grit.gemspec
|
372
|
+
#
|
373
|
+
|
374
|
+
Bir sonraki kaydınızda, dosya silinmiş olacak ve artık izlenmeyecektir. Eğer dosyayı değiştirmiş ve halihazırda indekse eklemişseniz, ortadan kaldırma işlemini `-f` seçeneğini kullanarak zorlamanız gerekecektir. Bu, herhangi bir bellek kopyasına kaydedilmemiş ve Git kullanılarak kurtarılamayacak verilerin kaybolmasını önlemek amacıyla geliştirilmiş bir önlemdir.
|
375
|
+
|
376
|
+
Yapmak isteyebileceğiniz bir başka şey de dosyayı çalışma klasörünüzde tutup, kayda hazırlık alanından silmek olabilir. Bir başka deyişle, dosyayı sabit diskinizde bulundurmak ama Git'in izlenecek dosyalar listesinden çıkarmak isteyebilirsiniz. Bu, özellikle belirli bir dosyayı (büyük bir seyir dosyasını ya da bir küme derlenmiş `.a` dosyasını) `.gitignore` dosyanıza eklemeyi unutup yanlışlıkla Git indeksine eklediğinizde kullanışlı olan bir özelliktir. Bunu yapmak için `--cached` seçeneğini kullanmalısınız:
|
377
|
+
|
378
|
+
$ git rm --cached readme.txt
|
379
|
+
|
380
|
+
`git rm` komutunu dosyalar, klasörler ya da _glob_ örüntüleri üzerinde kullanabilirsiniz. Yani şöyle şeyler yapabilirsiniz:
|
381
|
+
|
382
|
+
$ git rm log/\*.log
|
383
|
+
|
384
|
+
`*`'in önündeki ters eğik çizgi işaretini gözden kaçırmayın. Bu işaret gereklidir, çünkü _shell_'inizin dosya adı açımlamasına ek olarak, Git de kendi dosya adı açımlamasını yapar. Yukarıdaki komut, `log/` klasöründeki `.log` eklentili bütün dosyaları ortadan kaldıracaktır. Ya da, şöyle bir şey yapabilirsiniz:
|
385
|
+
|
386
|
+
$ git rm \*~
|
387
|
+
|
388
|
+
Bu komut `~` ile biten bütün dosyaları ortadan kaldıracaktır.
|
389
|
+
|
390
|
+
### Dosyaları Taşımak ###
|
391
|
+
|
392
|
+
Çoğu SKS'nin aksine Git taşınan dosyaları takip etmez. Bir dosyanın adını değiştirirseniz, Git, dosyanın yeniden adlandırıldığına dair herhangi bir üstveri oluşturmaz. Fakat Git, olay olup bittikten sonra neyin ne olduğunu anlamakta oldukça beceriklidir —dosya hareketlerini keşfetme meselesini birazdan ele alacağız.
|
393
|
+
|
394
|
+
Bu nedenle Git'in bir `mv` komutu olması biraz kafa karıştırıcı olabilir. Git'te bir dosyanın adını değiştirmek istiyorsanız, şöyle bir komut çalıştırabilirsiniz:
|
395
|
+
|
396
|
+
$ git mv eski_dosya yeni_dosya
|
397
|
+
|
398
|
+
ve istediğinizi elde edersiniz. Hatta, buna benzer bir komut çalıştırdıktan sonra `status` çıktısına bakarsanız Git'in bir dosya adlandırma işlemini (_rename_) listelediğini görürsünüz:
|
399
|
+
|
400
|
+
$ git mv README.txt README
|
401
|
+
$ git status
|
402
|
+
# On branch master
|
403
|
+
# Your branch is ahead of 'origin/master' by 1 commit.
|
404
|
+
#
|
405
|
+
# Changes to be committed:
|
406
|
+
# (use "git reset HEAD <file>..." to unstage)
|
407
|
+
#
|
408
|
+
# renamed: README.txt -> README
|
409
|
+
#
|
410
|
+
|
411
|
+
Öte yandan bu komut, şu komutları arka arkaya çalıştırmaya eşdeğerdir:
|
412
|
+
|
413
|
+
$ mv README.txt README
|
414
|
+
$ git rm README.txt
|
415
|
+
$ git add README
|
416
|
+
|
417
|
+
Git dosya taşıma işlemini dolaylı yollardan anlar, dolayısıyla dosyayı yeniden adlandırmayı bu komutlarla mı yaptığınız yoksa `mv` komutunu mu kullandığınız Git açısından önemli değildir. Tek gerçek fark arka arkaya üç komut kullanmak yerine tek bir komut kullanıyor olmanızdır —`mv` bir kullanıcıya kolalık sağlayan bir komuttur. Daha önemlisi, bir dosyanın adını değiştirmek için istediğiniz her aracı kullanabilir, `add/rm` işlemlerini sonraya kayıttan hemen öncesine bırakabilirsiniz.
|
418
|
+
|
419
|
+
## Kayıt Tarihçesini Görüntülemek ##
|
420
|
+
|
421
|
+
Birkaç kayıt oluşturduktan, ya da halihazırda kayıt tarihçesi olan bir yazılım havuzunu klonladığınızda, muhtemelen geçmişe bakıp neler olduğuna göz atmak isteyeceksiniz. Bunun için kullanabileceğiniz en temel ve becerikli araç `git log` komutudur.
|
422
|
+
|
423
|
+
Buradaki örnekler benim çoğunlukla tanıtımlarda kullandığım `simplegit` adında bir projeyi kullanıyor. Projeyi edinmek için aşağıdaki komutu çalıştırabilirsiniz:
|
424
|
+
|
425
|
+
git clone git://github.com/schacon/simplegit-progit.git
|
426
|
+
|
427
|
+
Bu projenin içinde `git log` komutunu çalıştırdığınızda şuna benzer bir çıktı göreceksiniz:
|
428
|
+
|
429
|
+
$ git log
|
430
|
+
commit ca82a6dff817ec66f44342007202690a93763949
|
431
|
+
Author: Scott Chacon <schacon@gee-mail.com>
|
432
|
+
Date: Mon Mar 17 21:52:11 2008 -0700
|
433
|
+
|
434
|
+
changed the version number
|
435
|
+
|
436
|
+
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
|
437
|
+
Author: Scott Chacon <schacon@gee-mail.com>
|
438
|
+
Date: Sat Mar 15 16:40:33 2008 -0700
|
439
|
+
|
440
|
+
removed unnecessary test code
|
441
|
+
|
442
|
+
commit a11bef06a3f659402fe7563abf99ad00de2209e6
|
443
|
+
Author: Scott Chacon <schacon@gee-mail.com>
|
444
|
+
Date: Sat Mar 15 10:31:28 2008 -0700
|
445
|
+
|
446
|
+
first commit
|
447
|
+
|
448
|
+
Aksi belirtilmedikçe, `git log` bir yazılım havuzundaki kayıtları ters kronolojik sırada listeler. Yani, en son kayıtlar en üstte görünür. Görüldüğü gibi, bu komut her kaydın SHA-1 sınama toplamını, yazarının adını ve adresini, kaydedildiği tarihi ve kayıt mesajını listeler.
|
449
|
+
|
450
|
+
`git log` komutunun, size tam olarak aradığınız şeyi göstermek için kullanılabilecek çok sayıda seçeneği vardır. Burada, en çok kullanılan bazı seçenekleri tanıtacağız.
|
451
|
+
|
452
|
+
En yararlı seçeneklerden biri, kaydın içeriğini (_diff_) gösteren `-p` seçeneğidir. İsterseniz `-2`'yi kullanarak komutun çıktısını son iki kayıtla sınırlayabilirsiniz:
|
453
|
+
|
454
|
+
$ git log -p -2
|
455
|
+
commit ca82a6dff817ec66f44342007202690a93763949
|
456
|
+
Author: Scott Chacon <schacon@gee-mail.com>
|
457
|
+
Date: Mon Mar 17 21:52:11 2008 -0700
|
458
|
+
|
459
|
+
changed the version number
|
460
|
+
|
461
|
+
diff --git a/Rakefile b/Rakefile
|
462
|
+
index a874b73..8f94139 100644
|
463
|
+
--- a/Rakefile
|
464
|
+
+++ b/Rakefile
|
465
|
+
@@ -5,7 +5,7 @@ require 'rake/gempackagetask'
|
466
|
+
spec = Gem::Specification.new do |s|
|
467
|
+
- s.version = "0.1.0"
|
468
|
+
+ s.version = "0.1.1"
|
469
|
+
s.author = "Scott Chacon"
|
470
|
+
|
471
|
+
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
|
472
|
+
Author: Scott Chacon <schacon@gee-mail.com>
|
473
|
+
Date: Sat Mar 15 16:40:33 2008 -0700
|
474
|
+
|
475
|
+
removed unnecessary test code
|
476
|
+
|
477
|
+
diff --git a/lib/simplegit.rb b/lib/simplegit.rb
|
478
|
+
index a0a60ae..47c6340 100644
|
479
|
+
--- a/lib/simplegit.rb
|
480
|
+
+++ b/lib/simplegit.rb
|
481
|
+
@@ -18,8 +18,3 @@ class SimpleGit
|
482
|
+
end
|
483
|
+
|
484
|
+
end
|
485
|
+
-
|
486
|
+
-if $0 == __FILE__
|
487
|
+
- git = SimpleGit.new
|
488
|
+
- puts git.show
|
489
|
+
-end
|
490
|
+
|
491
|
+
|
492
|
+
Bu seçenek daha önceki bilgilere ek olarak kaydın içeriğini de her gösterir. Bu, yazılımı gözden geçirirken ya da belirli bir katılımcı tarafından yapılan bir dizi kayıt sırasında nelerin değiştiğine hızlıca göz atarken çok işe yarar.
|
493
|
+
|
494
|
+
Dilerseniz `git log`'u özet bilgiler veren bir dizi seçenekle birlikte kullanabilirsiniz. Örneğin, her kayıtla ilgili özet istatistikler için `--stat` seçeneğini kullanabilirsiniz:
|
495
|
+
|
496
|
+
$ git log --stat
|
497
|
+
commit ca82a6dff817ec66f44342007202690a93763949
|
498
|
+
Author: Scott Chacon <schacon@gee-mail.com>
|
499
|
+
Date: Mon Mar 17 21:52:11 2008 -0700
|
500
|
+
|
501
|
+
changed the version number
|
502
|
+
|
503
|
+
Rakefile | 2 +-
|
504
|
+
1 files changed, 1 insertions(+), 1 deletions(-)
|
505
|
+
|
506
|
+
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
|
507
|
+
Author: Scott Chacon <schacon@gee-mail.com>
|
508
|
+
Date: Sat Mar 15 16:40:33 2008 -0700
|
509
|
+
|
510
|
+
removed unnecessary test code
|
511
|
+
|
512
|
+
lib/simplegit.rb | 5 -----
|
513
|
+
1 files changed, 0 insertions(+), 5 deletions(-)
|
514
|
+
|
515
|
+
commit a11bef06a3f659402fe7563abf99ad00de2209e6
|
516
|
+
Author: Scott Chacon <schacon@gee-mail.com>
|
517
|
+
Date: Sat Mar 15 10:31:28 2008 -0700
|
518
|
+
|
519
|
+
first commit
|
520
|
+
|
521
|
+
README | 6 ++++++
|
522
|
+
Rakefile | 23 +++++++++++++++++++++++
|
523
|
+
lib/simplegit.rb | 25 +++++++++++++++++++++++++
|
524
|
+
3 files changed, 54 insertions(+), 0 deletions(-)
|
525
|
+
|
526
|
+
Gördüğünüz gibi `--stat` seçeneği, her kaydın altına o kayıtta değişikliğe uğramış dosyaların listesini, kaç tane dosyanın değişikliğe uğradığını ve söz konusu dosyalara kaç satırın eklenip çıkarıldığı bilgisini ekler. Bu bilgilerin bir özetini de kaydın en altına yerleştirir. Oldukça yararlı bir başka seçenek de `--pretty` seçeneğidir. Bu seçenek `log` çıktısının biçimini değiştirmek için kullanılır. Bu seçenekle birlikte kullanacağınız birkaç tane öntanımlı ek seçenek vardır. `oneline` ek seçeneği her bir kaydı tek bir satırda gösterir; bu çok sayıda kayda göz atıyorsanız yararlı olabilir. Ayrıca `short`, `full` ve `fuller` seçenekleri aşağı yukarı aynı miktarda bilgiyi —bazı farklarla— gösterir:
|
527
|
+
|
528
|
+
$ git log --pretty=oneline
|
529
|
+
ca82a6dff817ec66f44342007202690a93763949 changed the version number
|
530
|
+
085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 removed unnecessary test code
|
531
|
+
a11bef06a3f659402fe7563abf99ad00de2209e6 first commit
|
532
|
+
|
533
|
+
En ilginç ek seçenek, istediğiniz log çıktısını belirlemenizi sağlayan `format` ek seçeneğidir. Bu, özellikle bilgisayar tarafından işlenecek bir çıktı oluşturmak konusunda elverişlidir —biçimi açıkça kendiniz belirlediğiniz için farklı Git sürümlerinde farklı sonuçlarla karşılaşmazsınız:
|
534
|
+
|
535
|
+
$ git log --pretty=format:"%h - %an, %ar : %s"
|
536
|
+
ca82a6d - Scott Chacon, 11 months ago : changed the version number
|
537
|
+
085bb3b - Scott Chacon, 11 months ago : removed unnecessary test code
|
538
|
+
a11bef0 - Scott Chacon, 11 months ago : first commit
|
539
|
+
|
540
|
+
Tablo 2-1 `format` ek seçeneğinin kabul ettiği bazı biçimlendirme seçeneklerini gösteriyor.
|
541
|
+
|
542
|
+
Seçenek Çıktının Açıklaması
|
543
|
+
%H Sınama toplamı
|
544
|
+
%h Kısaltılmış sınama toplamı
|
545
|
+
%T Git ağacı sınama toplamı
|
546
|
+
%t Kısaltılmış Git ağacı sınama toplamı
|
547
|
+
%P Ata kayıtların sınama toplamları
|
548
|
+
%p Ata kayıtların kısaltılmış sınama toplamları
|
549
|
+
%an Yazarın adı
|
550
|
+
%ae Yazarın e-posta adresi
|
551
|
+
%ad Yazılma tarihi (–date= seçeneğiyle uyumludur)
|
552
|
+
%ar Yazılma tarihi (göreceli tarih)
|
553
|
+
%cn Kaydedenin adı
|
554
|
+
%ce Kaydedenin e-posta adresi
|
555
|
+
%cd Kaydedilme tarihi
|
556
|
+
%cr Kaydedilme tarihi (göreceli tarih)
|
557
|
+
%s Konu
|
558
|
+
|
559
|
+
_yazar_'la _kaydeden_ arasında ne gibi bir fark olduğunu merak ediyor olabilirsiniz. _yazar_ yamayı oluşturan kişidir, _kaydeden_'se yamayı projeye uygulayan kişi. Bir projeye yama gönderdiğinizde, projenin çekirdek üyelerinden biri yamayı projeye uygularsa, her ikinizin de adı kaydedilecektir —sizin adınız yazar olarak onun adı kaydeden olarak. Bu farkı _5. Bölüm_'de biraz daha ayrıntılı olarak ele alacağız.
|
560
|
+
|
561
|
+
`oneline` ve `format` ek seçenekleri özellikle `--graph` ek seçeneğiyle birlikte kullanıldıklarında çok işe yararlar. Bu ek seçenek projenizin dal (_branch_) ve birleştirme (_merge_) tarihçesini gösteren sevimli bir ASCII grafiği oluşturur. Grit yazılım havuzunun grafiğine bakalım:
|
562
|
+
|
563
|
+
$ git log --pretty=format:"%h %s" --graph
|
564
|
+
* 2d3acf9 ignore errors from SIGCHLD on trap
|
565
|
+
* 5e3ee11 Merge branch 'master' of git://github.com/dustin/grit
|
566
|
+
|\
|
567
|
+
| * 420eac9 Added a method for getting the current branch.
|
568
|
+
* | 30e367c timeout code and tests
|
569
|
+
* | 5a09431 add timeout protection to grit
|
570
|
+
* | e1193f8 support for heads with slashes in them
|
571
|
+
|/
|
572
|
+
* d6016bc require time for xmlschema
|
573
|
+
* 11d191e Merge branch 'defunkt' into local
|
574
|
+
|
575
|
+
Bunlar `git log`'la birlikte kullanabileceğiniz seçeneklerden yalnızca birkaçı —daha başka çok sayıda seçenek var. Tablo 2-2 yukarıda incelediğimiz seçeneklerin yanı sıra, yararlı olabilecek başka seçenekleri `git log` çıktısına olan etkileriyle birlikte listeliyor.
|
576
|
+
|
577
|
+
Seçenek Açıklama
|
578
|
+
-p Kayıtların içeriklerini de göster.
|
579
|
+
--stat Kayıtlarda değişikliğe uğrayan dosyalarla ilgili istatistikleri göster.
|
580
|
+
--shortstat Yalnızca değişikliği/eklemeyi/çıkarmayı özetleyen satırı göster command.
|
581
|
+
--name-only Kayıtlarda değişen dosyaların yalnızca adlarını göster.
|
582
|
+
--name-status Kayıtlarda değişen dosyaların adlarıyla birlikte değişme/eklenme/çıkarılma bilgisini de göster.
|
583
|
+
--abbrev-commit Sınama toplamının 40 karakterli tamamı yerine yalnızca ilk birkaç karakterini göster.
|
584
|
+
--relative-date Tarihi gün, ay, yıl olarak göstermek yerine göreceli olarak göster ("iki hafta önce" gibi).
|
585
|
+
--graph Log tarihçesinin yanısıra, dal ve birleştirme tarihçesini ASCII grafiği olarak göster.
|
586
|
+
--pretty Kayıtları alternatif bir biçimlendirmeyle göster. `oneline` `short`, `full`, `fuller` ve (kendi istediğiniz biçimi belirleyebildiğiniz) `format` ek seçenekleri kullanılabilir.
|
587
|
+
|
588
|
+
### Log Çıktısını Sınırlandırma ###
|
589
|
+
|
590
|
+
`git log` komutu, biçimlendirme seçeneklerinin yanı sıra bir dizi sınırlandırma seçeneği de sunar —bu seçenekler kayıtların yalnızca bir alt kümesini gösterir. Bu seçeneklerden birini yukarıda gördünüz —yalnızca son iki kaydı gösteren `-2` seçeneğini. Aslında, son `n` kaydı görmek için `n` yerine herhangi bir tam sayı koyarak bu seçeneği `-<n>` biçiminde kullanabilirsiniz. Bunu muhtemelen çok sık kullanmazsınız, zira Git `log` çıktısını zaten sayfa sayfa gösteriyor, dolayısıyla `git log` komutunu çalıştırdığınızda zaten önce kayıtların birinci sayfasını göreceksiniz.
|
591
|
+
|
592
|
+
Öte yandan `--since` ya da `--until` gibi çıktıyı zamanla sınırlayan seçenekler işinizi kolaylaştırabilir. Söz gelimi, şu komut, son iki hafta içinde yapılmış kayıtları listeliyor:
|
593
|
+
|
594
|
+
$ git log --since=2.weeks
|
595
|
+
|
596
|
+
Bu komut pek çok değişik biçimlendirmeyle kullanılabilir —kesin bir tarih (“2008-01-15”) ya da “2 years 1 day 3 minutes ago” gibi göreli bir tarih kullanabilirsiniz.
|
597
|
+
|
598
|
+
Ayrıca listeyi belirli arama ölçütlerine uyacak biçimde filtreleyebilirsiniz. `--author` seçeneği belirli bir yazara aiy kayıtları filtrelemenizi sağlar; `--grep` seçeneğiyse kayıt mesajlarında anahtar kelimeler aramanızı sağlar. (Unutmayın, hem `author` hem de `grep` seçeneklerini kullanmak istiyorsanız, komuta `--all-match` seçeneğini de eklemelisiniz, aksi takdirde, komut bu iki seçenekten herhangi birine uyan kayıtları bulup getirecektir.)
|
599
|
+
|
600
|
+
`git log`la kullanılması son derece yararlı olan son seçenek konum seçeneğidir. `git log`'u bir klasör ya da dosya adıyla birlikte kullanırsanız, komutun çıktısını yalnızca o dosyalarda değişiklik yapan kayıtlarla sınırlamış olursunuz. Bu, komuta her zaman en son seçenek olarak eklenmelidir ve konumlar iki tireyle (`--`) diğer seçeneklerden ayrılmalıdır.
|
601
|
+
|
602
|
+
Tablo 2-3, bu seçenekleri ve birkaç başka yaygın seçeneği listeliyor.
|
603
|
+
|
604
|
+
Seçenek Açıklama
|
605
|
+
-(n) Yalnızca son n kaydı göster.
|
606
|
+
--since, --after Yalnızca belirli bir tarihten sonra eklenmiş kayıtlları göster.
|
607
|
+
--until, --before Yalnızca belirli bir tarihten önce yapılmış kayıtları göster.
|
608
|
+
--author Yalnızca yazarın adının belirli bir karakter katarıyla (_string_) eşleşen kayıtları göster.
|
609
|
+
--committer Yalnızca kaydedenin adının belirli bir karakter katarıyla eşleştiği kayıtları göster.
|
610
|
+
|
611
|
+
Örneğin, Git kaynak kod yazılım havuzu tarihçesinde birleştirme (_merge_) olmayan hangi kayıtların Junio Hamano tarafından 2008'in Ekim ayında kaydedilmiş olduğunu görmek için şu komutu çalıştırabilirsiniz:
|
612
|
+
|
613
|
+
$ git log --pretty="%h - %s" --author=gitster --since="2008-10-01" \
|
614
|
+
--before="2008-11-01" --no-merges -- t/
|
615
|
+
5610e3b - Fix testcase failure when extended attribute
|
616
|
+
acd3b9e - Enhance hold_lock_file_for_{update,append}()
|
617
|
+
f563754 - demonstrate breakage of detached checkout wi
|
618
|
+
d1a43f2 - reset --hard/read-tree --reset -u: remove un
|
619
|
+
51a94af - Fix "checkout --track -b newbranch" on detac
|
620
|
+
b0ad11e - pull: allow "git pull origin $something:$cur
|
621
|
+
|
622
|
+
Bu komut, Git kaynak kodu yazılım havuzundaki yaklaşık 20,000 komut arasından bu ölçütlere uyan 6 tanesini gösteriyor.
|
623
|
+
|
624
|
+
### Tarihçeyi Görselleştirmek için Grafik Arayüz Kullanımı ###
|
625
|
+
|
626
|
+
Kayıt tarihçenizi görüntülemek için görselliği daha çok ön planda olan bir araç kullanmak isterseniz, Git'le birlikte dağıtılan bir Tcl/Tk programı olan `gitk`'ya bir göz atmak isteyebilirsiniz. Gitk, temelde `git log`'u görselleştiren bir araçtır ve neredeyse `git log`'un kabul ettiği bütün filtreleme seçeneklerini tanır. Proje klasörünüzde komut satırına `gitk` yazacak olursanız Figür 2-2'deki gibi bir şey görürsünüz.
|
627
|
+
|
628
|
+
Insert 18333fig0202.png
|
629
|
+
Figür 2-2. gitk grafiklse tarihçe görüntüleyicisi.
|
630
|
+
|
631
|
+
Pencerenin üst yarısında bir kalıtım grafiğinin yanı sıra kayıt tarihçesini görebilirsiniz. Alttaki kayıt içeriği görüntüleyicisi, tıkladığınız herhangi bir kayıttaki değişiklikleri gösterecektir.
|
632
|
+
|
633
|
+
## Değişiklikleri Geri Almak ##
|
634
|
+
|
635
|
+
Herhangi bir noktada yaptığınız bir değişikliği geri almak isteyebilirsiniz. Burada yapılan değişiklikleri geri almakta kullanılabilecek bazı araçları inceleyeceğiz. Dikkatli olun, zira geri alınan bu değişikliklerden bazılarını yeniden gerçekleştiremeyebilirsiniz. Bu, eğer bir hata yaparsanız, bunu Git'i kullanarak telafi edemeyeceğiniz, az sayıda alanından biridir.
|
636
|
+
|
637
|
+
### Son Kayıt İşlemini Değiştirmek ###
|
638
|
+
|
639
|
+
Eğer kaydı çok erken yapmışsanız, bazı dosyaları eklemeyi unutmuşsanız ya da kayıt mesajında hata yapmışsanız, sık rastlanan düzeltme işlemlerinden birini kullanabilirsiniz. Kaydı değiştirmek isterseniz, `commit` komutunu `--amend` seçeneğiyle çalıştırabilirsiniz:
|
640
|
+
|
641
|
+
$ git commit --amend
|
642
|
+
|
643
|
+
Bu komut, hazırlık alanındaki değişiklikleri alıp bunları kaydı değiştirmek için kullanır. Eğer son kaydınızdan beri hiçbir değişiklik yapmamışsanız (örneğin, bu komutu yeni bir kayıt yaptıktan hemen sonra çalıştırıyorsanız) o zaman kaydınızın bellek kopyası aynı kalacak ve değiştireceğiniz tek şey kayıt mesajı olacaktır.
|
644
|
+
|
645
|
+
Aynı kayıt mesajı editörü açılır, fakat editörde bir önceki kaydın kayıt mesajı görünür. Mesajı her zamanki gibi değiştirebilirsiniz, ama bu yeni kayıt mesajı öncekinin yerine geçecektir.
|
646
|
+
|
647
|
+
Söz gelimi, eğer bir kayıt sırasında belirli bir dosyada yaptığınız değişiklikleri kayda hazırlamayı unuttuğunuzu fark ederseniz, şöyle bir şey yapabilirsiniz:
|
648
|
+
|
649
|
+
$ git commit -m 'initial commit'
|
650
|
+
$ git add forgotten_file
|
651
|
+
$ git commit --amend
|
652
|
+
|
653
|
+
Bu üç komuttan sonra, tarihçenize tek bir kayıt işlenmiştir —son kayıt öncekinin yerine geçer.
|
654
|
+
|
655
|
+
### Kayda Hazırlanmış Bir Dosyayı Hazırlık Alanından Kaldırmak ###
|
656
|
+
|
657
|
+
Bu iki alt bölüm kayda hazırlık alanındaki ve çalışma klasörünüzdeki değişiklikleri nasıl idare edeceğinizi gösteriyor. İşin güzel yanı, bu iki alanın durumunu öğrenmek için kullanacağınız komut aynı zamanda bu alanlardaki değişiklikleri nasıl geri alabileceğinizi de hatırlatıyor. Diyelim ki iki dosyayı değiştirdiniz ve bu iki değişikliği ayrı birer kayıt olarak işlemek istiyorsunuz, ama yanlışlıkla `git add *` komutunu kullanarak ikisini birden hazırlık alanına aldınız. Bunlardan birini nasıl hazırlık alanından çıkarabilirsiniz? `git status` komutu size bunu da anımsatıyor:
|
658
|
+
|
659
|
+
$ git add .
|
660
|
+
$ git status
|
661
|
+
# On branch master
|
662
|
+
# Changes to be committed:
|
663
|
+
# (use "git reset HEAD <file>..." to unstage)
|
664
|
+
#
|
665
|
+
# modified: README.txt
|
666
|
+
# modified: benchmarks.rb
|
667
|
+
#
|
668
|
+
|
669
|
+
“Changes to be committed” yazısının hemen altında "use `git reset HEAD <file>...` to unstage" yazdığını görüyoruz. `benchmarks.rb` dosyasını bu öneriye uygun olarak hazırlık alanından kaldıralım:
|
670
|
+
|
671
|
+
$ git reset HEAD benchmarks.rb
|
672
|
+
benchmarks.rb: locally modified
|
673
|
+
$ git status
|
674
|
+
# On branch master
|
675
|
+
# Changes to be committed:
|
676
|
+
# (use "git reset HEAD <file>..." to unstage)
|
677
|
+
#
|
678
|
+
# modified: README.txt
|
679
|
+
#
|
680
|
+
# Changes not staged for commit:
|
681
|
+
# (use "git add <file>..." to update what will be committed)
|
682
|
+
# (use "git checkout -- <file>..." to discard changes in working directory)
|
683
|
+
#
|
684
|
+
# modified: benchmarks.rb
|
685
|
+
#
|
686
|
+
|
687
|
+
Komut biraz tuhaf, ama iş görüyor. `benchmarks.rb` dosyası hazırlık alanından kaldırıldı ama hâlâ değişmiş olarak görünüyor.
|
688
|
+
|
689
|
+
### Değişmiş Durumdaki Bir Dosyayı Değişmemiş Duruma Geri Getirmek ###
|
690
|
+
|
691
|
+
Peki `benchmarks.rb` dosyasındaki değişiklikleri korumak istemiyorsanız? Yaptığınız değişiklikleri kolayca nasıl geri alacaksınız —son kayıtta nasıl görünüyorsa o haline (ya da ilk klonlandığı haline, yahut çalışma klasörünüze ilk aldığınız haline) nasıl geri getireceksiniz? Neyse ki `git status` komutu bunu nasıl yapacağınızı da söylüyor. Son örnek çıktıda hazırlık alanı dışındaki değişiklikler şöyle görünüyor:
|
692
|
+
|
693
|
+
# Changes not staged for commit:
|
694
|
+
# (use "git add <file>..." to update what will be committed)
|
695
|
+
# (use "git checkout -- <file>..." to discard changes in working directory)
|
696
|
+
#
|
697
|
+
# modified: benchmarks.rb
|
698
|
+
#
|
699
|
+
|
700
|
+
Yaptığınız değişiklikleri nasıl çöpe atabileceğinizi açıkça söylüyor (en azından Git'in 1.6.1'le başlayan yeni sürümleri bunu yapıyor —eğer daha eski bir sürümle çalışıyorsanız, kolaylık sağlayan bu özellikleri edinebilmek için programı güncellemenizi öneririz). Gelin, söyleneni yapalım:
|
701
|
+
|
702
|
+
$ git checkout -- benchmarks.rb
|
703
|
+
$ git status
|
704
|
+
# On branch master
|
705
|
+
# Changes to be committed:
|
706
|
+
# (use "git reset HEAD <file>..." to unstage)
|
707
|
+
#
|
708
|
+
# modified: README.txt
|
709
|
+
#
|
710
|
+
|
711
|
+
Gördüğünüz gibi değişiklikler çöpe atıldı. Bunun tehlikeli bir komut olduğunu aklınızdan çıkarmayın: o dosyaya yaptığınız bütün değişiklikler şimdi yok oldu —dosyanın üstüne yeni bir dosya kopyaladınız. Eğer dosyadaki değişiklikleri istemediğinizden yüzde yüz emin değilseniz asla bu komutu kullanmayın. Eğer sorun bu dosyada yaptığınız değişikliklerin başka işlemler yapmanıza engel olması ise bir sonraki bölümde ele alacağımız zulalama (_stash_) ve dallandırma (_branch_) işlemlerini kullanmanız daha iyi olacaktır.
|
712
|
+
|
713
|
+
Unutmayın, Git'te kaydedilmiş her şey neredeyse her zaman kurtarılabilir. Silinmiş dallardaki kayıtlar ve hatta `--amend` seçeneğiyle üzerine yazılmış kayıtlar bile kurtarılabilirler (veri kurtarma konusunda bkz. _9. Bölüm_). Diğer taraftan, kaydedilmemiş bir değişikliği kaybederseniz büyük olasılıkla onu kurtarmanız mümkün olmaz.
|
714
|
+
|
715
|
+
## Uzak Uçbirimlerle Çalışmak ##
|
716
|
+
|
717
|
+
Bir Git projesine katkıda bulunabilmek için uzaktaki yazılım havuzlarını nasıl düzenleyeceğinizi bilmeniz gerekir. Uzaktaki yazılım havuzları, projenizin İnternet'te ya da başka bir ağda barındırılan sürümleridir. Birden fazla uzak yazılım havuzunuz olabilir, bunlardan her biri sizin için ya salt okunur ya da okunur/yazılır durumdadır. Başkalarıyla ortak çalışmak, bu yazılım havuzlarını düzenlemeyi, onlardan veri çekip (_pull_) onlara veri iterek (_push_) çalışmalarınızı paylaşmayı gerektirir.
|
718
|
+
|
719
|
+
Uzaktaki yazılım havuzlarınızı düzenleyebilmek için, projenize uzak yazılım havuzlarının nasıl ekleneceğini, kullanılmayan havuzların nasıl çıkarılacağını, çeşitli uzak dalları düzenlemeyi ve onların izlenen dallar olarak belirleyip belirlememeyi ve daha başka şeyleri gerektirir. Bu alt bölümde bu uzağı yönetme yeteneklerini inceleyeceğiz.
|
720
|
+
|
721
|
+
### Uzak Uçbirimleri Görüntüleme ###
|
722
|
+
|
723
|
+
Projenizde hangi uzak sunucuları ayarladığınızı görme için `git remote` komutunu kullanabilirsiniz. Bu komut, her bir uzak uçbirimin belirlenmiş kısa adını görüntüler. Eğer yazılım havuzunuzu bir yerden klonlamışsanız, en azından _origin_ uzak uçbirimini görmelisiniz —bu Git'in klonlamanın yapıldığı sunucuya verdiği öntanımlı addır.
|
724
|
+
|
725
|
+
$ git clone git://github.com/schacon/ticgit.git
|
726
|
+
Initialized empty Git repository in /private/tmp/ticgit/.git/
|
727
|
+
remote: Counting objects: 595, done.
|
728
|
+
remote: Compressing objects: 100% (269/269), done.
|
729
|
+
remote: Total 595 (delta 255), reused 589 (delta 253)
|
730
|
+
Receiving objects: 100% (595/595), 73.31 KiB | 1 KiB/s, done.
|
731
|
+
Resolving deltas: 100% (255/255), done.
|
732
|
+
$ cd ticgit
|
733
|
+
$ git remote
|
734
|
+
origin
|
735
|
+
|
736
|
+
`-v` seçeneğini kullanarak Git'in bu kısa ad için depoladığı URL'yi de görebilirsiniz:
|
737
|
+
|
738
|
+
$ git remote -v
|
739
|
+
origin git://github.com/schacon/ticgit.git
|
740
|
+
|
741
|
+
Projenizde birden çok uzak uçbirim varsa, bu komut hepsini listeleyecektir. Örneğin, benim Git yazılım havuzum şöyle görünüyor:
|
742
|
+
|
743
|
+
$ cd grit
|
744
|
+
$ git remote -v
|
745
|
+
bakkdoor git://github.com/bakkdoor/grit.git
|
746
|
+
cho45 git://github.com/cho45/grit.git
|
747
|
+
defunkt git://github.com/defunkt/grit.git
|
748
|
+
koke git://github.com/koke/grit.git
|
749
|
+
origin git@github.com:mojombo/grit.git
|
750
|
+
|
751
|
+
Bu demek oluyor ki bu kullanıcıların herhangi birinden kolaylıkla çekme işlemi (_pull_) yapabiliriz. Fakat dikkat ederseniz, yalnızca _origin_ uçbiriminin SSH URL'si var, yani yalnızca o havuza kod itebiliriz (_push_) (niye böyle olduğunu _4. Bölüm_'de inceleyeceğiz)
|
752
|
+
|
753
|
+
### Uzak Uçbirimler Eklemek ###
|
754
|
+
|
755
|
+
Önceki alt bölümlerde uzak uçbirim eklemekten söz ettim ve bazı örnekler verdim, ama bir kez daha konuyu açıkça incelemekte yarar var. Uzaktaki bir yazılım havuzunu kısa bir ad vererek eklemek için `git remote add [kisa_ad] [url]` komutunu çalıştırın:
|
756
|
+
|
757
|
+
$ git remote
|
758
|
+
origin
|
759
|
+
$ git remote add pb git://github.com/paulboone/ticgit.git
|
760
|
+
$ git remote -v
|
761
|
+
origin git://github.com/schacon/ticgit.git
|
762
|
+
pb git://github.com/paulboone/ticgit.git
|
763
|
+
|
764
|
+
Artık bütün bir URL yerine `pb`'yi kullanabilirsiniz. Örneğin, Paul'ün yazılım havuzunda bulunan ama sizde bulunmayan bütün bilgileri getirmek için `git fetch pb` komutunu kullanabilirsiniz:
|
765
|
+
|
766
|
+
$ git fetch pb
|
767
|
+
remote: Counting objects: 58, done.
|
768
|
+
remote: Compressing objects: 100% (41/41), done.
|
769
|
+
remote: Total 44 (delta 24), reused 1 (delta 0)
|
770
|
+
Unpacking objects: 100% (44/44), done.
|
771
|
+
From git://github.com/paulboone/ticgit
|
772
|
+
* [new branch] master -> pb/master
|
773
|
+
* [new branch] ticgit -> pb/ticgit
|
774
|
+
|
775
|
+
Paul'ün `mastertr` dalı sizin yazılım havuzunuzda da `pb/master` olarak erişilebilir durumdadır —kendi dallarınızdan biriyle birleştirebilir (_merge_) ya da bir yerel dal olarak seçip içeriğini inceleyebilirsiniz.
|
776
|
+
|
777
|
+
### Uzak Uçbirimlerden Getirme ve Çekme İşlemi Yapmak ###
|
778
|
+
|
779
|
+
Biraz önce gördüğünüz gibi, uzaktaki yazılım havuzlarından veri almak için şu komutu kullanabilirsiniz:
|
780
|
+
|
781
|
+
$ git fetch [uzak-sunucu-adı]
|
782
|
+
|
783
|
+
Bu komut, söz konusu uzaktaki yazılım havuzuna gidip orada bulunup da sizin projenizde bulunmayan bütün veriyi getirir. Bunu yaptıktan sonra sizin projenizde o uzak yazılım havuzundaki bütün dallara referanslar oluşur —ki bunları birleştirme yapmak ya da içeriği incelemek için kullanabilirsiniz. (Dalların ne olduğunu ve onları nasıl kullanabileceğinizi _3. Bölüm_'de ayrıntılı biçimde inceleyeceğiz.)
|
784
|
+
|
785
|
+
Bir yazılım havuzunu klonladığınızda, klonlama komutu söz konusu kaynak yazılım havuzunu _origin_ adıyla uzak uçbirimler arasına ekler. Dolayısıyla, `git fetch origin` komutu, klonlamayı yaptığınızdan (ya da en son getirme işlemini (_fetch_) yatığınızdan) beri sunucuya itilmiş yeni değişiklikleri getirir. Unutmayın, `fetch` komutu veriyi yeler yazılım havuzunuza indirir —otomatik olarak sizin yaptıklarınızla birleştirmeye, ya da çalıştığınız şeyler üzerinde değişiklik yapmaya kalkışmaz. Hazır olduğunuzda birleştirme işlemini sizin yapmanız gerekir.
|
786
|
+
|
787
|
+
Uzaktaki bir dalı izlemek üzere ayarlanmış bir dalınız varsa (daha fazla bilgi için sonraki alt bölüme ve _3. Bölüm_'e bakınız) bu dal üzerinde `git pull` komutunu kullanarak uzaktaki yazılım havuzundaki veriyi hem getirip hem de mevcut dalınızla birleştirebilirsiniz. Bu çalışması daha kolay bir düzen olabilir; bu arada, `git clone ` komutu, otomatik olarak, yerel yazılım havuzunuzda, uzaktaki yazılım havuzunun `master` dalını takip eden bir `master` dalı oluşturur (uzaktaki yazılım havuzunun `master` adında bir dalı olması koşuluyla). `git pull` komutu genellikle yereldeki yazılım havuzunuza kaynaklık eden sunucudan veriyi getirip otomatik olarak üzerinde çalışmakta olduğunuz dalla birleştirir.
|
788
|
+
|
789
|
+
### Uzaktaki Yazılım Havuzuna Veri İtmek ###
|
790
|
+
|
791
|
+
Projeniz paylaşmak istediğiniz bir hale geldiğinde, yaptıklarınızı kaynağa itmeniz gerekir. Bunun için kullanılan komut basittir: `git push [uzak-sunucu-adi] [dal-adi]`. Projenizdeki `master` dalını `origin` sunucunuzdaki `master` dalına itmek isterseniz (yineleyelim; kolanlama işlemi genellikle bu isimleri otomatik olarak oluşturur), şu komutu kullanabilirsiniz:
|
792
|
+
|
793
|
+
$ git push origin master
|
794
|
+
|
795
|
+
Bu komut, yalnızca yazma yetkisine sahip olduğunuz bir sunucudan klonlama yapmışsanız ve son getirme işleminizden beri hiç kimse itme işlemi yapmamışsa istediğiniz sonucu verir. Eğer sizinle birlikte bir başkası daha klonlama yapmışsa ve o kişi sizden önce itme yapmışsa, sizin itme işleminiz reddedilir. İtmeden önce sizden önce itilmiş değişiklikleri çekip kendi çalışmanızla birleştirmeniz gerekir. Uzaktaki yazılım havuzlarına itme yapmak konusunda daha ayrıntılı bilgi için bkz. _3. Bölüm_.
|
796
|
+
|
797
|
+
### Uzak Uçbirim Hakkında Bilgi Almak ###
|
798
|
+
|
799
|
+
Belirli bir uzak uçbirim hakkında daha fazla bilgi almak isterseniz `git remote show [ucbirim-adi]` komutunu kullanabilirsiniz. Bu komutu `origin` gibi belirli bir uçbirim kısa adıyla kullanırsanız şöyle bir sonuç alırsınız:
|
800
|
+
|
801
|
+
$ git remote show origin
|
802
|
+
* remote origin
|
803
|
+
URL: git://github.com/schacon/ticgit.git
|
804
|
+
Remote branch merged with 'git pull' while on branch master
|
805
|
+
master
|
806
|
+
Tracked remote branches
|
807
|
+
master
|
808
|
+
ticgit
|
809
|
+
|
810
|
+
Bu, uçbirimin URL'sini ve dalların izlenme durumunu gösterir. Komut, size, eğer `master` dalda iseniz ve `git pull` komutunu çalıştırırsanız, bütün referansları uzak uçbirimden indirip uzaktaki `master` dalından yerel `master` dalına birleştirme yapacağını da söylüyor. Ayrıca, ekmiş olduğu bütün uzak dalları da bir liste halinde veriyor.
|
811
|
+
|
812
|
+
Yukarıdaki verdiğimiz, basit bir örnekti. Git'i daha yoğun biçimde kullandığınızda, `git remote show` komutu çok daha fazla bilgi içerecektir:
|
813
|
+
|
814
|
+
$ git remote show origin
|
815
|
+
* remote origin
|
816
|
+
URL: git@github.com:defunkt/github.git
|
817
|
+
Remote branch merged with 'git pull' while on branch issues
|
818
|
+
issues
|
819
|
+
Remote branch merged with 'git pull' while on branch master
|
820
|
+
master
|
821
|
+
New remote branches (next fetch will store in remotes/origin)
|
822
|
+
caching
|
823
|
+
Stale tracking branches (use 'git remote prune')
|
824
|
+
libwalker
|
825
|
+
walker2
|
826
|
+
Tracked remote branches
|
827
|
+
acl
|
828
|
+
apiv2
|
829
|
+
dashboard2
|
830
|
+
issues
|
831
|
+
master
|
832
|
+
postgres
|
833
|
+
Local branch pushed with 'git push'
|
834
|
+
master:master
|
835
|
+
|
836
|
+
Bu çıktı, belirli dallarda `git push` komutunu çalıştırdığınızda hangi dalların otomatik olarak itileceğini gösteriyor. Buna ek olarak uzak uçbirimde bulunup da sizin projenizde henüz bulunmayan uzak dalları, uzak uçbirimden silinmiş olduğu halde sizin projenizde bulunan dalları ve `git pull` komutunu çalıştırdığınızda otomatik olarak birleştirme işlemine uğrayacak birden çok dalı gösteriyor.
|
837
|
+
|
838
|
+
### Uzan Uçbirimleri Kaldırmak ve Yeniden Adlandırmak ###
|
839
|
+
|
840
|
+
Bir uçbirimin kısa adını değiştirmek isterseniz, Git'in yeni sürümlerinde bunu `git remote rename` komutuyla yapabilirsiniz. Örneğin, `pb` uçbirimini `paul` diye yeniden adlandırmak isterseniz, bunu `git remote rename`'i kullanarak yapabilirsiniz:
|
841
|
+
|
842
|
+
$ git remote rename pb paul
|
843
|
+
$ git remote
|
844
|
+
origin
|
845
|
+
paul
|
846
|
+
|
847
|
+
Bu işlemin uçbirim dal adlarını da değiştirdiğini hatırlatmakta yarar var. Bu işlemden önce `pb/master` olan dalın adı artık `paul/master` olacaktır.
|
848
|
+
|
849
|
+
Bir uçbirim referansını herhangi bir nedenle —sunucuyu taşımış ya da belirli bir yansıyı artık kullanmıyor olabilirsiniz; ya da belki katılımcılardan birisi artık katkıda bulunmuyordur— kaldırmak isterseniz `git remote rm` komutunu kullanabilirsiniz:
|
850
|
+
|
851
|
+
$ git remote rm paul
|
852
|
+
$ git remote
|
853
|
+
origin
|
854
|
+
|
855
|
+
## Etiketleme ##
|
856
|
+
|
857
|
+
Çoğu SKS gibi Git'in de tarihçedeki belirli noktaları önemli olarak etiketleyebilme özelliği vardır. Genellikle insanlar bu işlevi sürümleri (`v1.0`, vs.) işaretlemek için kullanırlar. Bu alt bölümde mevcut etiketleri nasıl listeleyebileceğinizi, nasıl yeni etiketler oluşturabileceğinizi ve değişik etiket tiplerini öğreneceksiniz.
|
858
|
+
|
859
|
+
### Etiketlerinizi Listeleme ###
|
860
|
+
|
861
|
+
Git'te mevcut etiketleri listeleme işi epeyi kolaydır. `git tag` yazmanız yeterlidir:
|
862
|
+
|
863
|
+
$ git tag
|
864
|
+
v0.1
|
865
|
+
v1.3
|
866
|
+
|
867
|
+
Bu komut etiketleri alfabetik biçimde sıralar; etiketlerin sırasının bir önemi yoktur.
|
868
|
+
|
869
|
+
İsterseniz belirli bir örüntüyle eşleşen etiketleri de arayabilirsiniz. Git kaynak yazılım havuzunda 240'tan fazla etiket vardır. Yalnızca 1.4.2 serisindeki etiketleri görmek isterseniz şu komutu çalıştırmalısınız:
|
870
|
+
|
871
|
+
$ git tag -l 'v1.4.2.*'
|
872
|
+
v1.4.2.1
|
873
|
+
v1.4.2.2
|
874
|
+
v1.4.2.3
|
875
|
+
v1.4.2.4
|
876
|
+
|
877
|
+
### Etiket Oluşturma ###
|
878
|
+
|
879
|
+
Git iki başlıca etiket tipi kullanır: hafif ve açıklamalı. Hafif etiketler hiç değişmeyen dallar gibidir —belirli bir kaydı işaret ederler. Öte yandan, açıklamalı etiketler, Git veritabanında bütünlüklü nesneler olarak kaydedilirler. Sınama toplamları alınır; etiketleyenin adını ve e-posta adresini içerirler; bir etiket mesajına sahiptirler ve GNU Privacy Guard (GPG) kullanılarak imzalanıp doğrulanabilirler. Genellikle bütün bu bilgilere ulaşılabilmesini olanaklı kılabilmek için açıklamalı etiketlerin kullanılması önerilir, ama bütün bu bilgileri depolamadan yalnızca geçici bir etiket oluşturmak istiyorsanız, hafif etiketleri de kullanabilirsiniz.
|
880
|
+
|
881
|
+
### Açıklamalı Etiketler ###
|
882
|
+
|
883
|
+
Git'te açıklamalı etiket oluşturmak basittir. En kolayı `tag` komutunu çalıştırırken `-a` seçeneğini kullanmaktır:
|
884
|
+
|
885
|
+
$ git tag -a v1.4 -m 'sürümüm 1.4'
|
886
|
+
$ git tag
|
887
|
+
v0.1
|
888
|
+
v1.3
|
889
|
+
v1.4
|
890
|
+
|
891
|
+
`-m` seçeneği etiketle birlikte depolanacak etiketleme mesajını belirlemek için kullanılır. Açıklamalı bir etiket için mesajı bu şekilde belirlemezseniz, Git mesajı yazabilmeniz için bir editör açacaktır.
|
892
|
+
|
893
|
+
`git show` komutunu kullanarak etiketlenen kayıtla birlikte etikete ilişkin verileri de görebilirsiniz:
|
894
|
+
|
895
|
+
$ git show v1.4
|
896
|
+
tag v1.4
|
897
|
+
Tagger: Scott Chacon <schacon@gee-mail.com>
|
898
|
+
Date: Mon Feb 9 14:45:11 2009 -0800
|
899
|
+
|
900
|
+
my version 1.4
|
901
|
+
commit 15027957951b64cf874c3557a0f3547bd83b3ff6
|
902
|
+
Merge: 4a447f7... a6b4c97...
|
903
|
+
Author: Scott Chacon <schacon@gee-mail.com>
|
904
|
+
Date: Sun Feb 8 19:02:46 2009 -0800
|
905
|
+
|
906
|
+
Merge branch 'experiment'
|
907
|
+
|
908
|
+
Bu, kayıt bilgisinden önce etiketleyenle ilgili bilgileri, kaydın etiketlendiği tarihi ve açıklama mesajını gösterir.
|
909
|
+
|
910
|
+
### İmzalı Etiketler ###
|
911
|
+
|
912
|
+
Eğer bir kişisel anahtarınız (_private key_) varsa etiketlerinizi GPG ile imzalayabilirsiniz. Yapmanız gereken tek şey `-a` yerine `-s` seçeneğini kullanmaktır:
|
913
|
+
|
914
|
+
$ git tag -s v1.5 -m 'imzalı 1.5 etiketim'
|
915
|
+
You need a passphrase to unlock the secret key for
|
916
|
+
user: "Scott Chacon <schacon@gee-mail.com>"
|
917
|
+
1024-bit DSA key, ID F721C45A, created 2009-02-09
|
918
|
+
|
919
|
+
Bu etiket üzerinde `git show` komutunu çalıştırırsanız, GPG imzasını da görebilirsiniz:
|
920
|
+
|
921
|
+
$ git show v1.5
|
922
|
+
tag v1.5
|
923
|
+
Tagger: Scott Chacon <schacon@gee-mail.com>
|
924
|
+
Date: Mon Feb 9 15:22:20 2009 -0800
|
925
|
+
|
926
|
+
imzalı 1.5 etiketim
|
927
|
+
-----BEGIN PGP SIGNATURE-----
|
928
|
+
Version: GnuPG v1.4.8 (Darwin)
|
929
|
+
|
930
|
+
iEYEABECAAYFAkmQurIACgkQON3DxfchxFr5cACeIMN+ZxLKggJQf0QYiQBwgySN
|
931
|
+
Ki0An2JeAVUCAiJ7Ox6ZEtK+NvZAj82/
|
932
|
+
=WryJ
|
933
|
+
-----END PGP SIGNATURE-----
|
934
|
+
commit 15027957951b64cf874c3557a0f3547bd83b3ff6
|
935
|
+
Merge: 4a447f7... a6b4c97...
|
936
|
+
Author: Scott Chacon <schacon@gee-mail.com>
|
937
|
+
Date: Sun Feb 8 19:02:46 2009 -0800
|
938
|
+
|
939
|
+
Merge branch 'experiment'
|
940
|
+
|
941
|
+
Birazdan imzalı etiketleri nasıl doğrulayabileceğinizi öğreneceksiniz.
|
942
|
+
|
943
|
+
### Hafif Etiketler ###
|
944
|
+
|
945
|
+
Kayıtları etiketlemenin bir yolu da hafif etiketler kullanmaktır. Bu, kayıt sınama toplamının bir dosyada depolanmasından ibarettir —başka hiçbir bilgi tutulmaz. Bir hafif etiket oluştururken `-a`, `-s` ya da `-m` seçeneklerini kullanmamalısınız.
|
946
|
+
|
947
|
+
$ git tag v1.4-lw
|
948
|
+
$ git tag
|
949
|
+
v0.1
|
950
|
+
v1.3
|
951
|
+
v1.4
|
952
|
+
v1.4-lw
|
953
|
+
v1.5
|
954
|
+
|
955
|
+
Şimdi etiket üzerinde `git show` komutunu çalıştıracak olsanız, etiketle ilgili ek bilgiler görmezsiniz. Komut yalnızca kaydı gösterir:
|
956
|
+
|
957
|
+
$ git show v1.4-lw
|
958
|
+
commit 15027957951b64cf874c3557a0f3547bd83b3ff6
|
959
|
+
Merge: 4a447f7... a6b4c97...
|
960
|
+
Author: Scott Chacon <schacon@gee-mail.com>
|
961
|
+
Date: Sun Feb 8 19:02:46 2009 -0800
|
962
|
+
|
963
|
+
Merge branch 'experiment'
|
964
|
+
|
965
|
+
### Etiketleri Doğrulamak ###
|
966
|
+
|
967
|
+
İmzalı bir etiketi doğrulamak için `git tag -v [etiket-adi]` komutu kullanılır. Bu komut imzayı doğrulamak için GPG'yi kullanır. Bunun düzgün çalışması için imza sahibinin kamusal anahtarı (_public key_) anahtar halkanızda (_keyring_) bulunmalıdır.
|
968
|
+
|
969
|
+
$ git tag -v v1.4.2.1
|
970
|
+
object 883653babd8ee7ea23e6a5c392bb739348b1eb61
|
971
|
+
type commit
|
972
|
+
tag v1.4.2.1
|
973
|
+
tagger Junio C Hamano <junkio@cox.net> 1158138501 -0700
|
974
|
+
|
975
|
+
GIT 1.4.2.1
|
976
|
+
|
977
|
+
Minor fixes since 1.4.2, including git-mv and git-http with alternates.
|
978
|
+
gpg: Signature made Wed Sep 13 02:08:25 2006 PDT using DSA key ID F3119B9A
|
979
|
+
gpg: Good signature from "Junio C Hamano <junkio@cox.net>"
|
980
|
+
gpg: aka "[jpeg image of size 1513]"
|
981
|
+
Primary key fingerprint: 3565 2A26 2040 E066 C9A7 4A7D C0C6 D9A4 F311 9B9A
|
982
|
+
|
983
|
+
Eğer imzalayıcının genel anahtarına sahip değilseniz, bunun yerine aşağıdakine benzer bir şey göreceksiniz:
|
984
|
+
|
985
|
+
gpg: Signature made Wed Sep 13 02:08:25 2006 PDT using DSA key ID F3119B9A
|
986
|
+
gpg: Can't check signature: public key not found
|
987
|
+
error: could not verify the tag 'v1.4.2.1'
|
988
|
+
|
989
|
+
### Sonradan Etiketleme ###
|
990
|
+
|
991
|
+
Geçmişteki kayıtları da etiketleyebilirsiniz. Diyelim ki Git tarihçeniz şöyle olsun:
|
992
|
+
|
993
|
+
$ git log --pretty=oneline
|
994
|
+
15027957951b64cf874c3557a0f3547bd83b3ff6 Merge branch 'experiment'
|
995
|
+
a6b4c97498bd301d84096da251c98a07c7723e65 beginning write support
|
996
|
+
0d52aaab4479697da7686c15f77a3d64d9165190 one more thing
|
997
|
+
6d52a271eda8725415634dd79daabbc4d9b6008e Merge branch 'experiment'
|
998
|
+
0b7434d86859cc7b8c3d5e1dddfed66ff742fcbc added a commit function
|
999
|
+
4682c3261057305bdd616e23b64b0857d832627b added a todo file
|
1000
|
+
166ae0c4d3f420721acbb115cc33848dfcc2121a started write support
|
1001
|
+
9fceb02d0ae598e95dc970b74767f19372d61af8 updated rakefile
|
1002
|
+
964f16d36dfccde844893cac5b347e7b3d44abbc commit the todo
|
1003
|
+
8a5cbc430f1a9c3d00faaeffd07798508422908a updated readme
|
1004
|
+
|
1005
|
+
Söz gelimi, "updated rakefile" kaydında projenizi `v1.2` olarak etiketlemeniz gerekiyordu, ama unuttunuz. Etiketi sonradan da ekleyebilirsiniz. O kaydı etiketlemek için komutun sonuna kaydın sınama toplamını (ya da bir parçasını) eklemelisiniz:
|
1006
|
+
|
1007
|
+
$ git tag -a v1.2 9fceb02
|
1008
|
+
|
1009
|
+
Kaydın etiketlendiğini göreceksiniz:
|
1010
|
+
|
1011
|
+
$ git tag
|
1012
|
+
v0.1
|
1013
|
+
v1.2
|
1014
|
+
v1.3
|
1015
|
+
v1.4
|
1016
|
+
v1.4-lw
|
1017
|
+
v1.5
|
1018
|
+
|
1019
|
+
$ git show v1.2
|
1020
|
+
tag v1.2
|
1021
|
+
Tagger: Scott Chacon <schacon@gee-mail.com>
|
1022
|
+
Date: Mon Feb 9 15:32:16 2009 -0800
|
1023
|
+
|
1024
|
+
version 1.2
|
1025
|
+
commit 9fceb02d0ae598e95dc970b74767f19372d61af8
|
1026
|
+
Author: Magnus Chacon <mchacon@gee-mail.com>
|
1027
|
+
Date: Sun Apr 27 20:43:35 2008 -0700
|
1028
|
+
|
1029
|
+
updated rakefile
|
1030
|
+
...
|
1031
|
+
|
1032
|
+
### Etiketleri Paylaşmak ###
|
1033
|
+
|
1034
|
+
Aksi belirtilmedikçe `git push` komutu etiketleri uzak uçbirimlere aktarmaz. Etiketleri belirtik biçimde bir ortak sunucuya itmeniz gerekir. Bu süreç uçbirim dallarını paylaşmaya benzer —`git push origin [etiket-adi]` komutunu çalıştırabilirsiniz.
|
1035
|
+
|
1036
|
+
$ git push origin v1.5
|
1037
|
+
Counting objects: 50, done.
|
1038
|
+
Compressing objects: 100% (38/38), done.
|
1039
|
+
Writing objects: 100% (44/44), 4.56 KiB, done.
|
1040
|
+
Total 44 (delta 18), reused 8 (delta 1)
|
1041
|
+
To git@github.com:schacon/simplegit.git
|
1042
|
+
* [new tag] v1.5 -> v1.5
|
1043
|
+
|
1044
|
+
Bir seferde birden çok etiketi paylaşmak isterseniz, `git push` komutuyla birlikte `--tags` seçeneğini de kullanabilirsiniz. Bu, halihazırda itilmemiş olan bütün etiketlerinizi uzak uçbirime aktaracaktır.
|
1045
|
+
|
1046
|
+
$ git push origin --tags
|
1047
|
+
Counting objects: 50, done.
|
1048
|
+
Compressing objects: 100% (38/38), done.
|
1049
|
+
Writing objects: 100% (44/44), 4.56 KiB, done.
|
1050
|
+
Total 44 (delta 18), reused 8 (delta 1)
|
1051
|
+
To git@github.com:schacon/simplegit.git
|
1052
|
+
* [new tag] v0.1 -> v0.1
|
1053
|
+
* [new tag] v1.2 -> v1.2
|
1054
|
+
* [new tag] v1.4 -> v1.4
|
1055
|
+
* [new tag] v1.4-lw -> v1.4-lw
|
1056
|
+
* [new tag] v1.5 -> v1.5
|
1057
|
+
|
1058
|
+
Artık başka biri sizin yazılım havuzunuzdan çekme yaptığında, bütün etiketlerinize de sahip olacaktır.
|
1059
|
+
|
1060
|
+
## İpuçları ##
|
1061
|
+
|
1062
|
+
Git'in temelleri hakkındaki bu bölümü tamamlamadan önce, Git deneyiminizi kolaylaştırabilmek için birkaç ipucu vermekte yarar var. Pek çok insan Git'i bu ipuçlarına başvurmadan kullanıyor; bu ipuçlarından ileride tekrar söz etmeyeceğimiz gibi bunları bilmeniz gerektiğini de varsaymıyoruz; ama yine de bilmeniz yararınıza olacaktır.
|
1063
|
+
|
1064
|
+
### Otomatik Tamamlama ###
|
1065
|
+
|
1066
|
+
Eğer Bash -shell_'ini kullanıyorsanız, Git'in otomatik tamamlama betiğini (_script_) kullanabilirsiniz. Git kaynak kodunu indirip `contrib/completion` klasörüne bakın; orada `git-completion.bash` adında bir dosya olmalı. Bu dosyayı ev dizininize (_home_) kopyalayıp `.bashrc` dosyanıza ekleyin:
|
1067
|
+
|
1068
|
+
source ~/.git-completion.bash
|
1069
|
+
|
1070
|
+
Otomatik tamamlama özelliğinin bütün Git kullanıcıları için geçerli olmasını istiyorsanız, bu betik dosyasını Mac sistemler için `/opt/local/etc/bash_completion.d` konumuna Linux sistemlerde `/etc/bash_completion.d/` konumuna kopyalayın. Bu, Bash'ın otomatik olarak yükleyeceği betiklerin bulunduğu bir klasördür.
|
1071
|
+
|
1072
|
+
Eğer bir Windows kullanıcısıysanız ve Git Bash kullanıyorsanız- ki bu msysGit'le kurulum yaptığınızdaki öntanımlı programdır, otomatik tamamlama kendiliğinden gelecektir.
|
1073
|
+
|
1074
|
+
Bir Git komutu yazarken Sekme tuşuna bastığınızda, karşınıza bir dizi seçenek getirir:
|
1075
|
+
|
1076
|
+
$ git co<selme><sekme>
|
1077
|
+
commit config
|
1078
|
+
|
1079
|
+
Bu örnekte, `git co` yazıp Sekme tuşuna iki kez basmak `commit` ve `config` komutlarını öneriyor. Komutun devamında `m` yazıp bir kez daha Sekme tuşuna basacak olursanız, komut otomatik olarak `git commit`'e tamamlanır.
|
1080
|
+
|
1081
|
+
Bu, seçeneklerde de kullanılabilir, ki muhtemelen daha yararlı olacaktır. Örneğin, `git log` komutunu çalıştırırken seçeneklerden birisini hatırlayamadınız, seçeneği yazmaya başlayıp Sekme tuşuna basarak eşleşen seçenekleri görebilirsiniz:
|
1082
|
+
|
1083
|
+
$ git log --s<sekme>
|
1084
|
+
--shortstat --since= --src-prefix= --stat --summary
|
1085
|
+
|
1086
|
+
Bu güzel özellik sizi zaman kazandırabileceği gibi ikide bir belgelendirmeye bakma gereğini de ortadan kaldırır.
|
1087
|
+
|
1088
|
+
### Takma Adlar ###
|
1089
|
+
|
1090
|
+
Bir komutun bir kısmını yazdığınızda Git bunu anlamayacaktır. Komutların uzun adlarını kullanmak istemezseniz, `git config` komutunu kullanarak bunların yerine daha kısa takma adlar belirleyebilirsiniz. Kullanmak isteyebileceğiniz bazı takma adları buraya aldık:
|
1091
|
+
|
1092
|
+
$ git config --global alias.co checkout
|
1093
|
+
$ git config --global alias.br branch
|
1094
|
+
$ git config --global alias.ci commit
|
1095
|
+
$ git config --global alias.st status
|
1096
|
+
|
1097
|
+
Bu durumda, örneğin, `git commit` yazmak yerine `git ci` yazmanız yeterli olacaktır. Git'i kullandıkça sık kullandığınız başka komutlar da olacaktır, o zaman o komutlar için de takma adlar oluşturabilirsiniz.
|
1098
|
+
|
1099
|
+
Bu teknik, eksikliğini hissettiğiniz komutları oluşturmakta da yararlı olabilir. Örneğin, bir dosyayı hazırlık alanından kaldırmak için yapılması gerekenleri yeni bir komut olarak tanımlayabilirsiniz:
|
1100
|
+
|
1101
|
+
$ git config --global alias.unstage 'reset HEAD --'
|
1102
|
+
|
1103
|
+
Bu durumda şu iki komut eşdeğer olacaktır:
|
1104
|
+
|
1105
|
+
$ git unstage fileA
|
1106
|
+
$ git reset HEAD fileA
|
1107
|
+
|
1108
|
+
Biraz daha temiz değil mi? Bir `last` komutu eklemek de oldukça yaygındır:
|
1109
|
+
|
1110
|
+
$ git config --global alias.last 'log -1 HEAD'
|
1111
|
+
|
1112
|
+
Böylece son kaydı kolaylıkla görebilirsiniz:
|
1113
|
+
|
1114
|
+
$ git last
|
1115
|
+
commit 66938dae3329c7aebe598c2246a8e6af90d04646
|
1116
|
+
Author: Josh Goebel <dreamer3@example.com>
|
1117
|
+
Date: Tue Aug 26 19:48:51 2008 +0800
|
1118
|
+
|
1119
|
+
test for current head
|
1120
|
+
|
1121
|
+
Signed-off-by: Scott Chacon <schacon@example.com>
|
1122
|
+
|
1123
|
+
Gördüğünüz gibi Git yeni komutu takma ad olarak belirlediğini şeyin yerine kullanıyor. Ama belki de bir Git komutu çalıştırmak değil de başka bir program kullanmak istiyorsunuz. Bu durumda komutun başına `!` karakterini koymalısınız. Bir Git yazılım havuzu üzerinde çalışan kendi araçlarınızı yazıyorsanız bu seçenek yararlı olabilir. Bunu göstermek için ,`gitk`'yi çalıştırmak için `git visual` diye yeni bir takma ad tanımlayabiliriz:
|
1124
|
+
|
1125
|
+
$ git config --global alias.visual '!gitk'
|
1126
|
+
|
1127
|
+
## Özet ##
|
1128
|
+
|
1129
|
+
Bu noktada, bütün temel Git işlemlerini yapabiliyorsunuz —bir yazılım havuzunu yaratmak ya da klonlamak, değişiklikler yapmak, bu değişiklikleri kayda hazırlamak ve kaydetmek ve yazılım havuzundaki bütün kayıtların tarihçesini görüntülemek. Sıradaki bölümde Git'in en vurucu özelliğini, dallanma modelini inceleyeceğiz.
|