ÊÀ½ç²»ÊÇÍêÃÀµÄ¡£´ó¶àÊýʱºò£¬½«ËùÓнӴ¥µ½µÄÏîĿȫ²¿×ªÏò
Git ÊDz»¿ÉÄܵġ£ÓÐʱÎÒÃDz»µÃ²»ÎªÄ³¸öÏîĿʹÓÃÆäËûµÄ°æ±¾¿ØÖÆÏµÍ³£¨VCS, Version Control
System £©£¬ÆäÖбȽϳ£¼ûµÄÊÇ Subversion ¡£Ä㽫ÔÚ±¾ÕµĵÚÒ»²¿·ÖѧϰʹÓÃgit svn
£¬Git Ϊ Subversion ¸½´øµÄË«ÏòÇŽӹ¤¾ß¡£
»òÐíÏÖÔÚÄãÒѾÔÚ¿¼Âǽ«ÏÈǰµÄÏîĿתÏò Git ¡£±¾Õµĵڶþ²¿·Ö½«½éÉÜÈçºÎ½«ÏîÄ¿Ç¨ÒÆµ½
Git£ºÏȽéÉÜ´Ó Subversion µÄÇ¨ÒÆ£¬È»ºóÊÇ Perforce£¬×îºó½éÉÜÈçºÎʹÓÃ×Ô¶¨ÒåµÄ½Å±¾½øÐзDZê×¼µÄµ¼Èë¡£
8.1 Git Óë Subversion
µ±Ç°£¬´ó¶àÊý¿ª·¢ÖеĿªÔ´ÏîÄ¿ÒÔ¼°´óÁ¿µÄÉÌÒµÏîÄ¿¶¼Ê¹Óà Subversion
À´¹ÜÀíÔ´Âë¡£×÷Ϊ×îÁ÷ÐеĿªÔ´°æ±¾¿ØÖÆÏµÍ³£¬Subversion ÒѾ´æÔÚÁ˽ӽüÊ®ÄêµÄʱ¼ä¡£ËüÔÚÐí¶à·½ÃæÓë
CVS Ê®·ÖÀàËÆ£¬ºóÕßÊÇǰÕß³öÏÖ֮ǰ´úÂë¿ØÖÆÊÀ½çµÄ°ÔÖ÷¡£
Git ×îÎªÖØÒªµÄÌØÐÔÖ®Ò»ÊÇÃûΪ git svn µÄ Subversion Ë«ÏòÇŽӹ¤¾ß¡£¸Ã¹¤¾ß°Ñ Git
±ä³ÉÁË Subversion ·þÎñµÄ¿Í»§¶Ë£¬´Ó¶øÈÃÄãÔÚ±¾µØÏíÊܵ½ Git ËùÓеŦÄÜ£¬¶øºóÖ±½ÓÏò Subversion
·þÎñÆ÷ÍÆËÍÄÚÈÝ£¬·Â·ðÔÚ±¾µØÊ¹ÓÃÁË Subversion ¿Í»§¶Ë¡£Ò²¾ÍÊÇ˵£¬ÔÚÆäËûÈËÈÌÊܹŶµÄͬʱ£¬Äã¿ÉÒÔÔÚ±¾µØÏíÊÜ·ÖÖ§ºÏ²¢£¬Ê¹ÔÝ´æÇøÓò£¬ÑܺÏÒÔ¼°
µ¥ÏîÌô¼ðµÈµÈ¡£ÕâÊǸöÈà Git ͵͵DZÈëºÏ×÷¿ª·¢»·¾³µÄºÃ¶«Î÷£¬ÔÚ°ïÖúÄãµÄ¿ª·¢Í¬°éÃÇÌá¸ßЧÂʵÄͬʱ£¬Ëü»¹ÄܰïÄãȰ˵ÍŶÓÈÃÕû¸öÏîÄ¿¿ò¼ÜתÏò¶Ô
Git µÄÖ§³Ö¡£Õâ¸ö Subversion Ö®ÇÅÊÇͨÏò·Ö²¼Ê½°æ±¾¿ØÖÆÏµÍ³£¨DVCS, Distributed
VCS £©ÊÀ½çµÄÉñÆæËíµÀ¡£
git svn
Git ÖÐËùÓÐ Subversion ÇŽÓÃüÁîµÄ»ù´¡ÊÇ git svn
¡£ËùÓеÄÃüÁî¶¼´ÓËü¿ªÊ¼¡£Ïà¹ØµÄÃüÁîÊýÄ¿²»ÉÙ£¬Ä㽫ͨ¹ý¼¸¸ö¼òµ¥µÄ¹¤×÷Á÷³ÌÁ˽⵽ÆäÖг£¼ûµÄһЩ¡£
ÖµµÃ¾¯½äµÄÊÇ£¬ÔÚʹÓà git svn µÄʱºò£¬Äãʵ¼ÊÊÇÔÚÓë Subversion ½»»¥£¬Git ±ÈËüÒª¸ß¼¶¸´ÔӵĶࡣ¾¡¹Ü¿ÉÒÔÔÚ±¾µØËæÒâµÄ½øÐзÖÖ§ºÍºÏ²¢£¬×îºÃ»¹ÊÇͨ¹ýÑܺϱ£³ÖÏßÐÔµÄÌá½»ÀúÊ·£¬¾¡Á¿±ÜÃâÀàËÆÓëÔ¶³Ì
Git ²Ö¿â¶¯Ì¬½»»¥ÕâÑùµÄ²Ù×÷¡£
±ÜÃâÐÞ¸ÄÀúÊ·ÔÙÖØÐÂÍÆË͵Ä×ö·¨£¬Ò²²»ÒªÍ¬Ê±ÍÆË͵½²¢ÐÐµÄ Git ²Ö¿âÀ´ÊÔͼÓëÆäËû
Git Óû§ºÏ×÷¡£Subersion Ö»Äܱ£´æµ¥Ò»µÄÏßÐÔÌá½»ÀúÊ·£¬Ò»²»Ð¡Ðľͻᱻ¸ãºýÍ¿¡£ºÏ×÷ÍŶÓÖÐͬʱÓÐÈËÓÃ
SVN ºÍ Git£¬Ò»¶¨ÒªÈ·±£ËùÓÐÈ˶¼Ê¹Óà SVN ·þÎñÀ´Ð×÷¡ª¡ªÕâ»áÈÃÉú»îÇáËɺܶࡣ
³õʼÉ趨
ΪÁËչʾ¹¦ÄÜ£¬ÏÈÒªÒ»¸ö¾ßÓÐдȨÏÞµÄ SVN ²Ö¿â¡£Èç¹ûÏë³¢ÊÔÕâ¸ö·¶Àý£¬Äã±ØÐë¸´ÖÆÒ»·ÝÆäÖеIJâÊÔ²Ö¿â¡£±È½Ï¼òµ¥µÄ×ö·¨ÊÇʹÓÃÒ»¸öÃûΪ
svnsync µÄ¹¤¾ß¡£½ÏÐ嵀 Subversion °æ±¾Öж¼´øÓиù¤¾ß£¬Ëü½«Êý¾Ý±àÂëΪÓÃÓÚÍøÂç´«ÊäµÄ¸ñʽ¡£
Òª³¢ÊÔ±¾Àý£¬ÏÈÔÚ±¾µØÐ½¨Ò»¸ö Subversion ²Ö¿â£º
$ mkdir /tmp/test-svn $ svnadmin create /tmp/test-svn |
È»ºó£¬ÔÊÐíËùÓÐÓû§ÐÞ¸Ä revprop ¡ª¡ª ¼òµ¥µÄ×ö·¨ÊÇÌí¼ÓÒ»¸ö×ÜÊÇÒÔ
0 ×÷Ϊ·µ»ØÖµµÄ pre-revprop-change ½Å±¾£º
$ cat /tmp/test-svn/hooks/pre-revprop-change #!/bin/sh exit 0; $ chmod +x /tmp/test-svn/hooks/pre-revprop-change |
ÏÖÔÚ¿ÉÒÔµ÷Óà svnsync init ¼ÓÄ¿±ê²Ö¿â£¬ÔÙ¼ÓÔ´²Ö¿âµÄ¸ñʽÀ´°Ñ¸ÃÏîĿͬ²½µ½±¾µØÁË£º
$ svnsync init file:///tmp/test-svn http://progit-example.googlecode.com/svn/ |
Õ⽫½¨Á¢½øÐÐͬ²½ËùÐèµÄÊôÐÔ¡£¿ÉÒÔͨ¹ýÔËÐÐÒÔÏÂÃüÁîÀ´¿Ë¡´úÂ룺
$ svnsync sync file:///tmp/test-svn Committed revision 1.
Copied properties for revision 1. Committed revision 2. Copied prop |
±ð¿´Õâ¸ö²Ù×÷Ö»»¨µô¼¸·ÖÖÓ£¬ÒªÊÇÄãÏë°ÑÔ´²Ö¿â¸´ÖƵ½ÁíÒ»¸öÔ¶³Ì²Ö¿â£¬¶ø²»ÊDZ¾µØ²Ö¿â£¬Äǽ«»¨µô½Ó½üÒ»¸öСʱ£¬¾¡¹ÜÏîÄ¿ÖÐÖ»Óв»µ½
100 ´ÎµÄÌá½»¡£ Subversion ÿ´ÎÖ»¸´ÖÆÒ»´ÎÐ޸쬰ÑËüÍÆË͵½ÁíÒ»¸ö²Ö¿âÀȻºóÖܶø¸´Ê¼¡ª¡ª¾ªÈ˵ĵÍЧ£¬µ«ÊÇÎÒÃDZðÎÞÑ¡Ôñ¡£
ÈëÃÅ
ÓÐÁË¿ÉÒÔдÈëµÄ Subversion ²Ö¿âÒԺ󣬾ͿÉÒÔ³¢ÊÔһϵäÐ͵Ť×÷Á÷³ÌÁË¡£ÎÒÃÇ´Ó
git svn clone ÃüÁʼ£¬Ëü»á°ÑÕû¸ö Subversion ²Ö¿âµ¼Èëµ½Ò»¸ö±¾µØµÄ Git ²Ö¿âÖС£ÌáÐÑһϣ¬ÕâÀïµ¼ÈëµÄÊÇÒ»¸ö»õÕæ¼ÛʵµÄ
Subversion ²Ö¿â£¬ËùÒÔÓ¦¸Ã°ÑÏÂÃæµÄfile:///tmp/test-svn »»³ÉÄãËùÓÃµÄ Subversion
²Ö¿âµÄ URL£º
$ git svn clone file:///tmp/test-svn -T trunk -b branches -t tags
Initialized empty Git repository in /Users/schacon/project |
ÕâÏ൱ÓÚÕë¶ÔËùÌṩµÄ URL ÔËÐÐÁËÁ½ÌõÃüÁ¡ª git svn init
¼ÓÉÏ gitsvn fetch ¡£¿ÉÄܻỨÉÏÒ»¶Îʱ¼ä¡£ÎÒÃÇËùÓõIJâÊÔÏîÄ¿½ö½ö°üº¬ 75 ´ÎÌá½»²¢ÇÒËüµÄ´úÂëÁ¿²»Ëã´ó£¬ËùÒÔÖ»Óм¸·ÖÖÓ¶øÒÑ¡£²»¹ý£¬Git
ÈÔÈ»ÐèÒªÌáȡÿһ¸ö°æ±¾£¬Ã¿´ÎÒ»¸ö£¬ÔÙÖð¸öÌá½»¡£¶ÔÓÚÒ»¸ö°üº¬³É°ÙÉÏǧ´ÎÌá½»µÄÏîÄ¿£¬»¨µôµÄʱ¼äÔò¿ÉÄÜÊǼ¸Ð¡Ê±ÉõÖÁÊýÌì¡£
-T trunk -b branches -t tags ¸æËß Git ¸Ã Subversion ²Ö¿â×ñÑÁË»ù±¾µÄ·ÖÖ§ºÍ±êÇ©ÃüÃû·¨Ôò¡£Èç¹ûÄãµÄÖ÷¸É(Òë×¢£ºtrunk£¬Ï൱ÓÚ·Ç·Ö²¼Ê½°æ±¾¿ØÖÆÀïµÄmaster·ÖÖ§£¬´ú±í¿ª·¢µÄÖ÷Ïߣ©£¬·ÖÖ§»òÕß±êÇ©ÒÔ²»Í¬µÄ·½Ê½ÃüÃû£¬ÔòÓ¦×ö³öÏàÓ¦¸Ä±ä¡£ÓÉÓڸ÷¨ÔòµÄ³£¼ûÐÔ£¬¿ÉÒÔʹÓÃ-s
À´´úÌæÕûÌõÃüÁËüÒâζ×űê×¼²¼¾Ö£¨s ÊÇ Standard layout µÄÊ××Öĸ£©£¬Ò²¾ÍÊÇÇ°ÃæÑ¡ÏîµÄÄÚÈÝ¡£ÏÂÃæµÄÃüÁîÓÐÏàͬµÄЧ¹û£º
$ git svn clone file:///tmp/test-svn -s |
ÏÖÔÚ£¬ÄãÓÐÁËÒ»¸öÓÐЧµÄ Git ²Ö¿â£¬°üº¬×ŵ¼ÈëµÄ·ÖÖ§ºÍ±êÇ©£º
$ git branch -a * master my-calc-branch tags/2.0.2 tags/release-2.0.1 tags/release-2.0.2 tags/release-2.0.2rc1 trunk |
ÖµµÃ×¢ÒâµÄÊÇ£¬¸Ã¹¤¾ß·ÖÅäÃüÃû¿Õ¼äʱºÍÔ¶³ÌÒýÓõķ½Ê½²»¾¡Ïàͬ¡£¿Ë¡ÆÕͨµÄ
Git ²Ö¿âʱ£¬¿ÉÒÔÒÔ origin/[branch] µÄÐÎʽ»ñȡԶ³Ì·þÎñÆ÷ÉÏËùÓпÉÓõķÖÖ§¡ª¡ª·ÖÅäµ½Ô¶³Ì·þÎñµÄÃû³ÆÏ¡£È»¶øgit
svn ¼Ù¶¨²»´æÔÚ¶à¸öÔ¶³Ì·þÎñÆ÷£¬ËùÒÔ°ÑËùÓÐÖ¸ÏòÔ¶³Ì·þÎñµÄÒýÓò»¼ÓÇø·ÖµÄ±£´æÏÂÀ´¡£¿ÉÒÔÓà Git ̽²âÃüÁî
show-ref À´²é¿´ËùÓÐÒýÓõÄÈ«Ãû¡£
$ git show-ref 1cbd4904d9982f386d87f88fce1c24ad7c0f0471 refs/heads/
master aee1ecc26318164f355a883f5d99cff0c852d3c4 refs/remot |
¶øÆÕͨµÄ Git ²Ö¿âÓ¦¸ÃÊÇÕâ¸öÄ£Ñù£º
$ git show-ref 83e38c7a0af325a9722f2fdc56b10188806d83a1 refs/
heads/master 3e15e38c198baac84223acfc6224bb8b99ff2281 refs/remo |
ÕâÀïÓÐÁ½¸öÔ¶³Ì·þÎñÆ÷£ºÒ»¸öÃûΪ gitserver £¬¾ßÓÐÒ»¸ö master·ÖÖ§£»ÁíÒ»¸ö½Ð
origin£¬¾ßÓÐ master ºÍ testing Á½¸ö·ÖÖ§¡£
×¢Òâ±¾ÀýÖÐͨ¹ý git svn µ¼ÈëµÄÔ¶³ÌÒýÓ㬣¨Subversion µÄ)±êÇ©Êǵ±×÷Ô¶³Ì·ÖÖ§Ìí¼ÓµÄ£¬¶ø²»ÊÇÕæÕýµÄ
Git ±êÇ©¡£µ¼ÈëµÄ Subversion ²Ö¿â·Â·ðÊÇÓÐÒ»¸ö´øÓв»Í¬·ÖÖ§µÄ tags Ô¶³Ì·þÎñÆ÷¡£
Ìá½»µ½ Subversion
ÓÐÁË¿ÉÒÔ¿ªÕ¹¹¤×÷µÄ£¨±¾µØ£©²Ö¿âÒÔºó£¬Äã¿ÉÒÔ¿ªÊ¼¶Ô¸ÃÏîÄ¿×ö³ö¹±Ïײ¢ÏòÉÏÓβֿâÌá½»ÄÚÈÝÁË£¬Git
ÕâʱÏ൱ÓÚÒ»¸ö SVN ¿Í»§¶Ë¡£¼ÙÈç±à¼ÁËÒ»¸öÎļþ²¢½øÐÐÌá½»£¬ÄÇôÕâ´ÎÌá½»½ö´æÔÚÓÚ±¾µØµÄ Git ¶ø·Ç
Subversion ·þÎñÆ÷ÉÏ¡£
$ git commit -am 'Adding git-svn instructions to the README'
[master 97031e5] Adding git-svn instructions to the README 1 fil |
½ÓÏÂÀ´£¬¿ÉÒÔ½«×÷³öµÄÐÞ¸ÄÍÆË͵½ÉÏÓΡ£ÖµµÃ×¢ÒâµÄÊÇ£¬Subversion
µÄʹÓÃÁ÷³ÌÒ²Òò´Ë¸Ä±äÁË¡ª¡ªÄã¿ÉÒÔÔÚÀëÏß״̬ϽøÐжà´ÎÌύȻºóÒ»´ÎÐÔµÄÍÆË͵½ Subversion µÄ·þÎñÆ÷ÉÏ¡£Ïò
Subversion ·þÎñÆ÷ÍÆË͵ÄÃüÁîÊÇgit svn dcommit£º
$ git svn dcommit Committing to file:///tmp/test-svn/trunk ...
M README.txt Committed r79 M README.txt r79 = 938b1a547c2cc920 |
ËùÓÐÔÚÔ Subversion Êý¾Ý»ù´¡ÉÏÌá½»µÄ commit »áÒ»Ò»Ìá½»µ½
Subversion£¬È»ºóÄã±¾µØ Git µÄ commit ½«±»ÖØÐ´£¬¼ÓÈëÒ»¸öÌØ±ð±êʶ¡£ÕâÒ»²½ºÜÖØÒª£¬ÒòΪËüÒâζ×ÅËùÓÐ
commit µÄ SHA-1 Ö¸¶¼»á·¢Éú±ä»¯¡£ÕâÒ²ÊÇͬʱʹÓà Git ºÍ Subversion Á½ÖÖ·þÎñ×÷ΪԶ³Ì·þÎñ²»ÊǸöºÃÖ÷ÒâµÄÔÒòÖ®Ò»¡£¼ìÊÓÒÔÏÂ×îºóÒ»¸ö
commit£¬Äã»áÕÒµ½ÐÂÌí¼ÓµÄgit-svn-id £¨Òë×¢£º¼´±¾¶Î¿ªÍ·Ëù˵µÄÌØ±ð±êʶ£©£º
$ git log -1 commit 938b1a547c2cc92033b74d32030e86468294a5c8 Author:
schacon <schacon@4c93b258-373f-11de-be05-5f7a86268029> |
×¢Òâ¿´£¬Ô±¾ÒÔ 97031e5 ¿ªÍ·µÄ SHA-1 УÑéÖµÔÚÌá½»Íê³ÉÒÔºó±ä³ÉÁË
938b1a5 ¡£Èç¹û¼ÈÒªÏò Git Ô¶³Ì·þÎñÆ÷ÍÆËÍÄÚÈÝ£¬ÓÖÒªÍÆË͵½ Subversion Ô¶³Ì·þÎñÆ÷£¬Ôò±ØÐëÏÈÏò
Subversion ÍÆËÍ£¨dcommit£©£¬ÒòΪ¸Ã²Ù×÷»á¸Ä±äËùÌá½»µÄÊý¾ÝÄÚÈÝ¡£
ÀÈ¡×îнøÕ¹
Èç¹ûÒªÓëÆäËû¿ª·¢ÕßÐ×÷£¬×ÜÓÐÄÇôһÌìÄãÍÆËÍÍê±ÏÖ®ºó£¬ÆäËûÈË·¢ÏÖËûÃÇÍÆËÍ×Ô¼ºÐ޸ĵÄʱºò£¨ÓëÄãÍÆË͵ÄÄÚÈÝ£©²úÉú³åÍ»¡£ÕâЩÐÞ¸ÄÔÚÄãºÏ²¢Ö®Ç°½«Ò»Ö±±»¾Ü¾ø¡£ÔÚ
git svn ÀïÕâÖÖÇé¿öÐÎËÆ£º
$ git svn dcommit Committing to file:///tmp/test-svn/trunk ...
Merge conflict during commit: Your file or directory 'README.tx |
ΪÁ˽â¾ö¸ÃÎÊÌ⣬¿ÉÒÔÔËÐÐ git svn rebase £¬Ëü»áÀÈ¡·þÎñÆ÷ÉÏËùÓÐ×îеĸı䣬Ôٴλù´¡ÉÏÑܺÏÄãµÄÐ޸ģº
$ git svn rebase M README.txt r80 = ff829ab914e8775c7c025d741beb3d523ee30bc4 (trunk) First,
rewinding head to replay your wo |
ÏÖÔÚ£¬Äã×ö³öµÄÐ޸ͼ·¢ÉúÔÚ·þÎñÆ÷ÄÚÈÝÖ®ºó£¬ËùÒÔ¿ÉÒÔ˳ÀûµÄÔËÐÐ dcommit
£º
$ git svn dcommit Committing to file:///tmp/test-svn/trunk ...
M README.txt Committed r81 M README.txt r81 = 456cbe6337abe491 |
ÐèÒªÀμǵÄÒ»µãÊÇ£¬Git ÒªÇóÎÒÃÇÔÚÍÆËÍ֮ǰÏȺϲ¢ÉÏÓβֿâÖÐ×îеÄÄÚÈÝ£¬¶ø
git svn Ö»ÒªÇó´æÔÚ³åÍ»µÄʱºò²ÅÕâÑù×ö¡£¼ÙÈçÓÐÈËÏòÒ»¸öÎļþÍÆËÍÁËһЩÐ޸ģ¬ÕâʱÄãÒªÏòÁíÒ»¸öÎļþÍÆËÍһЩÐ޸ģ¬ÄÇôdcommit
½«Õý³£¹¤×÷£º
$ git svn dcommit Committing to file:///tmp/test-svn/trunk ...
M configure.ac Committed r84 M autogen.sh r83 = 8aa54a74d452f |
ÕâÒ»µãÐèÒªÀμǣ¬ÒòΪËüµÄ½á¹ûÊÇÍÆËÍÖ®ºóÏîÄ¿´¦ÓÚÒ»¸ö²»ÍêÕû´æÔÚÓëÈκÎÖ÷»úÉϵÄ״̬¡£Èç¹û×ö³öµÄÐÞ¸ÄÎÞ·¨¼æÈݵ«Ã»ÓвúÉú³åÍ»£¬Ôò¿ÉÄÜÔì³ÉһЩºÜÄÑÈ·ÕïµÄÄÑÌâ¡£ÕâºÍʹÓÃ
Git ·þÎñÆ÷ÊDz»Í¬µÄ¡ª¡ªÔÚ Git ÊÀ½çÀ·¢²¼Ö®Ç°£¬Äã¿ÉÒÔÔÚ¿Í»§¶ËϵͳÀïÍêÕûµÄ²âÊÔÏîÄ¿µÄ״̬£¬¶øÔÚ
SVN ÓÀÔ¶¶¼Ã»·¨È·±£ÌύǰºóÏîÄ¿µÄ״̬ÍêȫһÑù¡£
¼°Ê±»¹Ã»´òËã½øÐÐÌá½»£¬ÄãÒ²Ó¦¸ÃÓÃÕâ¸öÃüÁî´Ó Subversion ·þÎñÆ÷ÀÈ¡×îÐÂÐ޸ġ£sit svn
fetch ÄÜ»ñÈ¡×îеÄÊý¾Ý£¬²»¹ýgit svn rebase ²Å»áÔÚ»ñȡ֮ºóÔÚ±¾µØ½øÐиüР¡£
$ git svn rebase M generate_descriptor_proto.sh r82 =
bd16df9173e424c6f52c337ab6efa7f7643282f1 (trunk) First, rewinding head |
²»Ê±µØÔËÐÐһϠgit svn rebase ¿ÉÒÔÈ·±£ÄãµÄ´úÂëûÓйýʱ¡£²»¹ý£¬ÔËÐиÃÃüÁîʱÐèҪȷ±£¹¤×÷Ŀ¼µÄÕû½à¡£Èç¹ûÔÚ±¾µØ×öÁËÐ޸ģ¬Ôò±ØÐëÔÚÔËÐÐgit
svn rebase ֮ǰ»òÔݴ湤×÷£¬»òÔÝʱÌá½»ÄÚÈÝ¡ª¡ª·ñÔò£¬¸ÃÃüÁî»á·¢ÏÖÑܺϵĽá¹û°üº¬×ųåÍ»Òò¶øÖÕÖ¹¡£
Git ·ÖÖ§ÎÊÌâ
ϰ¹ßÁË Git µÄ¹¤×÷Á÷³ÌÒÔºó£¬Äã¿ÉÄܻᴴ½¨Ò»Ð©ÌØÐÔ·ÖÖ§£¬Íê³ÉÏà¹ØµÄ¿ª·¢¹¤×÷£¬È»ºóºÏ²¢ËûÃÇ¡£Èç¹ûÒªÓÃ
git svn Ïò Subversion ÍÆËÍÄÚÈÝ£¬ÄÇô×îºÃÊÇÿ´ÎÓÃÑܺÏÀ´²¢ÈëÒ»¸öµ¥Ò»·ÖÖ§£¬¶ø²»ÊÇÖ±½ÓºÏ²¢¡£Ê¹ÓÃÑܺϵÄÔÒòÊÇ
Subversion Ö»ÓÐÒ»¸öÏßÐÔµÄÀúÊ·¶ø²»Ïñ Git ÄÇÑù´¦ÀíºÏ²¢£¬ËùÒÔ Git svn ÔÚ°Ñ¿ìÕÕת»»Îª
Subversion µÄ commit ʱֻÄܰüº¬µÚÒ»¸ö׿ÏÈ¡£
¼ÙÉè·ÖÖ§ÀúÊ·ÈçÏ£º´´½¨Ò»¸ö experiment ·ÖÖ§£¬½øÐÐÁ½´ÎÌá½»£¬È»ºóºÏ²¢µ½
master ¡£ÔÚ dcommit µÄʱºò»áµÃµ½ÈçÏÂÊä³ö£º
$ git svn dcommit Committing to file:///tmp/test-svn/trunk ...
M CHANGES.txt Committed r85 M CHANGES.txt r85 = 4bfebeec434d15 |
ÔÚÒ»¸ö°üº¬Á˺ϲ¢ÀúÊ·µÄ·ÖÖ§ÉÏʹÓà dcommit ¿ÉÒԳɹ¦ÔËÐУ¬²»¹ýÔÚ
Git ÏîÄ¿µÄÀúÊ·ÖУ¬ËüûÓÐÖØÐ´ÄãÔÚ experiment ·ÖÖ§ÖеÄÁ½¸ö commit ¡ª¡ªÁíÒ»·½Ã棬ÕâЩ¸Ä±äÈ´³öÏÖÔÚÁË
SVN °æ±¾ÖÐͬһ¸öºÏ²¢ commit ÖС£
ÔÚ±ðÈ˿ˡ¸ÃÏîÄ¿µÄʱºò£¬Ö»ÄÜ¿´µ½Õâ¸öºÏ²¢ commit °üº¬ÁËËùÓз¢Éú¹ýµÄÐ޸ģ»ËûÃÇÎÞ·¨»ñÖªÐ޸ĵÄ×÷ÕߺÍʱ¼äµÈÌá½»ÐÅÏ¢¡£
Subversion ·ÖÖ§
Subversion µÄ·ÖÖ§ºÍ Git ÖеIJ»¾¡Ïàͬ£»±ÜÃâ¹ý¶àµÄʹÓÿÉÄÜÊÇ×îºÃ·½°¸¡£²»¹ý£¬ÓÃ
git svn ´´½¨ºÍÌá½»²»Í¬µÄ Subversion ·ÖÖ§ÈÔÊÇ¿ÉÐеġ£
´´½¨Ð嵀 SVN ·ÖÖ§
ÒªÔÚ Subversion Öн¨Á¢Ò»¸öзÖÖ§£¬ÐèÒªÔËÐÐ git svn
branch [·ÖÖ§Ãû] To create a new branch in Subversion, you
rungit svn branch [branchname]:
$ git svn branch opera Copying file:///tmp/test-svn/trunk at r87 to
file:///tmp/test-svn/branches/opera... Found possible bra |
Ï൱ÓÚÔÚ Subversion ÖÐµÄ svn copy trunk branches/opera
ÃüÁî²¢ÇÒ¶Ô Subversion ·þÎñÆ÷½øÐÐÁËÏà¹Ø²Ù×÷¡£ÖµµÃÌáÐѵÄÊÇËüûÓмì³öºÍת»»µ½ÄǸö·ÖÖ§£»Èç¹ûÏÖÔÚ½øÐÐÌá½»£¬½«Ìá½»µ½·þÎñÆ÷ÉϵÄtrunk£¬
¶ø·Ç opera¡£
Çл»µ±Ç°·ÖÖ§
Git ͨ¹ýËÑѰÌá½»ÀúÊ·ÖÐ Subversion ·ÖÖ§µÄÍ·²¿À´¾ö¶¨ dcommit
µÄÄ¿µÄµØ¡ª¡ª¶øËüÓ¦¸ÃÖ»ÓÐÒ»¸ö£¬ÄǾÍÊǵ±Ç°·ÖÖ§ÀúÊ·ÖÐ×î½üÒ»´Î°üº¬ git-svn-id µÄÌá½»¡£
Èç¹ûÐèҪͬʱÔÚ¶à¸ö·ÖÖ§ÉÏÌá½»£¬¿ÉÒÔͨ¹ýµ¼Èë Subversion ÉÏij¸öÆäËû·ÖÖ§µÄ
commit À´½¨Á¢ÒԸ÷Ö֧Ϊ dcommit Ä¿µÄµØµÄ±¾µØ·ÖÖ§¡£±ÈÈçÄãÏëÓµÓÐÒ»¸ö²¢ÐÐά»¤µÄopera
·ÖÖ§£¬¿ÉÒÔÔËÐÐ
$ git branch opera remotes/opera |
È»ºó£¬Èç¹ûÒª°Ñ opera ·ÖÖ§²¢Èë trunk £¨±¾µØµÄ master
·ÖÖ§£©£¬¿ÉÒÔʹÓÃÆÕͨµÄgit merge¡£²»¹ý×îºÃÌṩһÌõÃèÊöÌá½»µÄÐÅÏ¢£¨Í¨¹ý -m£©£¬·ñÔòÕâ´ÎºÏ²¢µÄ¼Ç¼ÊÇ
Merge branch opera £¬¶ø²»ÊÇÈκÎÓÐÓõĶ«Î÷¡£
¼Çס£¬ËäȻʹÓÃÁË git merge À´½øÐÐÕâ´Î²Ù×÷£¬²¢ÇҺϲ¢¹ý³Ì¿ÉÄܱÈʹÓà Subversion ¼òµ¥Ò»Ð©£¨ÒòΪ
Git »á×Ô¶¯ÕÒµ½Êʺϵĺϲ¢»ù´¡£©£¬Õâ²¢²»ÊÇÒ»´ÎÆÕͨµÄ Git ºÏ²¢Ìá½»¡£×îÖÕËü½«±»ÍÆËÍ»Ø commit
ÎÞ·¨°üº¬¶à¸ö׿Ï鵀 Subversion ·þÎñÆ÷ÉÏ£»Òò¶øÔÚÍÆËÍÖ®ºó£¬Ëü½«±ä³ÉÒ»¸ö°üº¬ÁËËùÓÐÔÚÆäËû·ÖÖ§ÉÏ×ö³öµÄ¸Ä±äµÄµ¥Ò»
commit¡£°ÑÒ»¸ö·ÖÖ§ºÏ²¢µ½ÁíÒ»¸ö·ÖÖ§ÒÔºó£¬Äãû·¨ÏñÔÚ Git ÖÐÄÇÑùÇáÒ׵Ļص½ÄǸö·ÖÖ§ÉϼÌÐø¹¤×÷¡£ÌύʱÔËÐеÄdcommit
ÃüÁî²Á³ýÁËÈ«²¿ÓйØÄĸö·ÖÖ§±»²¢ÈëµÄÐÅÏ¢£¬Òò¶øÒÔºóµÄºÏ²¢»ù´¡¼ÆË㽫ÊDz»ÕýÈ·µÄ¡ª¡ª dcommit Èà git
merge µÄ½á¹û±äµÃÀàËÆÓÚgit merge --squash¡£²»ÐÒµÄÊÇ£¬ÎÒÃÇûÓÐʲôºÃ°ì·¨À´±ÜÃâ¸ÃÇé¿ö¡ª¡ª
Subversion ÎÞ·¨´¢´æÕâ¸öÐÅÏ¢£¬ËùÒÔÔÚʹÓÃËü×÷Ϊ·þÎñÆ÷µÄʱºòÄ㽫ÓÀԶΪÕâ¸öȱÏÝËùÀ§¡£ÎªÁ˲»³öÏÖÕâÖÖÎÊÌ⣬Ôڰѱ¾µØ·ÖÖ§£¨±¾ÀýÖеÄopera£©²¢Èë
trunk ÒÔºóÓ¦¸ÃÁ¢¼´½«Æäɾ³ý¡£
¶ÔÓ¦ Subversion µÄÃüÁî
git svn ¹¤¾ß¼¯ºÏÁËÈô¸É¸öÓë Subversion ÀàËÆµÄ¹¦ÄÜ£¬¶ÔÓ¦µÄÃüÁî¿ÉÒÔ¼ò»¯Ïò
Git µÄת»¯¹ý³Ì¡£ÏÂÃæÕâЩÃüÁîÄÜʵÏÖ Subversion µÄÕâЩ¹¦ÄÜ¡£
SVN ·ç¸ñµÄÀúÊ·
ϰ¹ßÁË Subversion µÄÈË¿ÉÄÜÏëÒÔ SVN µÄ·ç¸ñÏÔʾÀúÊ·£¬ÔËÐÐ
git svn log ¿ÉÒÔÈÃÌá½»ÀúÊ·ÏÔʾΪ SVN ¸ñʽ£º
$ git svn log ---- r87 | schacon | 2009-05-02 16:07:37 - |
¹ØÓÚ git svn log £¬ÓÐÁ½µãÐèҪעÒâ¡£Ê×ÏÈ£¬Ëü¿ÉÒÔÀëÏß¹¤×÷£¬²»Ïñ
svn log ÃüÁÐèÒªÏò Subversion ·þÎñÆ÷Ë÷È¡Êý¾Ý¡£Æä´Î£¬Ëü½ö½öÏÔʾÒѾÌá½»µ½ Subversion
·þÎñÆ÷É쵀 commit¡£ÔÚ±¾µØÉÐδ dcommit µÄ Git Êý¾Ý²»»á³öÏÖÔÚÕâÀÆäËûÈËÏò Subversion
·þÎñÆ÷ÐÂÌá½»µÄÊý¾ÝÒ²²»»áÏÔʾ¡£µÈÓÚ˵ÊÇÏÔʾÁË×î½üÒÑÖª Subversion ·þÎñÆ÷ÉϵÄ״̬¡£
SVN ÈÕÖ¾
ÀàËÆ git svn log ¶Ô git log µÄÄ£Ä⣬svn annotate
µÄµÈЧÃüÁîÊÇgit svn blame [ÎļþÃû]¡£ÆäÊä³öÈçÏ£º
$ git svn blame README.txt 2 temporal Protocol Buffers -
Google's data interchange format 2 temporal Copyright 2008 Google In |
ͬÑù£¬Ëü²»ÏÔʾ±¾µØµÄ Git Ìá½»ÒÔ¼° Subversion ÉϺóÀ´¸üеÄÄÚÈÝ¡£
SVN ·þÎñÆ÷ÐÅÏ¢
»¹¿ÉÒÔʹÓà git svn info À´»ñÈ¡ÓëÔËÐÐ svn info ÀàËÆµÄÐÅÏ¢£º
$ git svn info Path: . URL: https://schacon-test.googlecode.
com/svn/trunk Repository Root: https://schacon-test.googlecode.c |
ËüÓë blame ºÍ log µÄÏàͬµãÔÚÓÚÀëÏßÔËÐÐÒÔ¼°Ö»¸üе½×îºóÒ»´ÎÓë
Subversion ·þÎñÆ÷ͨÐŵÄ״̬¡£
ÂÔ Subversion Ö®ËùÂÔ
¼ÙÈç¿Ë¡ÁËÒ»¸ö°üº¬ÁË svn:ignore ÊôÐ﵀ Subversion
²Ö¿â£¬¾ÍÓбØÒª½¨Á¢¶ÔÓ¦µÄ .gitignore ÎļþÀ´·ÀÖ¹ÒâÍâÌύһЩ²»Ó¦¸ÃÌá½»µÄÎļþ¡£git svn
ÓÐÁ½¸öÓÐÒæÓÚ¸ÄÉÆ¸ÃÎÊÌâµÄÃüÁî¡£µÚÒ»¸öÊÇgit svn create-ignore£¬Ëü×Ô¶¯½¨Á¢¶ÔÓ¦µÄ .gitignore
Îļþ£¬ÒÔ±ãÏ´ÎÌá½»µÄʱºò¿ÉÒÔ°üº¬Ëü¡£
µÚ¶þ¸öÃüÁîÊÇ git svn show-ignore£¬Ëü°ÑÐèÒª·Å½ø .gitignore
ÎļþÖеÄÄÚÈÝ´òÓ¡µ½±ê×¼Êä³ö£¬·½±ãÎÒÃǰÑÊä³öÖØ¶¨Ïòµ½ÏîÄ¿µÄºÚÃûµ¥Îļþ£º
$ git svn show-ignore > .git/info/exclude |
ÕâÑùÒ»À´£¬±ÜÃâÁË .gitignore ¶ÔÏîÄ¿µÄ¸ÉÈÅ¡£Èç¹ûÄãÊÇÒ»¸ö Subversion
ÍŶÓÀïΨһµÄ Git Óû§£¬¶øÆäËû¶ÓÓѲ»Ï²»¶ÏîÄ¿°üº¬.gitignore£¬¸Ã·½·¨ÊÇÄãµÄ²»¶þ֮ѡ¡£
Git-Svn ×ܽá
git svn ¹¤¾ß¼¯ÔÚµ±Ç°²»µÃ²»Ê¹Óà Subversion ·þÎñÆ÷»òÕß¿ª·¢»·¾³ÒªÇóʹÓÃ
Subversion ·þÎñÆ÷µÄʱºò¸ñÍâÓÐÓᣲ»·Á°ÑËü¿´³ÉÒ»¸öõË½ÅµÄ Git£¬È»¶ø£¬Ä㻹ÊÇÓпÉÄÜÔÚת»»¹ý³ÌÖÐÅöµ½Ò»Ð©À§»óÄãºÍºÏ×÷ÕßÃǵÄÃÔÌ⡣ΪÁ˱ÜÃâÂé·³£¬ÊÔ×Å×ñÊØÈçÏÂÊØÔò£º
1¡¢±£³ÖÒ»¸ö²»°üº¬ÓÉ git merge Éú³ÉµÄ commit µÄÏßÐÔÌá½»ÀúÊ·¡£½«ÔÚÖ÷Ïß·ÖÖ§Íâ½øÐеĿª·¢Í¨Í¨ÑܺϻØÖ÷Ïߣ»±ÜÃâÖ±½ÓºÏ²¢¡£
2¡¢²»Òªµ¥¶À½¨Á¢ºÍʹÓÃÒ»¸ö Git ·þÎñÀ´¸ãºÏ×÷¡£¿ÉÒÔΪÁ˼ÓËÙпª·¢ÕߵĿË¡½ø³Ì½¨Á¢Ò»¸ö£¬µ«ÊDz»ÒªÏòËüÌṩÈκβ»°üº¬
git-svn-id ÌõÄ¿µÄÄÚÈÝ¡£ÉõÖÁ¿ÉÒÔÌí¼ÓÒ»¸öpre-receive ¹Ò¹³À´ÔÚÿһ¸öÌá½»ÐÅÏ¢ÖвéÕÒ
git-svn-id ²¢¾Ü¾øÌá½»ÄÇЩ²»°üº¬ËüµÄ commit¡£
3¡¢Èç¹û×ñÑÕâÐ©ÊØÔò£¬ÔÚ Subversion ÉϹ¤×÷»¹¿ÉÒÔ½ÓÊÜ¡£È»¶ø£¬Èç¹ûÄÜǨáãµ½ÕæÕýµÄ
Git ·þÎñÆ÷£¬ÔòÄÜΪÍŶӴøÀ´¸ü¶àºÃ´¦¡£
|