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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
GitÏê½âÖ®Áù Git¹¤¾ß(¶þ)
 
×÷Õß kangearµÄ²©¿Í£¬»ðÁú¹ûÈí¼þ    ·¢²¼ÓÚ 2014-07-23
  2694  次浏览      27
 

6.4 ÖØÐ´ÀúÊ·

ºÜ¶àʱºò£¬ÔÚ Git ÉϹ¤×÷µÄʱºò£¬ÄãÒ²Ðí»áÓÉÓÚijÖÖÔ­ÒòÏëÒªÐÞ¶©ÄãµÄÌá½»ÀúÊ·¡£Git µÄÒ»¸ö׿Խ֮´¦¾ÍÊÇËüÔÊÐíÄãÔÚ×îºó¿ÉÄܵÄʱ¿ÌÔÙ×÷¾ö¶¨¡£Äã¿ÉÒÔÔÚÄã¼´½«Ìá½»ÔÝ´æÇøÊ±¾ö¶¨Ê²Ã´Îļþ¹éÈëÄÄÒ»´ÎÌá½»£¬Äã¿ÉÒÔʹÓà stash ÃüÁîÀ´¾ö¶¨ÄãÔÝʱ¸éÖõŤ×÷£¬Äã¿ÉÒÔÖØÐ´ÒѾ­·¢ÉúµÄÌá½»ÒÔʹËüÃÇ¿´ÆðÀ´ÊÇÁíÍâÒ»ÖÖÑù×Ó¡£Õâ¸ö°üÀ¨¸Ä±äÌá½»µÄ´ÎÐò¡¢¸Ä±ä˵Ã÷»òÕßÐÞ¸ÄÌá½»Öаüº¬µÄÎļþ£¬½«Ìá½»¹é²¢¡¢²ð·Ö»òÕßÍêȫɾ³ý¡ª¡ªÕâÒ»ÇÐÔÚÄãÉÐδ¿ªÊ¼½«ÄãµÄ¹¤×÷ºÍ±ðÈ˹²Ïíǰ¶¼ÊÇ¿ÉÒԵġ£

ÔÚÕâÒ»½ÚÖУ¬Äã»áѧµ½ÈçºÎÍê³ÉÕâЩºÜÓÐÓõÄÈÎÎñÒÔʹÄãµÄÌá½»ÀúÊ·ÔÚÄ㽫Æä¹²Ïí¸ø±ðÈË֮ǰ±ä³ÉÄãÏëÒªµÄÑù×Ó¡£

¸Ä±ä×î½üÒ»´ÎÌá½»

¸Ä±ä×î½üÒ»´ÎÌá½»Ò²ÐíÊÇ×î³£¼ûµÄÖØÐ´ÀúÊ·µÄÐÐΪ¡£¶ÔÓÚÄãµÄ×î½üÒ»´ÎÌá½»£¬Äã¾­³£Ïë×öÁ½¼þ»ù±¾ÊÂÇ飺¸Ä±äÌύ˵Ã÷£¬»òÕ߸ıäÄã¸Õ¸Õͨ¹ýÔö¼Ó£¬¸Ä±ä£¬É¾³ý¶ø¼Ç¼µÄ¿ìÕÕ¡£

Èç¹ûÄãÖ»ÏëÐÞ¸Ä×î½üÒ»´ÎÌύ˵Ã÷£¬Õâ·Ç³£¼òµ¥£º

$ git commit --amend

Õâ»á°ÑÄã´øÈëÎı¾±à¼­Æ÷£¬ÀïÃæ°üº¬ÁËÄã×î½üÒ»´ÎÌύ˵Ã÷£¬¹©ÄãÐ޸ġ£µ±Äã±£´æ²¢Í˳ö±à¼­Æ÷£¬Õâ¸ö±à¼­Æ÷»áдÈëÒ»¸öеÄÌá½»£¬ÀïÃæ°üº¬ÁËÄǸö˵Ã÷£¬²¢ÇÒÈÃËü³ÉΪÄãµÄеÄ×î½üÒ»´ÎÌá½»¡£

Èç¹ûÄãÍê³ÉÌá½»ºóÓÖÏëÐ޸ı»Ìá½»µÄ¿ìÕÕ£¬Ôö¼Ó»òÕßÐÞ¸ÄÆäÖеÄÎļþ£¬¿ÉÄÜÒòΪÄã×î³õÌύʱ£¬ÍüÁËÌí¼ÓÒ»¸öн¨µÄÎļþ£¬Õâ¸ö¹ý³Ì»ù±¾ÉÏÒ»Ñù¡£Äãͨ¹ýÐÞ¸ÄÎļþÈ»ºó¶ÔÆäÔËÐÐgit add»ò¶ÔÒ»¸öÒѱ»¼Ç¼µÄÎļþÔËÐÐgit rm£¬ËæºóµÄgit commit --amend»á»ñÈ¡Ä㵱ǰµÄÔÝ´æÇø²¢½«Ëü×÷ΪÐÂÌá½»¶ÔÓ¦µÄ¿ìÕÕ¡£

ʹÓÃÕâÏî¼¼ÊõµÄʱºòÄã±ØÐëСÐÄ£¬ÒòΪÐÞÕý»á¸Ä±äÌá½»µÄSHA-1Öµ¡£Õâ¸öºÜÏñÊÇÒ»´Î·Ç³£Ð¡µÄrebase¡ª¡ª²»ÒªÔÚÄã×î½üÒ»´ÎÌá½»±»ÍÆËͺó»¹È¥ÐÞÕýËü¡£

Ð޸Ķà¸öÌύ˵Ã÷

ÒªÐÞ¸ÄÀúÊ·ÖиüÔçµÄÌá½»£¬Äã±ØÐë²ÉÓøü¸´ÔӵŤ¾ß¡£GitûÓÐÒ»¸öÐÞ¸ÄÀúÊ·µÄ¹¤¾ß£¬µ«ÊÇÄã¿ÉÒÔʹÓÃrebase¹¤¾ßÀ´ÑܺÏһϵÁеÄÌá½»µ½ËüÃÇÔ­À´ËùÔÚµÄHEADÉ϶ø²»ÊÇÒÆµ½ÐµÄÉÏ¡£ÒÀ¿¿Õâ¸ö½»»¥Ê½µÄrebase¹¤¾ß£¬Äã¾Í¿ÉÒÔÍ£ÁôÔÚÿһ´ÎÌá½»ºó£¬Èç¹ûÄãÏëÐ޸Ļò¸Ä±ä˵Ã÷¡¢Ôö¼ÓÎļþ»òÈÎºÎÆäËûÊÂÇé¡£Äã¿ÉÒÔͨ¹ý¸øgit rebaseÔö¼Ó-iÑ¡ÏîÀ´ÒÔ½»»¥·½Ê½µØÔËÐÐrebase¡£Äã±ØÐëͨ¹ý¸æËßÃüÁîÑܺϵ½ÄÄ´ÎÌá½»£¬À´Ö¸Ã÷ÄãÐèÒªÖØÐ´µÄÌá½»µÄ»ØËÝÉî¶È¡£

ÀýÈ磬ÄãÏëÐÞ¸Ä×î½üÈý´ÎµÄÌύ˵Ã÷£¬»òÕ߯äÖÐÈÎÒâÒ»´Î£¬Äã±ØÐë¸øgit rebase -iÌṩһ¸ö²ÎÊý£¬Ö¸Ã÷ÄãÏëÒªÐ޸ĵÄÌá½»µÄ¸¸Ìá½»£¬ÀýÈçHEAD~2»òÕßHEAD~3¡£¿ÉÄܼÇס~3¸ü¼ÓÈÝÒ×£¬ÒòΪÄãÏëÐÞ¸Ä×î½üÈý´ÎÌá½»£»µ«ÊÇÇë¼ÇסÄãÊÂʵÉÏËùÖ¸µÄÊÇËÄ´ÎÌύ֮ǰ£¬¼´ÄãÏëÐ޸ĵÄÌá½»µÄ¸¸Ìá½»¡£

$ git rebase -i HEAD~3

ÔÙ´ÎÌáÐÑÕâÊÇÒ»¸öÑܺÏÃüÁ¡ªHEAD~3..HEAD·¶Î§ÄÚµÄÿһ´ÎÌá½»¶¼»á±»ÖØÐ´£¬ÎÞÂÛÄãÊÇ·ñÐÞ¸Ä˵Ã÷¡£²»Òªº­¸ÇÄãÒѾ­ÍÆË͵½ÖÐÐÄ·þÎñÆ÷µÄÌá½»¡ª¡ªÕâô×ö»áʹÆäËû¿ª·¢Õß²úÉú»ìÂÒ£¬ÒòΪÄãÌṩÁËͬÑù±ä¸üµÄ²»Í¬°æ±¾¡£

ÔËÐÐÕâ¸öÃüÁî»áΪÄãµÄÎı¾±à¼­Æ÷Ìṩһ¸öÌá½»ÁÐ±í£¬¿´ÆðÀ´ÏñÏÂÃæÕâÑù

pick f7f3f6d changed my name a bit pick 310154e updated README formatting and
 added blame pick a5f4a0d added cat-file # Rebase

ºÜÖØÒªµÄÒ»µãÊÇÄãµÃ×¢ÒâÕâЩÌá½»µÄ˳ÐòÓëÄãͨ³£Í¨¹ýlogÃüÁî¿´µ½µÄÊÇÏà·´µÄ¡£Èç¹ûÄãÔËÐÐlog£¬Äã»á¿´µ½ÏÂÃæÕâÑùµÄ½á¹û£º

$ git log --pretty=format:"%h %s" HEAD~3..HEAD a5f4a0d added cat-file 310154
e updated README formatting and added blame f7f3f

Çë×¢ÒâÕâÀïµÄµ¹Ðò¡£½»»¥Ê½µÄrebase¸øÁËÄãÒ»¸ö¼´½«ÔËÐеĽű¾¡£Ëü»á´ÓÄãÔÚÃüÁîÐÐÉÏÖ¸Ã÷µÄÌá½»¿ªÊ¼(HEAD~3)È»ºó×ÔÉÏÖÁÏÂÖØ²¥Ã¿´ÎÌá½»ÀïÒýÈëµÄ±ä¸ü¡£Ëü½«×îÔçµÄÁÐÔÚ¶¥É϶ø²»ÊÇ×î½üµÄ£¬ÒòΪÕâÊǵÚÒ»¸öÐèÒªÖØ²¥µÄ¡£

ÄãÐèÒªÐÞ¸ÄÕâ¸ö½Å±¾À´ÈÃËüÍ£ÁôÔÚÄãÏëÐ޸ĵıä¸üÉÏ¡£Òª×öµ½ÕâÒ»µã£¬ÄãÖ»Òª½«ÄãÏëÐ޸ĵÄÿһ´ÎÌá½»Ç°ÃæµÄpick¸ÄΪedit¡£ÀýÈ磬ֻÏëÐ޸ĵÚÈý´ÎÌύ˵Ã÷µÄ»°£¬Äã¾ÍÏñÏÂÃæÕâÑùÐÞ¸ÄÎļþ£º

edit f7f3f6d changed my name a bit pick 310154e updated README formatting and added blame pick a5f4a0d added cat-file

µ±Äã±£´æ²¢Í˳ö±à¼­Æ÷£¬Git»áµ¹»ØÖÁÁбíÖеÄ×îºóÒ»´ÎÌá½»£¬È»ºó°ÑÄãË͵½ÃüÁîÐÐÖУ¬Í¬Ê±ÏÔʾÒÔÏÂÐÅÏ¢£º

$ git rebase -i HEAD~3 Stopped at 7482e0d... 
updated the gemspec to hopefully work better You can amend the commit now, with

ÕâЩָʾºÜÃ÷È·µØ¸æËßÁËÄã¸Ã¸Éʲô¡£ÊäÈë

$ git commit --amend

ÐÞ¸ÄÌύ˵Ã÷£¬Í˳ö±à¼­Æ÷¡£È»ºó£¬ÔËÐÐ

$ git rebase --continue

Õâ¸öÃüÁî»á×Ô¶¯Ó¦ÓÃÆäËûÁ½´ÎÌá½»£¬Äã¾ÍÍê³ÉÈÎÎñÁË¡£Èç¹ûÄ㽫¸ü¶àÐÐµÄ pick ¸ÄΪ edit £¬Äã¾ÍÄܶÔÄãÏëÐ޸ĵÄÌá½»ÖØ¸´ÕâЩ²½Öè¡£Gitÿ´Î¶¼»áͣϣ¬ÈÃÄãÐÞÕýÌá½»£¬Íê³Éºó¼ÌÐøÔËÐС£

ÖØÅÅÌá½»

ÄãÒ²¿ÉÒÔʹÓý»»¥Ê½µÄÑܺÏÀ´³¹µ×ÖØÅÅ»òɾ³ýÌá½»¡£Èç¹ûÄãÏëɾ³ý¡±added cat-file¡±Õâ¸öÌá½»²¢ÇÒÐÞ¸ÄÆäËûÁ½´ÎÌá½»ÒýÈëµÄ˳Ðò£¬Ä㽫rebase½Å±¾´ÓÕâ¸ö

pick f7f3f6d changed my name a bit pick 310154e updated README formatting and added blame pick a5f4a0d added cat-file

¸ÄΪÕâ¸ö£º

pick 310154e updated README formatting and added blame pick f7f3f6d changed my name a bit

µ±Äã±£´æ²¢Í˳ö±à¼­Æ÷£¬Git ½«·ÖÖ§µ¹»ØÖÁÕâЩÌá½»µÄ¸¸Ìá½»£¬Ó¦ÓÃ310154e£¬È»ºóf7f3f6d£¬½Ó×ÅÍ£Ö¹¡£ÄãÓÐЧµØÐÞ¸ÄÁËÕâЩÌá½»µÄ˳Ðò²¢ÇÒ³¹µ×ɾ³ýÁË¡±added cat-file¡±Õâ´ÎÌá½»¡£

Ñ¹ÖÆ(Squashing)Ìá½»

½»»¥Ê½µÄÑܺϹ¤¾ß»¹¿ÉÒÔ½«Ò»ÏµÁÐÌá½»Ñ¹ÖÆÎªµ¥Ò»Ìá½»¡£½Å±¾ÔÚ rebase µÄÐÅÏ¢Àï·ÅÁËһЩÓÐÓõÄָʾ£º

# # Commands: # p, pick = use commit # e, edit = use commit, but stop for amending # s, 
squash = use commit, but meld into pr

Èç¹û²»Óá±pick¡±»òÕß¡±edit¡±£¬¶øÊÇÖ¸¶¨¡±squash¡±£¬Git »áͬʱӦÓÃÄǸö±ä¸üºÍËü֮ǰµÄ±ä¸ü²¢½«Ìύ˵Ã÷¹é²¢¡£Òò´Ë£¬Èç¹ûÄãÏ뽫ÕâÈý¸öÌá½»ºÏ²¢Îªµ¥Ò»Ìá½»£¬Äã¿ÉÒÔ½«½Å±¾Ð޸ijÉÕâÑù£º

pick f7f3f6d changed my name a bit squash310154e updated READMEformatting and added blame squash a5f4a0d added cat-file

µ±Äã±£´æ²¢Í˳ö±à¼­Æ÷£¬Git »áÓ¦ÓÃÈ«²¿Èý´Î±ä¸üÈ»ºó½«ÄãËͻر༭Æ÷À´¹é²¢Èý´ÎÌύ˵Ã÷¡£

#This is a combination of 3 commits. #The first commit's message is: changed my name a bit # This is the 2nd commit message

µ±Äã±£´æÖ®ºó£¬Äã¾ÍÓµÓÐÁËÒ»¸ö°üº¬Ç°Èý´ÎÌá½»µÄÈ«²¿±ä¸üµÄµ¥Ò»Ìá½»¡£

²ð·ÖÌá½»

²ð·ÖÌá½»¾ÍÊdz·ÏúÒ»´ÎÌá½»£¬È»ºó¶à´Î²¿·ÖµØÔÝ´æ»òÌá½»Ö±µ½½áÊø¡£ÀýÈ磬¼ÙÉèÄãÏ뽫Èý´ÎÌá½»ÖеÄÖмäÒ»´Î²ð·Ö¡£½«¡±updated README formatting and added blame¡±²ð·Ö³ÉÁ½´ÎÌá½»£ºµÚÒ»´ÎΪ¡±updated README formatting¡±£¬µÚ¶þ´ÎΪ¡±added blame¡±¡£Äã¿ÉÒÔÔÚrebase -i½Å±¾ÖÐÐÞ¸ÄÄãÏë²ð·ÖµÄÌύǰµÄÖ¸ÁîΪ¡±edit¡±£º

pick f7f3f6d changed my name a bit edit 310154e updated README formatting and added blame pick a5f4a0d added cat-file

È»ºó£¬Õâ¸ö½Å±¾¾Í½«Äã´øÈëÃüÁîÐУ¬ÄãÖØÖÃÄÇ´ÎÌá½»£¬ÌáÈ¡±»ÖØÖõıä¸ü£¬´ÓÖд´½¨¶à´ÎÌá½»¡£µ±Äã±£´æ²¢Í˳ö±à¼­Æ÷£¬Git µ¹»Øµ½ÁбíÖеÚÒ»´ÎÌá½»µÄ¸¸Ìá½»£¬Ó¦ÓõÚÒ»´ÎÌá½»£¨f7f3f6d£©£¬Ó¦Óõڶþ´ÎÌá½»£¨310154e£©£¬È»ºó½«Äã´øµ½¿ØÖÆÌ¨¡£ÄÇÀïÄã¿ÉÒÔÓÃgit reset HEAD^¶ÔÄÇ´ÎÌá½»½øÐÐÒ»´Î»ìºÏµÄÖØÖã¬Õ⽫³·ÏúÄÇ´ÎÌá½»²¢ÇÒ½«Ð޸ĵÄÎļþ³·»Ø¡£´ËʱÄã¿ÉÒÔÔÝ´æ²¢Ìá½»Îļþ£¬Ö±µ½ÄãÓµÓжà´ÎÌá½»£¬½áÊøºó£¬ÔËÐÐgit rebase --continue¡£

$ git reset HEAD^ $ git add README $ git commit -m 'updated README formatting' $ git add lib/simplegit.rb $ git commit -m 'add

GitÔڽű¾ÖÐÓ¦ÓÃÁË×îºóÒ»´ÎÌá½»£¨a5f4a0d£©£¬ÄãµÄÀúÊ·¿´ÆðÀ´¾ÍÏñÕâÑùÁË£º

$ git log -4 --pretty=format:"%h %s" 1c002dd added cat-file 9b29157 added blame 35cfb2b updated README formatting f3cc40e ch

ÔÙ´ÎÌáÐÑ£¬Õâ»áÐÞ¸ÄÄãÁбíÖеÄÌá½»µÄ SHA Öµ£¬ËùÒÔÇëÈ·±£Õâ¸öÁбíÀï²»°üº¬ÄãÒѾ­ÍÆË͵½¹²Ïí²Ö¿âµÄÌá½»¡£

ºËµ¯¼¶Ñ¡Ïî: filter-branch

Èç¹ûÄãÏëÓýű¾µÄ·½Ê½Ð޸ĴóÁ¿µÄÌá½»£¬»¹ÓÐÒ»¸öÖØÐ´ÀúÊ·µÄÑ¡Ïî¿ÉÒÔÓ᪡ªÀýÈ磬ȫ¾ÖÐÔµØÐ޸ĵç×ÓÓʼþµØÖ·»òÕß½«Ò»¸öÎļþ´ÓËùÓÐÌá½»ÖÐɾ³ý¡£Õâ¸öÃüÁîÊÇfilter-branch£¬Õâ¸ö»á´óÃæ»ýµØÐÞ¸ÄÄãµÄÀúÊ·£¬ËùÒÔÄãºÜÓпÉÄܲ»¸ÃÈ¥ÓÃËü£¬³ý·ÇÄãµÄÏîÄ¿ÉÐδ¹«¿ª£¬Ã»ÓÐÆäËûÈËÔÚÄã×¼±¸Ð޸ĵÄÌá½»µÄ»ù´¡ÉϹ¤×÷¡£¾¡¹ÜÈç´Ë£¬Õâ¸ö¿ÉÒԷdz£ÓÐÓá£Äã»áѧϰһЩ³£¼ûÓ÷¨£¬½è´Ë¶ÔËüµÄÄÜÁ¦ÓÐËùÈÏʶ¡£

´ÓËùÓÐÌá½»ÖÐɾ³ýÒ»¸öÎļþ

Õâ¸ö¾­³£·¢Éú¡£ÓÐЩÈ˲»¾­Ë¼¿¼Ê¹ÓÃgit add .£¬ÒâÍâµØÌá½»ÁËÒ»¸ö¾Þ´óµÄ¶þ½øÖÆÎļþ£¬ÄãÏ뽫Ëü´ÓËùÓеط½É¾³ý¡£Ò²ÐíÄ㲻СÐÄÌá½»ÁËÒ»¸ö°üº¬ÃÜÂëµÄÎļþ£¬¶øÄãÏëÈÃÄãµÄÏîÄ¿¿ªÔ´¡£filter-branch´ó¸Å»áÊÇÄãÓÃÀ´ÇåÀíÕû¸öÀúÊ·µÄ¹¤¾ß¡£Òª´ÓÕû¸öÀúÊ·ÖÐɾ³ýÒ»¸öÃû½Ðpassword.txtµÄÎļþ£¬Äã¿ÉÒÔÔÚfilter-branchÉÏʹÓÃ--tree-filterÑ¡Ï

$ git filter-branch --tree-filter 'rm -f passwords.txt' HEAD Rewrite 6b9b3cf04e7c5686a9cb838c3f36a8cb6a0fc2bd (21/21) Ref 're

--tree-filterÑ¡Ïî»áÔÚÿ´Î¼ì³öÏîĿʱÏÈÖ´ÐÐÖ¸¶¨µÄÃüÁîÈ»ºóÖØÐÂÌá½»½á¹û¡£ÔÚÕâ¸öÀý×ÓÖУ¬Äã»áÔÚËùÓпìÕÕÖÐɾ³ýÒ»¸öÃû½Ð password.txt µÄÎļþ£¬ÎÞÂÛËüÊÇ·ñ´æÔÚ¡£Èç¹ûÄãÏëɾ³ýËùÓв»Ð¡ÐÄÌá½»ÉÏÈ¥µÄ±à¼­Æ÷±¸·ÝÎļþ£¬Äã¿ÉÒÔÔËÐÐÀàËÆgit filter-branch --tree-filter 'rm -f *~' HEADµÄÃüÁî¡£

Äã¿ÉÒԹ۲쵽 Git ÖØÐ´Ä¿Â¼Ê÷²¢ÇÒÌá½»£¬È»ºó½«·ÖÖ§Ö¸ÕëÒÆµ½Ä©Î²¡£Ò»¸ö±È½ÏºÃµÄ°ì·¨ÊÇÔÚÒ»¸ö²âÊÔ·ÖÖ§ÉÏ×öÕâЩȻºóÔÚÄãÈ·¶¨²úÎïÕæµÄÊÇÄãËùÒªµÄÖ®ºó£¬ÔÙ hard-reset ÄãµÄÖ÷·ÖÖ§¡£ÒªÔÚÄãËùÓеķÖÖ§ÉÏÔËÐÐfilter-branchµÄ»°£¬Äã¿ÉÒÔ´«µÝÒ»¸ö--all¸øÃüÁî¡£

½«Ò»¸ö×ÓĿ¼ÉèÖÃΪеĸùĿ¼

¼ÙÉèÄãÍê³ÉÁË´ÓÁíÍâÒ»¸ö´úÂë¿ØÖÆÏµÍ³µÄµ¼È빤×÷£¬µÃµ½ÁËһЩûÓÐÒâÒåµÄ×ÓĿ¼£¨trunk, tagsµÈµÈ£©¡£Èç¹ûÄãÏëÈÃtrunk×ÓĿ¼³ÉΪÿһ´ÎÌá½»µÄеÄÏîÄ¿¸ùĿ¼£¬filter-branchÒ²¿ÉÒÔ°ïÄã×öµ½£º

$ git filter-branch --subdirectory-filter trunk HEAD Rewrite 856f0bf61e41a27326cdae8f09fe708d679f596f (12/12) Ref 'refs/head

ÏÖÔÚÄãµÄÏîÄ¿¸ùĿ¼¾ÍÊÇtrunk×ÓĿ¼ÁË¡£Git »á×Ô¶¯µØÉ¾³ý²»¶ÔÕâ¸ö×ÓĿ¼²úÉúÓ°ÏìµÄÌá½»¡£

È«¾ÖÐԵظü»»µç×ÓÓʼþµØÖ·

ÁíÒ»¸ö³£¼ûµÄ°¸ÀýÊÇÄãÔÚ¿ªÊ¼Ê±ÍüÁËÔËÐÐgit configÀ´ÉèÖÃÄãµÄÐÕÃûºÍµç×ÓÓʼþµØÖ·£¬Ò²ÐíÄãÏ뿪Դһ¸öÏîÄ¿£¬°ÑÄãËùÓеŤ×÷µç×ÓÓʼþµØÖ·ÐÞ¸ÄΪ¸öÈ˵ØÖ·¡£ÎÞÂÛÄÄÖÖÇé¿öÄã¶¼¿ÉÒÔÓÃfilter-branchÀ´¸ü»»¶à´ÎÌá½»ÀïµÄµç×ÓÓʼþµØÖ·¡£Äã±ØÐëСÐÄһЩ£¬Ö»¸Ä±äÊôÓÚÄãµÄµç×ÓÓʼþµØÖ·£¬ËùÒÔÄãʹÓÃ--commit-filter£º

$ git filter-branch --commit-filter ' if [ "$GIT_AUTHOR_EMAIL" =
"schacon@localhost" ]; then GIT_AUTHOR_NAME="Scott Chacon";

Õâ¸ö»á±éÀú²¢ÖØÐ´ËùÓÐÌύʹ֮ӵÓÐÄãµÄеØÖ·¡£ÒòΪÌá½»Àï°üº¬ÁËËüÃǵĸ¸Ìá½»µÄSHA-1Öµ£¬Õâ¸öÃüÁî»áÐÞ¸ÄÄãµÄÀúÊ·ÖеÄËùÓÐÌá½»£¬¶ø²»½ö½öÊǰüº¬ÁËÆ¥ÅäµÄµç×ÓÓʼþµØÖ·µÄÄÇЩ¡£

6.5 ʹÓà Git µ÷ÊÔ

Git ͬÑùÌṩÁËһЩ¹¤¾ßÀ´°ïÖúÄãµ÷ÊÔÏîÄ¿ÖÐÓöµ½µÄÎÊÌâ¡£ÓÉÓÚ Git ±»Éè¼ÆÎª¿ÉÓ¦ÓÃÓÚ¼¸ºõÈκÎÀàÐ͵ÄÏîÄ¿£¬ÕâЩ¹¤¾ßÊÇͨÓÃÐÍ£¬µ«ÊÇÔÚÓöµ½ÎÊÌâʱ¿ÉÒÔ¾­³£°ïÖúÄã²éÕÒȱÏÝËùÔÚ¡£

Îļþ±ê×¢

Èç¹ûÄãÔÚ×·×Ù´úÂëÖеÄȱÏÝÏëÖªµÀÕâÊÇʲôʱºòΪʲô±»Òý½øÀ´µÄ£¬Îļþ±ê×¢»áÊÇÄãµÄ×î¼Ñ¹¤¾ß¡£Ëü»áÏÔʾÎļþÖжÔÿһÐнøÐÐÐ޸ĵÄ×î½üÒ»´ÎÌá½»¡£Òò´Ë£¬Èç¹ûÄã·¢ÏÖ×Ô¼º´úÂëÖеÄÒ»¸ö·½·¨´æÔÚȱÏÝ£¬Äã¿ÉÒÔÓÃgit blameÀ´±ê×¢Îļþ£¬²é¿´ÄǸö·½·¨µÄÿһÐзֱðÊÇÓÉË­ÔÚÄÄÒ»ÌìÐ޸ĵġ£ÏÂÃæÕâ¸öÀý×ÓʹÓÃÁË-LÑ¡ÏîÀ´ÏÞÖÆÊä³ö·¶Î§ÔÚµÚ12ÖÁ22ÐУº

$ git blame -L 12,22 simplegit.rb ^4832fe2 (Scott Chacon 2008-03-15 10:31:28 -0700 12) def show(tree = 'master') ^4832fe2 (S

Çë×¢ÒâµÚÒ»¸öÓòÀïÊÇ×îºóÒ»´ÎÐ޸ĸÃÐеÄÄÇ´ÎÌá½»µÄ SHA-1 Öµ¡£½ÓÏÂÈ¥µÄÁ½¸öÓòÊÇ´ÓÄÇ´ÎÌá½»ÖгéÈ¡µÄÖµ¡ª¡ª×÷ÕßÐÕÃûºÍÈÕÆÚ¡ª¡ªËùÒÔÄã¿ÉÒÔ·½±ãµØ»ñ֪˭ÔÚʲôʱºòÐÞ¸ÄÁËÕâÒ»ÐС£ÔÚÕâºóÃæÊÇÐкźÍÎļþµÄÄÚÈÝ¡£Çë×¢Òâ^4832fe2Ìá½»µÄÄÇЩÐУ¬ÕâЩָµÄÊÇÎļþ×î³õÌá½»µÄÄÇЩÐС£ÄǸöÌá½»ÊÇÎļþµÚÒ»´Î±»¼ÓÈëÕâ¸öÏîĿʱ´æÔڵģ¬×ÔÄÇÒÔºóδ±»Ð޸Ĺý¡£Õâ»á´øÀ´Ð¡Ð¡µÄÀ§»ó£¬ÒòΪÄãÒѾ­ÖÁÉÙ¿´µ½ÁËGitʹÓÃ^À´ÐÞÊÎÒ»¸öÌá½»µÄSHAÖµµÄÈýÖÖ²»Í¬µÄÒâÒ壬µ«ÕâÀïȷʵ¾ÍÊÇÕâ¸öÒâ˼¡£

ÁíÒ»¼þºÜ¿áµÄÊÂÇéÊÇÔÚ Git ÖÐÄã²»ÐèÒªÏÔʽµØ¼Ç¼ÎļþµÄÖØÃüÃû¡£Ëü»á¼Ç¼¿ìÕÕÈ»ºó¸ù¾ÝÏÖʵ³¢ÊÔÕÒ³öÒþʽµÄÖØÃüÃû¶¯×÷¡£ÕâÆäÖÐÓÐÒ»¸öºÜÓÐÒâ˼µÄÌØÐÔ¾ÍÊÇÄã¿ÉÒÔÈÃËüÕÒ³öËùÓеĴúÂëÒÆ¶¯¡£Èç¹ûÄãÔÚgit blameºó¼ÓÉÏ-C£¬Git»á·ÖÎöÄãÔÚ±ê×¢µÄÎļþÈ»ºó³¢ÊÔÕÒ³öÆäÖдúÂëÆ¬¶ÎµÄԭʼ³ö´¦£¬Èç¹ûËüÊÇ´ÓÆäËûµØ·½¿½±´¹ýÀ´µÄ»°¡£×î½ü£¬ÎÒÔÚ½«Ò»¸öÃû½ÐGITServerHandler.mµÄÎļþ·Ö½âµ½¶à¸öÎļþÖУ¬ÆäÖÐÒ»¸öÊÇGITPackUpload.m¡£Í¨¹ý¶ÔGITPackUpload.mÖ´Ðдø-C²ÎÊýµÄblameÃüÁÎÒ¿ÉÒÔ¿´µ½´úÂë¿éµÄԭʼ³ö´¦£º

$ git blame -C -L 141,153 GITPackUpload.m f344f58d GITServerHandler.m
 (Scott 2009-01-04 141) f344f58d GITServerHandler.m

ÕâÕæµÄ·Ç³£ÓÐÓá£Í¨³££¬Äã»á°ÑÄ㿽±´´úÂëµÄÄÇ´ÎÌá½»×÷ΪԭʼÌá½»£¬ÒòΪÕâÊÇÄãÔÚÕâ¸öÎļþÖеÚÒ»´Î½Ó´¥µ½ÄǼ¸ÐС£Git¿ÉÒÔ¸æËßÄã±àдÄÇЩÐеÄԭʼÌá½»£¬¼´±ãÊÇÔÚÁíÒ»¸öÎļþÀï¡£

¶þ·Ö²éÕÒ

±ê×¢ÎļþÔÚÄãÖªµÀÎÊÌâÊÇÄÄÀïÒýÈëµÄʱºò»áÓаïÖú¡£Èç¹ûÄã²»ÖªµÀ£¬²¢ÇÒ×ÔÉϴδúÂë¿ÉÓõÄ״̬ÒѾ­¾­ÀúÁËÉϰٴεÄÌá½»£¬Äã¿ÉÄܾÍÒªÇóÖúÓÚbisectÃüÁîÁË¡£bisect»áÔÚÄãµÄÌá½»ÀúÊ·ÖнøÐжþ·Ö²éÕÒÀ´¾¡¿ìµØÈ·¶¨ÄÄÒ»´ÎÌá½»ÒýÈëÁË´íÎó¡£

ÀýÈçÄã¸Õ¸ÕÍÆËÍÁËÒ»¸ö´úÂë·¢²¼°æ±¾µ½²úÆ·»·¾³ÖУ¬¶Ô´úÂëΪʲô»á±íÏÖ³ÉÄÇÑù°Ù˼²»µÃÆä½â¡£Äã»Øµ½ÄãµÄ´úÂëÖУ¬»¹ºÃÄã¿ÉÒÔÖØÏÖÄǸöÎÊÌ⣬µ«ÊÇÕÒ²»µ½ÔÚÄÄÀï¡£Äã¿ÉÒÔ¶Ô´úÂëÖ´ÐÐbisectÀ´Ñ°ÕÒ¡£Ê×ÏÈÄãÔËÐÐgit bisect startÆô¶¯£¬È»ºóÄãÓÃgit bisect badÀ´¸æËßϵͳµ±Ç°µÄÌá½»ÒѾ­ÓÐÎÊÌâÁË¡£È»ºóÄã±ØÐë¸æËßbisectÒÑÖªµÄ×îºóÒ»´ÎÕý³£×´Ì¬ÊÇÄÄ´ÎÌá½»£¬Ê¹ÓÃgit bisect good [good_commit]£º

$ git bisect start $ git bisect bad $ git bisect good v1.0 Bisecting: 6 revisions left to test after this [ecb6e1bc347ccecc5

Git ·¢ÏÖÔÚÄã±ê¼ÇΪÕý³£µÄÌá½»(v1.0)ºÍµ±Ç°µÄ´íÎó°æ±¾Ö®¼äÓдóÔ¼12´ÎÌá½»£¬ÓÚÊÇËü¼ì³öÖмäµÄÒ»¸ö¡£ÔÚÕâÀÄã¿ÉÒÔÔËÐвâÊÔÀ´¼ì²éÎÊÌâÊÇ·ñ´æÔÚÓÚÕâ´ÎÌá½»¡£Èç¹ûÊÇ£¬ÄÇôËüÊÇÔÚÕâ¸öÖмäÌύ֮ǰµÄijһ´ÎÒýÈëµÄ£»Èç¹û·ñ£¬ÄÇôÎÊÌâÊÇÔÚÖмäÌá½»Ö®ºóÒýÈëµÄ¡£¼ÙÉèÕâÀïÊÇûÓдíÎóµÄ£¬ÄÇôÄã¾Íͨ¹ýgit bisect goodÀ´¸æËß Git È»ºó¼ÌÐøÄãµÄÂọ́º

$ git bisect good Bisecting: 3 revisions left to test after this [b047b02ea83310a70fd603dc8cd7a6cd13d15c04] secure this thing

ÏÖÔÚÄãÔÚÁíÍâÒ»¸öÌá½»ÉÏÁË£¬ÔÚÄã¸Õ¸Õ²âÊÔͨ¹ýµÄºÍÒ»¸ö´íÎóÌá½»µÄÖе㴦¡£ÄãÔÙ´ÎÔËÐвâÊÔÈ»ºó·¢ÏÖÕâ´ÎÌá½»ÊÇ´íÎóµÄ£¬Òò´ËÄãͨ¹ýgit bisect badÀ´¸æËßGit£º

$ git bisect bad Bisecting: 1 revisions left to test after this [f71ce38690acf49c1f3c9bea38e09d82a5ce6014] drop exceptions t

Õâ´ÎÌá½»ÊǺõģ¬ÄÇô Git ¾Í»ñµÃÁËÈ·¶¨ÎÊÌâÒýÈëλÖÃËùÐèµÄËùÓÐÐÅÏ¢¡£Ëü¸æËßÄãµÚÒ»¸ö´íÎóÌá½»µÄ SHA-1 Öµ²¢ÇÒÏÔʾһЩÌύ˵Ã÷ÒÔ¼°ÄÄЩÎļþÔÚÄÇ´ÎÌá½»ÀïÐ޸Ĺý£¬ÕâÑùÄã¿ÉÒÔÕÒ³öȱÏݱ»ÒýÈëµÄ¸ùÔ´£º

$ git bisect good b047b02ea83310a70fd603dc8cd7a6cd13d15c04 is first
 bad commit commit b047b02ea83310a70fd603dc8cd7a6cd13d15c0

µ±ÄãÍê³ÉÖ®ºó£¬ÄãÓ¦¸ÃÔËÐÐgit bisect resetÀ´ÖØÉèÄãµÄHEADµ½Ä㿪ʼǰµÄµØ·½£¬·ñÔòÄã»á´¦ÓÚÒ»¸ö¹îÒìµÄµØ·½£º

$ git bisect reset

ÕâÊǸöÇ¿´óµÄ¹¤¾ß£¬¿ÉÒÔ°ïÖúÄã¼ì²éÉϰٵÄÌá½»£¬ÔÚ¼¸·ÖÖÓÄÚÕÒ³öȱÏÝÒýÈëµÄλÖá£ÊÂʵÉÏ£¬Èç¹ûÄãÓÐÒ»¸ö½Å±¾»áÔÚ¹¤³ÌÕý³£Ê±·µ»Ø0£¬´íÎóʱ·µ»Ø·Ç0µÄ»°£¬Äã¿ÉÒÔÍêÈ«×Ô¶¯µØÖ´ÐÐgit bisect¡£Ê×ÏÈÄãÐèÒªÌṩÒÑÖªµÄ´íÎóºÍÕýÈ·Ìá½»À´¸æËßËü¶þ·Ö²éÕҵķ¶Î§¡£Äã¿ÉÒÔͨ¹ýbisect startÃüÁîÀ´ÁгöËüÃÇ£¬ÏÈÁгöÒÑÖªµÄ´íÎóÌá½»ÔÙÁгöÒÑÖªµÄÕýÈ·Ìá½»£º

$ git bisect start HEAD v1.0 $ git bisect run test-error.sh

ÕâÑù»á×Ô¶¯µØÔÚÿһ¸ö¼ì³öµÄÌá½»ÀïÔËÐÐtest-error.shÖ±µ½GitÕÒ³öµÚÒ»¸öÆÆËðµÄÌá½»¡£ÄãÒ²¿ÉÒÔÔËÐÐÏñmake»òÕßmake tests»òÕßÈκÎÄãËùÓµÓеÄÀ´ÎªÄãÖ´ÐÐ×Ô¶¯»¯µÄ²âÊÔ¡£

6.6 ×ÓÄ£¿é

¾­³£ÓÐÕâÑùµÄÊÂÇ飬µ±ÄãÔÚÒ»¸öÏîÄ¿ÉϹ¤×÷ʱ£¬ÄãÐèÒªÔÚÆäÖÐʹÓÃÁíÍâÒ»¸öÏîÄ¿¡£Ò²ÐíËüÊÇÒ»¸öµÚÈý·½¿ª·¢µÄ¿â»òÕßÊÇÄã¶ÀÁ¢¿ª·¢ºÍ²¢ÔÚ¶à¸ö¸¸ÏîÄ¿ÖÐʹÓõġ£Õâ¸ö³¡¾°ÏÂÒ»¸ö³£¼ûµÄÎÊÌâ²úÉúÁË£ºÄãÏ뽫Á½¸öÏîÄ¿µ¥¶À´¦Àíµ«ÊÇÓÖÐèÒªÔÚÆäÖÐÒ»¸öÖÐʹÓÃÁíÍâÒ»¸ö¡£

ÕâÀïÓÐÒ»¸öÀý×Ó¡£¼ÙÉèÄãÔÚ¿ª·¢Ò»¸öÍøÕ¾£¬ÎªÖ®´´½¨AtomÔ´¡£Äã²»Ïë±àдһ¸ö×Ô¼ºµÄAtomÉú³É´úÂ룬¶øÊǾö¶¨Ê¹ÓÃÒ»¸ö¿â¡£Äã¿ÉÄܲ»µÃ²»ÏñCPAN install»òÕßRuby gemÒ»Ñù°üº¬À´×Ô¹²Ïí¿âµÄ´úÂ룬»òÕß½«´úÂ뿽±´µ½ÄãµÄÏîÄ¿Ê÷ÖС£Èç¹û²ÉÓðüº¬¿âµÄ°ì·¨£¬ÄÇô²»¹ÜÓÃʲô°ì·¨¶¼ºÜÄÑÈ¥¶¨ÖÆÕâ¸ö¿â£¬²¿ÊðËü¾Í¸ü¼ÓÀ§ÄÑÁË£¬ÒòΪÄã±ØÐëÈ·±£Ã¿¸ö¿Í»§¶¼ÓµÓÐÄǸö¿â¡£°Ñ´úÂë°üº¬µ½Äã×Ô¼ºµÄÏîÄ¿ÖдøÀ´µÄÎÊÌâÊÇ£¬µ±ÉÏÓα»ÐÞ¸Äʱ£¬ÈκÎÄã½øÐе͍֯»¯µÄÐ޸ͼºÜÄѹ鲢¡£

Git ͨ¹ý×ÓÄ£¿é´¦ÀíÕâ¸öÎÊÌâ¡£×ÓÄ£¿éÔÊÐíÄ㽫һ¸ö Git ²Ö¿âµ±×÷ÁíÍâÒ»¸öGit²Ö¿âµÄ×ÓĿ¼¡£ÕâÔÊÐíÄã¿Ë¡ÁíÍâÒ»¸ö²Ö¿âµ½ÄãµÄÏîÄ¿Öв¢ÇÒ±£³ÖÄãµÄÌá½»Ïà¶Ô¶ÀÁ¢¡£

×ÓÄ£¿é³õ²½

¼ÙÉèÄãÏë°Ñ Rack ¿â£¨Ò»¸ö Ruby µÄ web ·þÎñÆ÷Íø¹Ø½Ó¿Ú£©¼ÓÈëµ½ÄãµÄÏîÄ¿ÖУ¬¿ÉÄܼÈÒª±£³ÖÄã×Ô¼ºµÄ±ä¸ü£¬ÓÖÒªÑÓÐøÉÏÓεıä¸ü¡£Ê×ÏÈÄãÒª°ÑÍⲿµÄ²Ö¿â¿Ë¡µ½ÄãµÄ×ÓĿ¼ÖС£Äãͨ¹ýgit submodule add½«ÍⲿÏîÄ¿¼ÓΪ×ÓÄ£¿é£º

$ git submodule add git://github.com/chneukirchen/rack.git rack Initialized empty Git repository in /opt/subtest/rack/.git/

ÏÖÔÚÄã¾ÍÔÚÏîÄ¿ÀïµÄrack×ÓĿ¼ÏÂÓÐÁËÒ»¸ö Rack ÏîÄ¿¡£Äã¿ÉÒÔ½øÈëÄǸö×ÓĿ¼£¬½øÐбä¸ü£¬¼ÓÈëÄã×Ô¼ºµÄÔ¶³Ì¿Éд²Ö¿âÀ´ÍÆËÍÄãµÄ±ä¸ü£¬´Óԭʼ²Ö¿âÀ­È¡ºÍ¹é²¢µÈµÈ¡£Èç¹ûÄãÔÚ¼ÓÈë×ÓÄ£¿éºóÁ¢¿ÌÔËÐÐgit status£¬Äã»á¿´µ½ÏÂÃæÁ½Ï

$ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: .gitmo

Ê×ÏÈÄã×¢Òâµ½ÓÐÒ»¸ö.gitmodulesÎļþ¡£ÕâÊÇÒ»¸öÅäÖÃÎļþ£¬±£´æÁËÏîÄ¿ URL ºÍÄãÀ­È¡µ½µÄ±¾µØ×ÓĿ¼

$ cat .gitmodules [submodule "rack"] path = rack url = git://github.com/chneukirchen/rack.git

Èç¹ûÄãÓжà¸ö×ÓÄ£¿é£¬Õâ¸öÎļþÀï»áÓжà¸öÌõÄ¿¡£ºÜÖØÒªµÄÒ»µãÊÇÕâ¸öÎļþ¸úÆäËûÎļþÒ»ÑùÒ²ÊÇ´¦ÓÚ°æ±¾¿ØÖÆÖ®Ïµģ¬¾ÍÏñÄãµÄ.gitignoreÎļþÒ»Ñù¡£Ëü¸úÏîÄ¿ÀïµÄÆäËûÎļþÒ»Ñù¿ÉÒÔ±»ÍÆËͺÍÀ­È¡¡£ÕâÊÇÆäËû¿Ë¡´ËÏîÄ¿µÄÈË»ñÖª×ÓÄ£¿éÏîÄ¿À´Ô´µÄ;¾¶¡£

git statusµÄÊä³öÀïËùÁеÄÁíÒ»ÏîÄ¿ÊÇ rack ¡£Èç¹ûÄãÔËÐÐÔÚÄÇÉÏÃæÔËÐÐgit diff£¬»á·¢ÏÖһЩÓÐȤµÄ¶«Î÷£º

$ git diff --cached rack diff --git a/rack b/rack new file mode 160000 index 0000000..08d709f  /dev/null +++ b/rack @@ -0,

¾¡¹ÜrackÊÇÄ㹤×÷Ŀ¼ÀïµÄ×ÓĿ¼£¬µ« Git °ÑËüÊÓ×÷Ò»¸ö×ÓÄ£¿é£¬µ±Äã²»ÔÚÄǸöĿ¼Àïʱ²¢²»¼Ç¼ËüµÄÄÚÈÝ¡£È¡¶ø´úÖ®µÄÊÇ£¬Git ½«Ëü¼Ç¼³ÉÀ´×ÔÄǸö²Ö¿âµÄÒ»¸öÌØÊâµÄÌá½»¡£µ±ÄãÔÚÄǸö×ÓĿ¼ÀïÐ޸IJ¢Ìύʱ£¬×ÓÏîÄ¿»á֪ͨÄÇÀïµÄ HEAD ÒѾ­·¢Éú±ä¸ü²¢¼Ç¼Ä㵱ǰÕýÔÚ¹¤×÷µÄÄǸöÌá½»£»Í¨¹ýÄÇÑùµÄ·½·¨£¬µ±ÆäËûÈ˿ˡ´ËÏîÄ¿£¬ËûÃÇ¿ÉÒÔÖØÐ´´½¨Ò»ÖµĻ·¾³¡£

ÕâÊǹØÓÚ×ÓÄ£¿éµÄÖØÒªÒ»µã£ºÄã¼Ç¼ËûÃǵ±Ç°È·ÇÐËù´¦µÄÌá½»¡£Äã²»ÄܼǼһ¸ö×ÓÄ£¿éµÄmaster»òÕ߯äËûµÄ·ûºÅÒýÓá£

µ±ÄãÌύʱ£¬»á¿´µ½ÀàËÆÏÂÃæµÄ£º

$ git commit -m 'first commit with submodule rack' [master 0550271] first commit with submodule rack 2 files changed, 4 inse

×¢Òâ rack ÌõÄ¿µÄ 160000 ģʽ¡£ÕâÔÚGitÖÐÊÇÒ»¸öÌØÊâģʽ£¬»ù±¾Òâ˼ÊÇÄ㽫һ¸öÌá½»¼Ç¼Ϊһ¸öĿ¼Ïî¶ø²»ÊÇ×ÓĿ¼»òÕßÎļþ¡£

Äã¿ÉÒÔ½«rackĿ¼µ±×÷Ò»¸ö¶ÀÁ¢µÄÏîÄ¿£¬±£³ÖÒ»¸öÖ¸Ïò×ÓĿ¼µÄ×îÐÂÌá½»µÄÖ¸ÕëÈ»ºó·´¸´µØ¸üÐÂÉϲãÏîÄ¿¡£ËùÓеÄGitÃüÁî¶¼ÔÚÁ½¸ö×ÓĿ¼Àï¶ÀÁ¢¹¤×÷£º

$ git log -1 commit 0550271328a0038865aad6331e620cd7238601bb Author: 
Scott Chacon <schacon@gmail.com> Date: Thu Apr 9 09:03:

¿Ë¡һ¸ö´ø×ÓÄ£¿éµÄÏîÄ¿

ÕâÀïÄ㽫¿Ë¡һ¸ö´ø×ÓÄ£¿éµÄÏîÄ¿¡£µ±Äã½ÓÊÕµ½ÕâÑùÒ»¸öÏîÄ¿£¬Ä㽫µÃµ½Á˰üº¬×ÓÏîÄ¿µÄĿ¼£¬µ«ÀïÃæÃ»ÓÐÎļþ£º

$ git clone git://github.com/schacon/myproject.git Initialized empty Git repository in /opt/myproject/.git/ remote: Counting 

rackĿ¼´æÔÚÁË£¬µ«ÊÇÊǿյġ£Äã±ØÐëÔËÐÐÁ½¸öÃüÁgit submodule initÀ´³õʼ»¯ÄãµÄ±¾µØÅäÖÃÎļþ£¬git submodule updateÀ´´ÓÄǸöÏîÄ¿À­È¡ËùÓÐÊý¾Ý²¢¼ì³öÄãÉϲãÏîÄ¿ÀïËùÁеĺÏÊʵÄÌá½»£º

$ git submodule init Submodule 'rack' (git://github.com/chneukirchen/rack.git) registered for path 'rack' $ git submodule upda

ÏÖÔÚÄãµÄrack×ÓĿ¼¾Í´¦ÓÚÄãÏÈǰÌá½»µÄÈ·ÇÐ״̬ÁË¡£Èç¹ûÁíÍâÒ»¸ö¿ª·¢Õß±ä¸üÁË rack µÄ´úÂë²¢Ìá½»£¬ÄãÀ­È¡ÄǸöÒýÓÃÈ»ºó¹é²¢Ö®£¬½«µÃµ½ÉÔÓеã¹ÖÒìµÄ¶«Î÷£º

$ git merge origin/master Updating 0550271..85a3eee Fast forward rack | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)

Äã¹é²¢À´µÄ½ö½öÉÏÊÇÒ»¸öÖ¸ÏòÄãµÄ×ÓÄ£¿éµÄÖ¸Õ룻µ«ÊÇËü²¢²»¸üÐÂÄã×ÓÄ£¿éĿ¼ÀïµÄ´úÂ룬ËùÒÔ¿´ÆðÀ´ÄãµÄ¹¤×÷Ŀ¼´¦ÓÚÒ»¸öÁÙʱ״̬£º

$git diff diff --git a/rack b/rack index 6c5e70b..08d709f 160000 a/rack +++ b/rack@@ -1 +1 @@-Subproject commit 6c5e70

ÊÂÇé¾ÍÊÇÕâÑù£¬ÒòΪÄãËùÓµÓеÄ×ÓÄ£¿éµÄÖ¸Õë²¢¶ÔÓ¦ÓÚ×ÓÄ£¿éĿ¼µÄÕæÊµ×´Ì¬¡£ÎªÁËÐÞ¸´ÕâÒ»µã£¬Äã±ØÐëÔÙ´ÎÔËÐÐgit submodule update£º

$ git submodule update remote: Counting objects: 5, done. remote: Compressing objects: 100% (3/3), done. remote: Total 3 (de

ÿ´ÎÄã´ÓÖ÷ÏîÄ¿ÖÐÀ­È¡Ò»¸ö×ÓÄ£¿éµÄ±ä¸ü¶¼±ØÐëÕâÑù×ö¡£¿´ÆðÀ´ºÜ¹Öµ«ÊǹÜÓá£

Ò»¸ö³£¼ûÎÊÌâÊǵ±¿ª·¢Õß¶Ô×ÓÄ£¿é×öÁËÒ»¸ö±¾µØµÄ±ä¸üµ«ÊDz¢Ã»ÓÐÍÆË͵½¹«¹²·þÎñÆ÷¡£È»ºóËûÃÇÌá½»ÁËÒ»¸öÖ¸ÏòÄǸö·Ç¹«¿ª×´Ì¬µÄÖ¸ÕëÈ»ºóÍÆËÍÉϲãÏîÄ¿¡£µ±ÆäËû¿ª·¢ÕßÊÔͼÔËÐÐgit submodule update£¬ÄǸö×ÓÄ£¿éϵͳ»áÕÒ²»µ½ËùÒýÓõÄÌá½»£¬ÒòΪËüÖ»´æÔÚÓÚµÚÒ»¸ö¿ª·¢ÕßµÄϵͳÖС£Èç¹û·¢ÉúÄÇÖÖÇé¿ö£¬Äã»á¿´µ½ÀàËÆÕâÑùµÄ´íÎó£º

$ git submodule update fatal: reference isn¡¯t a tree: 6c5e70b984a60b3cecd395edd5b48a7575bf58e0 Unable to checkout '6c5e70b9

Äã²»µÃ²»È¥²é¿´Ë­×îºó±ä¸üÁË×ÓÄ£¿é

$ git log -1 rack commit 85a3eee996800fcfa91e2119372dd4172bf76678 Author: 
Scott Chacon <schacon@gmail.com> Date: Thu Apr 9 0

È»ºó£¬Äã¸øÄǸö¼Ò»ï·¢µç×ÓÓʼþ˵Ëûһͨ¡£

ÉϲãÏîÄ¿

ÓÐʱºò£¬¿ª·¢ÕßÏë°´ÕÕËûÃǵķÖ×é»ñȡһ¸ö´óÏîÄ¿µÄ×ÓĿ¼µÄ×Ó¼¯¡£Èç¹ûÄãÊÇ´Ó CVS »òÕß Subversion Ç¨ÒÆ¹ýÀ´µÄ»°Õâ¸öºÜ³£¼û£¬ÔÚÄÇЩϵͳÖÐÄãÒѾ­¶¨ÒåÁËÒ»¸öÄ£¿é»òÕß×ÓĿ¼µÄ¼¯ºÏ£¬¶øÄãÏëÑÓÐøÕâÖÖÀàÐ͵Ť×÷Á÷³Ì¡£

ÔÚ Git ÖÐʵÏÖÕâ¸öµÄÒ»¸öºÃ°ì·¨ÊÇÄ㽫ÿһ¸ö×ÓĿ¼¶¼×ö³É¶ÀÁ¢µÄ Git ²Ö¿â£¬È»ºó´´½¨Ò»¸öÉϲãÏîÄ¿µÄ Git ²Ö¿â°üº¬¶à¸ö×ÓÄ£¿é¡£Õâ¸ö°ì·¨µÄÒ»¸öÓÅÊÆÊÇÄã¿ÉÒÔÔÚÉϲãÏîÄ¿ÖÐͨ¹ý±êÇ©ºÍ·ÖÖ§¸üΪÃ÷È·µØ¶¨ÒåÏîĿ֮¼äµÄ¹ØÏµ¡£

×ÓÄ£¿éµÄÎÊÌâ

ʹÓÃ×ÓÄ£¿é²¢·ÇûÓÐÈκÎȱµã¡£Ê×ÏÈ£¬ÄãÔÚ×ÓÄ£¿éĿ¼Öй¤×÷ʱ±ØÐëÏà¶ÔСÐÄ¡£µ±ÄãÔËÐÐgit submodule update£¬Ëü»á¼ì³öÏîÄ¿µÄÖ¸¶¨°æ±¾£¬µ«ÊDz»ÔÚ·ÖÖ§ÄÚ¡£Õâ½Ð×ö»ñµÃÒ»¸ö·ÖÀëµÄÍ·¡ª¡ªÕâÒâζ×Å HEAD ÎļþÖ±½ÓÖ¸ÏòÒ»´ÎÌá½»£¬¶ø²»ÊÇÒ»¸ö·ûºÅÒýÓá£ÎÊÌâÔÚÓÚÄãͨ³£²¢²»ÏëÔÚÒ»¸ö·ÖÀëµÄÍ·µÄ»·¾³Ï¹¤×÷£¬ÒòΪ̫ÈÝÒ×¶ªÊ§±ä¸üÁË¡£Èç¹ûÄãÏÈÖ´ÐÐÁËÒ»´Îsubmodule update£¬È»ºóÔÚÄǸö×ÓÄ£¿éĿ¼Àï²»´´½¨·ÖÖ§¾Í½øÐÐÌá½»£¬È»ºóÔٴδÓÉϲãÏîÄ¿ÀïÔËÐÐgit submodule updateͬʱ²»½øÐÐÌá½»£¬Git»áºÁÎÞÌáʾµØ¸²¸ÇÄãµÄ±ä¸ü¡£¼¼ÊõÉϽ²Äã²»»á¶ªÊ§¹¤×÷£¬µ«ÊÇÄ㽫ʧȥָÏòËüµÄ·ÖÖ§£¬Òò´Ë»áºÜÄÑÈ¡µ½¡£

ΪÁ˱ÜÃâÕâ¸öÎÊÌ⣬µ±ÄãÔÚ×ÓÄ£¿éĿ¼À﹤×÷ʱӦʹÓÃgit checkout -b work´´½¨Ò»¸ö·ÖÖ§¡£µ±ÄãÔÙ´ÎÔÚ×ÓÄ£¿éÀï¸üеÄʱºò£¬ËüÈÔÈ»»á¸²¸ÇÄãµÄ¹¤×÷£¬µ«ÊÇÖÁÉÙÄãÓµÓÐÒ»¸ö¿ÉÒÔ»ØËݵÄÖ¸Õë¡£

Çл»´øÓÐ×ÓÄ£¿éµÄ·Ö֧ͬÑùÒ²ºÜÓм¼ÇÉ¡£Èç¹ûÄã´´½¨Ò»¸öеķÖÖ§£¬Ôö¼ÓÁËÒ»¸ö×ÓÄ£¿é£¬È»ºóÇл»»Ø²»´ø¸Ã×ÓÄ£¿éµÄ·ÖÖ§£¬ÄãÈÔÈ»»áÓµÓÐÒ»¸öδ±»×·×ÙµÄ×ÓÄ£¿éµÄĿ¼

$ git checkout -b rack Switched to a new branch "rack" $ git submodule add git@github.com:schacon/rack.git rack Initialized

Ä㽫²»µÃ²»½«ËüÒÆ×ß»òÕßɾ³ý£¬ÕâÑùµÄ»°µ±ÄãÇл»»ØÈ¥µÄʱºò±ØÐëÖØÐ¿Ë¡Ëü¡ª¡ªÄã¿ÉÄܻᶪʧÄãÎ´ÍÆË͵ı¾µØµÄ±ä¸ü»ò·ÖÖ§¡£

×îºóÒ»¸öÐèÒªÒýÆð×¢ÒâµÄÊǹØÓÚ´Ó×ÓĿ¼Çл»µ½×ÓÄ£¿éµÄ¡£Èç¹ûÄãÒѾ­¸ú×ÙÁËÄãÏîÄ¿ÖеÄһЩÎļþµ«ÊÇÏë°ÑËüÃÇÒÆµ½×ÓÄ£¿éÈ¥£¬Äã±ØÐë·Ç³£Ð¡ÐÄ£¬·ñÔòGit»áÉúÄãµÄÆø¡£¼ÙÉèÄãµÄÏîÄ¿ÖÐÓÐÒ»¸ö×ÓĿ¼Àï·ÅÁË rack µÄÎļþ£¬È»ºóÄãÏ뽫Ëüת»»Îª×ÓÄ£¿é¡£Èç¹ûÄãɾ³ý×ÓĿ¼ȻºóÔËÐÐsubmodule add£¬Git»áÏòÄã´óºð£º

$ rm -Rf rack/ $ git submodule add git@github.com:schacon/rack.git rack 'rack' already exists in the index

Äã±ØÐëÏȽ«rackĿ¼³·»Ø¡£È»ºóÄã²ÅÄܼÓÈë×ÓÄ£¿é£º

$ git rm -r rack $ git submodule add git@github.com:schacon/rack.git rack Initialized empty Git repository in /opt/testsub/r

ÏÖÔÚ¼ÙÉèÄãÔÚÒ»¸ö·ÖÖ§ÀïÄÇÑù×öÁË¡£Èç¹ûÄã³¢ÊÔÇл»»ØÒ»¸öÈÔÈ»ÔÚĿ¼Àï±£ÁôÄÇЩÎļþ¶ø²»ÊÇ×ÓÄ£¿éµÄ·Ö֧ʱ¡ª¡ªÄã»áµÃµ½ÏÂÃæµÄ´íÎó£º

$ git checkout master error: Untracked working tree file 'rack/AUTHORS' would be overwritten by merge.

Äã±ØÐëÏÈÒÆ³ýrack×ÓÄ£¿éµÄĿ¼²ÅÄÜÇл»µ½²»°üº¬ËüµÄ·ÖÖ§£º

$ mv rack /tmp/ $ git checkout master Switched to branch "master" $ ls README	rack

È»ºó£¬µ±ÄãÇл»»ØÀ´£¬Äã»áµÃµ½Ò»¸ö¿ÕµÄrackĿ¼¡£Äã¿ÉÒÔÔËÐÐgit submodule updateÖØÐ¿Ë¡£¬Ò²¿ÉÒÔ½«/tmp/rackÄ¿Â¼ÖØÐÂÒÆ»Ø¿ÕĿ¼¡£

6.7 ×ÓÊ÷ºÏ²¢

ÏÖÔÚÄãÒѾ­¿´µ½ÁË×ÓÄ£¿éϵͳµÄÂé·³Ö®´¦£¬ÈÃÎÒÃÇÀ´¿´Ò»Ï½â¾öÏàͬÎÊÌâµÄÁíһ;¾¶¡£µ± Git ¹é²¢Ê±£¬Ëü»á¼ì²éÐèÒª¹é²¢µÄÄÚÈÝÈ»ºóÑ¡ÔñÒ»¸öºÏÊʵĹ鲢²ßÂÔ¡£Èç¹ûÄã¹é²¢µÄ·ÖÖ§ÊÇÁ½¸ö£¬GitʹÓÃÒ»¸ö_µÝ¹é_²ßÂÔ¡£Èç¹ûÄã¹é²¢µÄ·ÖÖ§³¬¹ýÁ½¸ö£¬Git²ÉÓÃ_ÕÂÓã_²ßÂÔ¡£ÕâЩ²ßÂÔÊÇ×Ô¶¯Ñ¡ÔñµÄ£¬ÒòΪµÝ¹é²ßÂÔ¿ÉÒÔ´¦Àí¸´ÔÓµÄÈý·¹é²¢Çé¿ö¡ª¡ª±ÈÈç¶àÓÚÒ»¸ö¹²Í¬×æÏȵġª¡ªµ«ÊÇËüÖ»ÄÜ´¦ÀíÁ½¸ö·ÖÖ§µÄ¹é²¢¡£ÕÂÓã¹é²¢¿ÉÒÔ´¦Àí¶à¸ö·ÖÖ§µ«Êǵ«±ØÐë¸ü¼ÓСÐÄÒÔ±ÜÃâ³åÍ»´øÀ´µÄÂé·³£¬Òò´ËËü±»Ñ¡ÖÐ×÷Ϊ¹é²¢Á½¸öÒÔÉÏ·ÖÖ§µÄĬÈϲßÂÔ¡£

ʵ¼ÊÉÏ£¬ÄãÒ²¿ÉÒÔÑ¡ÔñÆäËû²ßÂÔ¡£ÆäÖеÄÒ»¸ö¾ÍÊÇ_×ÓÊ÷_¹é²¢£¬Äã¿ÉÒÔÓÃËüÀ´´¦Àí×ÓÏîÄ¿ÎÊÌâ¡£ÕâÀïÄã»á¿´µ½ÈçºÎ»»ÓÃ×ÓÊ÷¹é²¢µÄ·½·¨À´ÊµÏÖǰһ½ÚÀïËù×öµÄ rack µÄǶÈë¡£

×ÓÊ÷¹é²¢µÄ˼ÏëÊÇÄãÓµÓÐÁ½¸ö¹¤³Ì£¬ÆäÖÐÒ»¸öÏîĿӳÉäµ½ÁíÍâÒ»¸öÏîÄ¿µÄ×ÓĿ¼ÖУ¬·´¹ýÀ´Ò²Ò»Ñù¡£µ±ÄãÖ¸¶¨Ò»¸ö×ÓÊ÷¹é²¢£¬Git¿ÉÒÔ´ÏÃ÷µØÌ½ÖªÆäÖÐÒ»¸öÊÇÁíÍâÒ»¸öµÄ×ÓÊ÷´Ó¶øÊµÏÖÕýÈ·µÄ¹é²¢¡ª¡ªÕâÏ൱ÉñÆæ¡£

Ê×ÏÈÄ㽫 Rack Ó¦ÓüÓÈëµ½ÏîÄ¿ÖС£Ä㽫 Rack ÏîÄ¿µ±×÷ÄãÏîÄ¿ÖеÄÒ»¸öÔ¶³ÌÒýÓã¬È»ºó½«Ëü¼ì³öµ½Ëü×ÔÉíµÄ·ÖÖ§£º

$ git remote add rack_remote git@github.com:schacon/rack.
git $ git fetch rack_remote warning: no common commits remote: Count

ÏÖÔÚÔÚÄãµÄrack_branch·ÖÖ§ÖоÍÓÐÁËRackÏîÄ¿µÄ¸ùĿ¼£¬¶øÄã×Ô¼ºµÄÏîÄ¿ÔÚmaster·ÖÖ§ÖС£Èç¹ûÄãÏȼì³öÆäÖÐÒ»¸öÈ»ºóÁíÍâÒ»¸ö£¬Äã»á¿´µ½ËüÃÇÓв»Í¬µÄÏîÄ¿¸ùĿ¼£º

$ ls AUTHORS	 KNOWN-ISSUES Rakefile contrib	 lib COPYING
	 README bin example	 test $ git checkout master Switched to branch "mas

Òª½« Rack ÏîÄ¿µ±×÷×ÓĿ¼À­È¡µ½ÄãµÄmasterÏîÄ¿ÖС£Äã¿ÉÒÔÔÚ Git ÖÐÓÃgit read-treeÀ´ÊµÏÖ¡£Äã»áÔÚµÚ9ÕÂѧµ½¸ü¶àÓëread-treeºÍËüµÄÅóÓÑÏà¹ØµÄ¶«Î÷£¬µ±Ç°Äã»áÖªµÀËü¶Áȡһ¸ö·ÖÖ§µÄ¸ùĿ¼Ê÷µ½µ±Ç°µÄÔÝ´æÇøºÍ¹¤×÷Ŀ¼¡£ÄãÖ»ÒªÇл»»ØÄãµÄmaster·ÖÖ§£¬È»ºóÀ­È¡rack·ÖÖ§µ½ÄãÖ÷ÏîÄ¿µÄmaster·ÖÖ§µÄrack×ÓĿ¼£º

$ git read-tree --prefix=rack/ -u rack_branch

µ±ÄãÌá½»µÄʱºò£¬¿´ÆðÀ´¾ÍÏñÄãÔÚÄǸö×ÓĿ¼ÏÂÓµÓÐRackµÄÎļþ¡ª¡ª¾ÍÏñÄã´ÓÒ»¸ötarballÀ�±´µÄÒ»Ñù¡£ÓÐÒâ˼µÄÊÇÄã¿ÉÒԱȽÏÈÝÒ׵ع鲢ÆäÖÐÒ»¸ö·ÖÖ§µÄ±ä¸üµ½ÁíÍâÒ»¸ö¡£Òò´Ë£¬Èç¹û Rack ÏîÄ¿¸üÐÂÁË£¬Äã¿ÉÒÔͨ¹ýÇл»µ½ÄǸö·ÖÖ§²¢Ö´ÐÐÀ­È¡À´»ñµÃÉÏÓεıä¸ü£º

$ git checkout rack_branch $ git pull

È»ºó£¬Äã¿ÉÒÔ½«ÄÇЩ±ä¸ü¹é²¢»ØÄãµÄ master ·ÖÖ§¡£Äã¿ÉÒÔʹÓÃgit merge -s subtree£¬Ëü»á¹¤×÷µÄºÜºÃ£»µ«ÊÇ Git ͬʱ»á°ÑÀúÊ·¹é²¢µ½Ò»Æð£¬Õâ¿ÉÄܲ»ÊÇÄãÏëÒªµÄ¡£ÎªÁËÀ­È¡±ä¸ü²¢Ô¤ÖÃÌύ˵Ã÷£¬ÐèÒªÔÚ-s subtree²ßÂÔÑ¡ÏîµÄͬʱʹÓÃ--squashºÍ--no-commitÑ¡Ïî¡£

$ git checkout master $ git merge --squash -s subtree
 --no-commit rack_branch Squash commit -- not updating HEAD Automatic me

ËùÓÐ Rack ÏîÄ¿µÄ±ä¸ü¶¼±»¹é²¢¿ÉÒÔ½øÐб¾µØÌá½»¡£ÄãÒ²¿ÉÒÔ×öÏà·´µÄÊÂÇ顪¡ªÔÚÄãÖ÷·ÖÖ§µÄrackĿ¼Àï½øÐбä¸üÈ»ºó¹é²¢»Ørack_branch·ÖÖ§£¬È»ºó½«ËüÃÇÌá½»¸øÎ¬»¤Õß»òÕßÍÆË͵½ÉÏÓΡ£

ΪÁ˵õ½rack×ÓĿ¼ºÍÄãrack_branch·ÖÖ§µÄÇø±ð¡ª¡ªÒÔ¾ö¶¨ÄãÊÇ·ñÐèÒª¹é²¢ËüÃÇ¡ª¡ªÄã²»ÄÜʹÓÃÒ»°ãµÄdiffÃüÁî¡£¶øÊǶÔÄãÏë±È½ÏµÄ·ÖÖ§ÔËÐÐgit diff-tree£º

$ git diff-tree -p rack_branch

»òÕߣ¬ÎªÁ˱ȽÏÄãµÄrack×ÓĿ¼ºÍ·þÎñÆ÷ÉÏÄãÀ­È¡Ê±µÄmaster·ÖÖ§£¬Äã¿ÉÒÔÔËÐÐ

$ git diff-tree -p rack_remote/master

6.8 ×ܽá

ÄãÒѾ­¿´µ½Á˺ܶà¸ß¼¶µÄ¹¤¾ß£¬ÔÊÐíÄã¸ü¼Ó¾«È·µØ²Ù¿ØÄãµÄÌá½»ºÍÔÝ´æÇø¡£µ±ÄãÅöµ½ÎÊÌâʱ£¬ÄãÓ¦¸Ã¿ÉÒÔºÜÈÝÒ×ÕÒ³öÊÇÄĸö·Ö֧ʲôʱºòÓÉË­ÒýÈëÁËËüÃÇ¡£Èç¹ûÄãÏëÔÚÏîÄ¿ÖÐʹÓÃ×ÓÏîÄ¿£¬ÄãÒ²ÒѾ­Ñ§»áÁËһЩ·½·¨À´Âú×ãÕâЩÐèÇó¡£µ½´Ë£¬ÄãÓ¦¸ÃÄܹ»Íê³ÉÈÕ³£ÀïÄãÐèÒªÓÃÃüÁîÐÐÔÚ Git ÏÂ×öµÄ´ó²¿·ÖÊÂÇ飬²¢ÇҸе½±È½Ï˳ÊÖ¡£

   
2694 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

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

ÅäÖùÜÀíÁ÷³Ì
ÅäÖùÜÀí°×ƤÊé
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