Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
GitÏê½âÖ®°Ë GitÓëÆäËûϵͳ£¨Ò»£©
 
×÷Õß kangearµÄ²©¿Í£¬»ðÁú¹ûÈí¼þ    ·¢²¼ÓÚ 2014-07-28
  1720  次浏览      29
 

ÊÀ½ç²»ÊÇÍêÃÀµÄ¡£´ó¶àÊýʱºò£¬½«ËùÓнӴ¥µ½µÄÏîĿȫ²¿×ªÏò 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 ·þÎñÆ÷£¬ÔòÄÜΪÍŶӴøÀ´¸ü¶àºÃ´¦¡£

   
1720 ´Îä¯ÀÀ       29
Ïà¹ØÎÄÕÂ

ÿÈÕ¹¹½¨½â¾ö·½°¸
ÈçºÎÖÆ¶¨ÓÐЧµÄÅäÖùÜÀíÁ÷³Ì
ÅäÖùÜÀíÖ÷Òª»î¶¯¼°ÊµÏÖ·½·¨
¹¹½¨¹ÜÀíÈëÃÅ
Ïà¹ØÎĵµ

ÅäÖùÜÀíÁ÷³Ì
ÅäÖùÜÀí°×ƤÊé
CM09_CÅäÖùÜÀí±ê×¼
ʹÓÃSVN½øÐа汾¿ØÖÆ
Ïà¹Ø¿Î³Ì

ÅäÖùÜÀíʵ¼ù
ÅäÖùÜÀí·½·¨¡¢¹¤¾ßÓëÓ¦ÓÃ
¶à²ã´Î¼¯³ÉÅäÖùÜÀí
²úÆ··¢²¼¹ÜÀí
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]


Èí¼þÅäÖùÜÀíµÄÎÊÌ⡢ĿµÄ
Èí¼þÅäÖùÜÀí¹æ·¶
CQWeb 7.1ÐÔÄܲâÊÔÓëµ÷ÓÅÖ¸ÄÏ
ΪʲôÐèҪʹÓÃClearCase
ClearCaseÓëRTCµÄ¼¯³É
ÀûÓÃClearQuest ½øÐвâÊÔ¹ÜÀí


²úÆ··¢²¼¹ÜÀí
ÅäÖùÜÀí·½·¨¡¢Êµ¼ù¡¢¹¤¾ß
¶à²ã´Î¼¯³ÉÅäÖùÜÀí
ʹÓÃCCÓëCQ½øÐÐÏîĿʵ¼ù
CVSÓëÅäÖùÜÀí
Subversion¹ÜÀíÔ±


ÅäÖùÜÀíʵ¼ù£¨´Ó×éÖ¯¼¶µ½ÏîÄ¿¼¶£©
ͨºÅÔº ÅäÖùÜÀí¹æ·¶ÓëÓ¦ÓÃ
ÅäÖùÜÀíÈÕ¹¹½¨¼°³ÖÐø¼¯³É
µ¤·ð˹ ClearCaseÓëÅäÖùÜÀí
ÖйúÒÆ¶¯ Èí¼þÅäÖùÜÀí
ÖйúÒøÐÐ Èí¼þÅäÖùÜÀí
Ìì½ò»ªÒíÀ¶Ìì¿Æ¼¼ ÅäÖùÜÀíÓëPvcs