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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
3 ·Ö²¼Ê½ Git - ά»¤ÏîÄ¿
 
  1642  次浏览      29
 2018-10-12
 
±à¼­ÍƼö:

±¾ÎÄÀ´×Ôgit-scm.com£¬³ýÁËÈçºÎÓÐЧµØ²ÎÓëÒ»¸öÏîÄ¿µÄ¹±Ï×Ö®Í⣬Äã¿ÉÄÜÒ²ÐèÒªÁ˽âÈçºÎά»¤ÏîÄ¿¡£ Çë²ÎÔÄÏÂÎÄ¡£

ÎÄÕµĵÚһƪ 1·Ö²¼Ê½ Git - ·Ö²¼Ê½¹¤×÷Á÷³Ì

ÎÄÕµĵڶþƪ 2 ·Ö²¼Ê½ Git - ÏòÒ»¸öÏîÄ¿¹±Ï×

ά»¤ÏîÄ¿

³ýÁËÈçºÎÓÐЧµØ²ÎÓëÒ»¸öÏîÄ¿µÄ¹±Ï×Ö®Í⣬Äã¿ÉÄÜÒ²ÐèÒªÁ˽âÈçºÎά»¤ÏîÄ¿¡£ Õâ°üº¬½ÓÊܲ¢Ó¦ÓñðÈËʹÓà format-patch Éú³É²¢Í¨¹ýµç×ÓÓʼþ·¢Ë͹ýÀ´µÄ²¹¶¡£¬»ò¶ÔÏîÄ¿Ìí¼ÓµÄÔ¶³Ì°æ±¾¿â·ÖÖ§Öеĸü¸Ä½øÐÐÕûºÏ¡£ µ«ÎÞÂÛÊǹÜÀí°æ±¾¿â£¬»¹ÊǰïæÑéÖ¤¡¢ÉóºËÊÕµ½µÄ²¹¶¡£¬¶¼ÐèҪͬÆäËû¹±Ï×ÕßÔ¼¶¨Ä³ÖÖ³¤ÆÚ¿É³ÖÐøµÄ¹¤×÷·½Ê½¡£

ÔÚÌØÐÔ·ÖÖ§Öй¤×÷

Èç¹ûÄãÏëÏòÏîÄ¿ÖÐÕûºÏһЩж«Î÷£¬×îºÃ½«ÕâЩ³¢ÊÔ¾ÖÏÞÔÚÌØÐÔ·ÖÖ§¡ª¡ªÒ»ÖÖͨ³£ÓÃÀ´³¢ÊÔж«Î÷µÄÁÙʱ·ÖÖ§ÖС£ ÕâÑù±ãÓÚµ¥¶Àµ÷Õû²¹¶¡£¬Èç¹ûÓöµ½ÎÞ·¨Õý³£¹¤×÷µÄÇé¿ö£¬¿ÉÒÔÏȲ»Óùܣ¬µÈµ½ÓÐʱ¼äµÄʱºòÔÙÀ´´¦Àí¡£ Èç¹ûÄã»ùÓÚÄãËù³¢ÊÔ½øÐй¤×÷µÄÌØÐÔΪ·ÖÖ§´´½¨Ò»¸ö¼òµ¥µÄÃû×Ö£¬±ÈÈç ruby_client »òÕß¾ßÓÐÀàËÆÃèÊöÐÔµÄÆäËûÃû×Ö£¬ÕâÑù¼´Ê¹Äã±ØÐëÔÝʱÅׯúËü£¬ÒÔºó»ØÀ´Ê±Ò²²»»áÍü¼Ç¡£ ÏîÄ¿µÄά»¤ÕßÒ»°ã»¹»áΪÕâЩ·ÖÖ§¸½´øÃüÃû¿Õ¼ä£¬±ÈÈç sc/ruby_client£¨ÆäÖÐ sc Êǹ±Ï׸ÃÏ×÷µÄÈËÃû³ÆµÄ¼òд£©¡£ ÄãÓ¦¸Ã¼ÇµÃ£¬¿ÉÒÔʹÓÃÈçÏ·½Ê½»ùÓÚ master ·ÖÖ§½¨Á¢ÌØÐÔ·ÖÖ§£º

$ git branch sc/ruby_client master

»òÕßÈç¹ûÄãͬʱÏëÁ¢¿ÌÇл»µ½Ð·ÖÖ§Éϵϰ£¬¿ÉÒÔʹÓà checkout -b Ñ¡Ï

$ git checkout -b sc/ruby_client master

ÏÖÔÚÄãÒѾ­×¼±¸ºÃ½«±ðÈ˹±Ï׵Ť×÷¼ÓÈëµ½Õâ¸öÌØÐÔ·ÖÖ§£¬²¢¿¼ÂÇÊÇ·ñ½«ÆäºÏ²¢µ½³¤ÆÚ·ÖÖ§ÖÐÈ¥ÁË¡£

Ó¦ÓÃÀ´×ÔÓʼþµÄ²¹¶¡

Èç¹ûÄãͨ¹ýµç×ÓÓʼþÊÕµ½ÁËÒ»¸öÐèÒªÕûºÏ½øÈëÏîÄ¿µÄ²¹¶¡£¬ÄãÐèÒª½«ÆäÓ¦Óõ½ÌØÐÔ·ÖÖ§ÖнøÐÐÆÀ¹À¡£ ÓÐÁ½ÖÖÓ¦ÓøÃÖÖ²¹¶¡µÄ·½·¨£ºÊ¹Óà git apply£¬»òÕßʹÓà git am¡£

ʹÓà apply ÃüÁîÓ¦Óò¹¶¡

Èç¹ûÄãÊÕµ½ÁËÒ»¸öʹÓà git diff »ò Unix diff ÃüÁ²»ÍƼöʹÓÃÕâÖÖ·½Ê½£¬¾ßÌå¼ûÏÂÒ»½Ú£©´´½¨µÄ²¹¶¡£¬¿ÉÒÔʹÓà git apply ÃüÁîÀ´Ó¦Óᣠ¼ÙÉèÄ㽫²¹¶¡±£´æÔÚÁË /tmp/patch-ruby-client.patch ÖУ¬¿ÉÒÔÕâÑùÓ¦Óò¹¶¡£º

$ git apply /tmp/patch-ruby-client.patch

Õâ»áÐ޸Ť×÷Ŀ¼ÖеÄÎļþ¡£ ËüÓëÔËÐÐ patch -p1 ÃüÁîÀ´Ó¦Óò¹¶¡¼¸ºõÊǵÈЧµÄ£¬µ«ÊÇÕâÖÖ·½Ê½¸ü¼ÓÑϸñ£¬Ïà¶ÔÓÚ patch À´Ëµ£¬ËüÄܹ»½ÓÊܵÄÄ£ºýÆ¥Åä¸üÉÙ¡£ ËüÒ²Äܹ»´¦Àí git diff ¸ñʽÎļþËùÃèÊöµÄÎļþÌí¼Ó¡¢É¾³ýºÍÖØÃüÃû²Ù×÷£¬¶ø patch Ôò²»»á¡£ ×îºó£¬git apply ÃüÁî²ÉÓÃÁËÒ»ÖÖ¡°È«²¿Ó¦Ó㬷ñÔò¾ÍÈ«²¿³·Ïú£¨apply all or abort all£©¡±µÄÄ£ÐÍ£¬¼´²¹¶¡Ö»ÓÐÈ«²¿ÄÚÈݶ¼±»Ó¦ÓúÍÍêÈ«²»±»Ó¦ÓÃÁ½¸ö״̬£¬¶ø patch ¿ÉÄܻᵼÖ²¹¶¡Îļþ±»²¿·ÖÓ¦Óã¬×îºóʹÄãµÄ¹¤×÷Ŀ¼±£³ÖÔÚÒ»¸ö±È½ÏÆæ¹ÖµÄ״̬¡£ ×ÜÌåÀ´¿´£¬git apply ÃüÁîÒª±È patch ½÷É÷µÃ¶à¡£ ²¢ÇÒ£¬Ëü²»»áΪÄã´´½¨Ìá½»¡ª¡ªÔÚÔËÐÐÖ®ºó£¬ÄãÐèÒªÊÖ¶¯ÔÝ´æ²¢Ìá½»²¹¶¡ËùÒýÈëµÄ¸ü¸Ä¡£

ÔÚʵ¼ÊÓ¦Óò¹¶¡Ç°£¬Ä㻹¿ÉÒÔʹÓà git apply À´¼ì²é²¹¶¡ÊÇ·ñ¿ÉÒÔ˳ÀûÓ¦Ó᪡ª¼´¶Ô²¹¶¡ÔËÐÐ git apply --check ÃüÁ

$ git apply --check 0001-seeing-if-this-helps-the-gem.patch
error: patch failed: ticgit.gemspec:1
error: ticgit.gemspec: patch does not apply

Èç¹ûûÓвúÉúÊä³ö£¬Ôò¸Ã²¹¶¡¿ÉÒÔ˳ÀûÓ¦ÓᣠÈç¹û¼ì²éʧ°ÜÁË£¬¸ÃÃüÁ»áÒÔÒ»¸ö·ÇÁãµÄ״̬Í˳ö£¬ËùÒÔÐèҪʱÄãÒ²¿ÉÒÔÔڽű¾ÖÐʹÓÃËü¡£

ʹÓà am ÃüÁîÓ¦Óò¹¶¡

Èç¹û²¹¶¡µÄ¹±Ï×ÕßÒ²ÊÇÒ»¸ö Git Óû§£¬²¢ÇÒÆäÄÜÊìÁ·Ê¹Óà format-patch ÃüÁîÀ´Éú³É²¹¶¡£¬ÕâÑùµÄ»°ÄãµÄ¹¤×÷»á±äµÃ¸ü¼ÓÇáËÉ£¬ÒòΪÕâÖÖ²¹¶¡Öаüº¬ÁË×÷ÕßÐÅÏ¢ºÍÌá½»ÐÅÏ¢¹©Äã²Î¿¼¡£ Èç¹û¿ÉÄܵϰ£¬Çë¹ÄÀø¹±Ï×ÕßʹÓà format-patch ¶ø²»ÊÇ diff À´ÎªÄãÉú³É²¹¶¡¡£ ¶øÖ»ÓжÔÀÏʽµÄ²¹¶¡£¬Äã²Å±ØÐëʹÓà git apply ÃüÁî¡£

ÒªÓ¦ÓÃÒ»¸öÓÉ format-patch ÃüÁîÉú³ÉµÄ²¹¶¡£¬ÄãÓ¦¸ÃʹÓà git am ÃüÁî¡£ ´Ó¼¼ÊõµÄ½Ç¶È¿´£¬git am ÊÇΪÁ˶ÁÈ¡ mbox Îļþ¶ø¹¹½¨µÄ£¬mbox ÊÇÒ»ÖÖÓÃÀ´ÔÚµ¥¸öÎı¾ÎļþÖд洢һ¸ö»ò¶à¸öµç×ÓÓʼþÏûÏ¢µÄ¼òµ¥´¿Îı¾¸ñʽ¡£ Æä´óÖ¸ñʽÈçÏÂËùʾ£º

From 330090432754092d704da8e76ca5c05c198e71a8 Mon Sep 17 00:00:00 2001
From: Jessica Smith <jessica@example.com>
Date: Sun, 6 Apr 2008 10:17:23 -0700
Subject: [PATCH 1/2] add limit to log function

Limit log functionality to the first 20

 

ÕâÆäʵ¾ÍÊÇÄãÇ°Ãæ¿´µ½µÄ format-patch ÃüÁîÊä³öµÄ¿ªÊ¼¼¸ÐС£ ¶øÍ¬Ê±ËüÒ²ÊÇÓÐЧµÄ mbox µç×ÓÓʼþ¸ñʽ¡£ Èç¹ûÓÐÈËʹÓà git send-email ÃüÁ²¹¶¡ÒÔµç×ÓÓʼþµÄÐÎʽ·¢Ë͸øÄ㣬Äã±ã¿ÉÒÔ½«ËüÏÂÔØÎª mbox ¸ñʽµÄÎļþ£¬Ö®ºó½« git am ÃüÁîÖ¸Ïò¸ÃÎļþ£¬Ëü»áÓ¦ÓÃÆäÖаüº¬µÄËùÓв¹¶¡¡£ Èç¹ûÄãËùʹÓõÄÓʼþ¿Í»§¶ËÄܹ»Í¬Ê±½«¶à·âÓʼþ±£´æÎª mbox ¸ñʽµÄÎļþ£¬ÄãÉõÖÁÄܹ»½«Ò»ÏµÁв¹¶¡´ò°üΪµ¥¸ö mbox Îļþ£¬²¢ÀûÓà git am ÃüÁËüÃÇÒ»´ÎÐÔÈ«²¿Ó¦Óá£

È»¶ø£¬Èç¹û¹±Ï×Õß½« format-patch Éú³ÉµÄ²¹¶¡ÎļþÉÏ´«µ½ÀàËÆ Request Ticket µÄÈÎÎñ´¦Àíϵͳ£¬Äã¿ÉÒÔÏȽ«Æä±£´æµ½±¾µØ£¬Ö®ºóͨ¹ý git am À´Ó¦Óò¹¶¡£º

$ git am 0001-limit-log-function.patch
Applying: add limit to log function

Äã»á¿´µ½²¹¶¡±»Ë³ÀûµØÓ¦Ó㬲¢ÇÒΪÄã×Ô¶¯´´½¨ÁËÒ»¸öеÄÌá½»¡£ ÆäÖеÄ×÷ÕßÐÅÏ¢À´×ÔÓÚµç×ÓÓʼþÍ·²¿µÄ From ºÍ Date ×ֶΣ¬Ìá½»ÏûÏ¢ÔòÈ¡×Ô Subject ºÍÓʼþÕýÎÄÖв¹¶¡Ö®Ç°µÄÄÚÈÝ¡£ ±ÈÈ磬ӦÓÃÉÏÃæÄǸö mbox ʾÀýºóÉú³ÉµÄÌá½»ÊÇÕâÑùµÄ£º

$ git log --pretty=fuller -1
commit 6c5e70b984a60b3cecd395edd5b48a7575bf58e0
Author: Jessica Smith <jessica@example.com>
AuthorDate: Sun Apr 6 10:17:23 2008 -0700
Commit: Scott Chacon <schacon@gmail.com>
CommitDate: Thu Apr 9 09:19:06 2009 -0700

add limit to log function

Limit log functionality to the first 20

ÆäÖÐ Commit ÐÅÏ¢±íʾµÄÊÇÓ¦Óò¹¶¡µÄÈ˺ÍÓ¦Óò¹¶¡µÄʱ¼ä¡£ Author ÐÅÏ¢Ôò±íʾ²¹¶¡µÄÔ­×÷ÕߺÍÔ­±¾µÄ´´½¨Ê±¼ä¡£

µ«ÊÇ£¬ÓÐʱºòÎÞ·¨Ë³ÀûµØÓ¦Óò¹¶¡¡£ ÕâÒ²ÐíÊÇÒòΪÄãµÄÖ÷·ÖÖ§ºÍ´´½¨²¹¶¡µÄ·ÖÖ§Ïà²î½Ï¶à£¬Ò²ÓпÉÄÜÊÇÒòΪÕâ¸ö²¹¶¡ÒÀÀµÓÚÆäËûÄãÉÐδӦÓõIJ¹¶¡¡£ ÕâÖÖÇé¿öÏ£¬git am ½ø³Ì½«»á±¨´í²¢ÇÒѯÎÊÄãÒª×öʲô£º

$ git am 0001-seeing-if-this-helps-the-gem.patch
Applying: seeing if this helps the gem
error: patch failed: ticgit.gemspec:1
error: ticgit.gemspec: patch does not apply
Patch failed at 0001.
When you have resolved this problem run "git am --resolved".
If you would prefer to skip this patch, instead run "git am --skip".
To restore the original branch and stop patching run "git am --abort".

¸ÃÃüÁ»áÔÚËùÓгöÏÖÎÊÌâµÄÎļþÄÚ¼ÓÈë³åÍ»±ê¼Ç£¬¾ÍºÍ·¢Éú³åÍ»µÄºÏ²¢»ò±ä»ù²Ù×÷Ò»Ñù¡£ ¶øÄã½â¾öÎÊÌâµÄÊֶκܴó³Ì¶ÈÉÏÒ²ÊÇÒ»ÑùµÄ¡ª¡ª¼´ÊÖ¶¯±à¼­ÄÇЩÎļþÀ´½â¾ö³åÍ»£¬ÔÝ´æÐµÄÎļþ£¬Ö®ºóÔËÐÐ git am --resolved ¼ÌÐøÓ¦ÓÃÏÂÒ»¸ö²¹¶¡£º

$ (fix the file)
$ git add ticgit.gemspec
$ git am --resolved
Applying: seeing if this helps the gem

Èç¹ûÄãÏ£Íû Git Äܹ»³¢ÊÔÒÔ¸ü¼ÓÖÇÄܵķ½Ê½½â¾ö³åÍ»£¬Äã¿ÉÒÔ¶ÔÆä´«µÝ -3 Ñ¡ÏîÀ´Ê¹ Git ³¢ÊÔ½øÐÐÈý·½ºÏ²¢¡£ ¸ÃÑ¡ÏîĬÈϲ¢Ã»Óдò¿ª£¬ÒòΪÈç¹ûÓÃÓÚ´´½¨²¹¶¡µÄÌá½»²¢²»ÔÚÄãµÄ°æ±¾¿âÄڵϰ£¬ÕâÑù×öÊÇûÓÐÓô¦µÄ¡£ ¶øÈç¹ûÄãȷʵÓÐÄǸöÌá½»µÄ»°¡ª¡ª±ÈÈç²¹¶¡ÊÇ»ùÓÚij¸ö¹«¹²Ìá½»µÄ¡ª¡ªÄÇôͨ³£ -3 Ñ¡Ïî¶ÔÓÚÓ¦ÓÃÓгåÍ»µÄ²¹¶¡ÊǸü¼ÓÃ÷ÖǵÄÑ¡Ôñ¡£

$ git am -3 0001-seeing-if-this-helps-the-gem.patch
Applying: seeing if this helps the gem
error: patch failed: ticgit.gemspec:1
error: ticgit.gemspec: patch does not apply
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
No changes -- Patch already applied.

±ÈÈçÉÏÃæÕâÖÖÇé¿ö£¬ÎÒÔÚ֮ǰÒѾ­Ó¦ÓùýͬÑùµÄ²¹¶¡¡£ Èç¹ûûÓÐ -3 Ñ¡ÏîµÄ»°£¬Õâ¿´ÆðÀ´¾ÍÏñÊÇ´æÔÚÒ»¸ö³åÍ»¡£

Èç¹ûÄãÕýÔÚÀûÓÃÒ»¸ö mbox ÎļþÓ¦Óöà¸ö²¹¶¡£¬Ò²¿ÉÒÔÔÚ½»»¥Ä£Ê½ÏÂÔËÐÐ am ÃüÁÕâÑùÔÚÿ¸ö²¹¶¡Ö®Ç°£¬Ëü»áͣסѯÎÊÄãÊÇ·ñÒªÓ¦Óøò¹¶¡£º

$ git am -3 -i mbox
Commit Body is:
--------------------------
seeing if this helps the gem
--------------------------
Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all

ÕâÔÚÄã±£´æµÄ²¹¶¡½Ï¶àʱºÜºÃÓã¬ÒòΪÄã¿ÉÒÔÔÚÓ¦ÓÃ֮ǰ²é¿´ÍüµôÄÚÈݵIJ¹¶¡£¬²¢ÇÒÌø¹ýÒѾ­Ó¦ÓùýµÄ²¹¶¡¡£

µ±ÓëÄãµÄÌØÐÔÏà¹ØµÄËùÓв¹¶¡¶¼±»Ó¦Óò¢Ìá½»µ½·ÖÖ§ÖÐÖ®ºó£¬Äã¾Í¿ÉÒÔÑ¡ÔñÊÇ·ñÒÔ¼°ÈçºÎ½«ÆäÕûºÏµ½¸ü³¤ÆÚµÄ·ÖÖ§ÖÐÈ¥ÁË¡£

¼ì³öÔ¶³Ì·ÖÖ§

Èç¹ûÄãµÄ¹±Ï×Õß½¨Á¢ÁË×Ô¼ºµÄ°æ±¾¿â£¬²¢ÇÒÏòÆäÖÐÍÆËÍÁËÈô¸ÉÐ޸ģ¬Ö®ºó½«°æ±¾¿âµÄ URL ºÍ°üº¬¸ü¸ÄµÄÔ¶³Ì·ÖÖ§·¢Ë͸øÄ㣬ÄÇôÄã¿ÉÒÔ½«ÆäÌí¼ÓΪһ¸öÔ¶³Ì·ÖÖ§£¬²¢ÇÒÔÚ±¾µØ½øÐкϲ¢¡£

±ÈÈç Jessica ÏòÄã·¢ËÍÁËÒ»·âµç×ÓÓʼþ£¬ÄÚÈÝÊÇÔÚËýµÄ°æ±¾¿âÖÐµÄ ruby-client ·ÖÖ§ÖÐÓÐÒ»¸öºÜ²»´íµÄй¦ÄÜ£¬ÎªÁ˲âÊԸù¦ÄÜ£¬Äã¿ÉÒÔ½«ÆäÌí¼ÓΪһ¸öÔ¶³Ì·ÖÖ§£¬²¢ÔÚ±¾µØ¼ì³ö£º

$ git remote add jessica git://github.com/jessica/myproject.git
$ git fetch jessica
$ git checkout -b rubyclient jessica/ruby-client

Èç¹ûËýÔٴη¢Óʼþ˵ÁíÒ»¸ö·ÖÖ§Öаüº¬ÁíÒ»¸öÓÅÐ㹦ÄÜ£¬ÒòΪ֮ǰÒѾ­ÉèÖúÃÔ¶³Ì·ÖÖ§ÁË£¬Äã¾Í¿ÉÒÔÖ±½Ó½øÐÐץȡ¼°¼ì³ö²Ù×÷¡£

Õâ¶ÔÓÚÓëËûÈ˳¤ÆÚºÏ×÷¹¤×÷À´ËµºÜÓÐÓᣠ¶ø¶ÔÓÚÌá½»²¹¶¡ÆµÂʽÏСµÄ¹±Ï×Õߣ¬Ïà¶ÔÓÚÿ¸öÈËά»¤×Ô¼ºµÄ·þÎñÆ÷£¬²»¶ÏÔöɾԶ³Ì·ÖÖ§µÄ×ö·¨£¬Ê¹Óõç×ÓÓʼþÀ´½ÓÊÕ¿ÉÄÜ»á±È½Ïʡʱ¡£ ¿öÇÒÄãÒ²²»»áÏëÒª¼ÓÈëÊý°Ù¸öÖ»ÌṩһÁ½¸ö²¹¶¡µÄÔ¶³Ì·ÖÖ§¡£ È»¶ø£¬½Å±¾ºÍÍйܷþÎñÔÚÒ»¶¨³Ì¶ÈÉÏ¿ÉÒÔ¼ò»¯ÕâЩ¹¤×÷¡ª¡ªÕâºÜ´ó³Ì¶ÈÉÏÒÀÀµÓÚÄãºÍÄãµÄ¹±Ï×Õß¿ª·¢µÄ·½Ê½¡£

ÕâÖÖ·½Ê½µÄÁíÒ»ÖÖÓŵãÊÇÄã¿ÉÒÔͬʱµÃµ½Ìá½»ÀúÊ·¡£ ËäÈ»´úÂëºÏ²¢ÖпÉÄÜ»á³öÏÖÎÊÌ⣬µ«ÊÇÄãÄÜ»ñÖªËûÈ˵Ť×÷ÊÇ»ùÓÚÄãµÄÀúÊ·ÖеľßÌåÄÄÒ»¸öλÖã»ËùÒÔGit »áĬÈϽøÐÐÈý·½ºÏ²¢£¬²»ÐèÒªÌṩ -3 Ñ¡ÏÄãÒ²²»ÐèÒªµ£ÐIJ¹¶¡ÊÇ»ùÓÚij¸öÄãÎÞ·¨·ÃÎʵÄÌá½»Éú³ÉµÄ¡£

¶ÔÓڷdzÖÐøÐԵĺÏ×÷£¬Èç¹ûÄãÒÀÈ»ÏëÒªÒÔÕâÖÖ·½Ê½À­È¡Êý¾ÝµÄ»°£¬Äã¿ÉÒÔ¶ÔÔ¶³Ì°æ±¾¿âµÄ URL µ÷Óà git pull ÃüÁî¡£ Õâ»áÖ´ÐÐÒ»¸öÒ»´ÎÐÔµÄץȡ£¬¶ø²»»á½«¸Ã URL ´æÎªÔ¶³ÌÒýÓãº

$ git pull https://github.com/onetimeguy/project
From https://github.com/onetimeguy/project
* branch HEAD -> FETCH_HEAD
Merge made by recursive.

È·¶¨ÒýÈëÁËÄÄЩ¶«Î÷

ÄãÒѾ­ÓÐÁËÒ»¸ö°üº¬ÆäËûÈ˹±Ï×µÄÌØÐÔ·ÖÖ§¡£ ÏÖÔÚÄã¿ÉÒÔ¾ö¶¨ÈçºÎ´¦ÀíËüÃÇÁË¡£ ±¾½Ú»Ø¹ËÁËÈô¸ÉÃüÁÒÔ±ãÓÚÄã¼ì²éÈô½«ÆäºÏ²¢ÈëÖ÷·ÖÖ§ËùÒýÈëµÄ¸ü¸Ä¡£

Ò»°ãÀ´Ëµ£¬ÄãÓ¦¸Ã¶Ô¸Ã·ÖÖ§ÖÐËùÓÐ master ·ÖÖ§ÉÐδ°üº¬µÄÌá½»½øÐмì²é¡£ ͨ¹ýÔÚ·ÖÖ§Ãû³ÆÇ°¼ÓÈë --not Ñ¡ÏÄã¿ÉÒÔÅųý master ·ÖÖ§ÖеÄÌá½»¡£ ÕâºÍÎÒÃÇ֮ǰʹÓÃµÄ master..contrib ¸ñʽÊÇÒ»ÑùµÄ¡£ ¼ÙÉè¹±Ï×ÕßÏòÄã·¢ËÍÁËÁ½¸ö²¹¶¡£¬Îª´ËÄã´´½¨ÁËÒ»¸öÃû½Ð contrib µÄ·ÖÖ§²¢ÔÚÆäÉÏÓ¦Óò¹¶¡£¬Äã¿ÉÒÔÔËÐУº

$ git log contrib --not master
commit 5b6235bd297351589efc4d73316f0a68d484f118
Author: Scott Chacon <schacon@gmail.com>
Date: Fri Oct 24 09:53:59 2008 -0700

seeing if this helps the gem

commit 7482e0d16d04bea79d0dba8988cc78df655f16a0
Author: Scott Chacon <schacon@gmail.com>
Date: Mon Oct 22 19:38:36 2008 -0700

updated the gemspec to hopefully work better

Èç¹ûÒª²é¿´Ã¿´ÎÌá½»ËùÒýÈëµÄ¾ßÌåÐ޸ģ¬ÄãÓ¦¸Ã¼ÇµÃ¿ÉÒÔ¸ø git log ÃüÁî´«µÝ -p Ñ¡ÏÕâÑùËü»áÔÚÿ´ÎÌá½»ºóÃæ¸½¼Ó¶ÔÓ¦µÄ²îÒ죨diff£©¡£

¶øÒª²é¿´½«¸ÃÌØÐÔ·ÖÖ§ÓëÁíÒ»¸ö·ÖÖ§ºÏ²¢µÄÍêÕû diff£¬Äã¿ÉÄÜÐèҪʹÓÃÒ»¸öÓÐÐ©Ææ¹ÖµÄ¼¼ÇÉÀ´µÃµ½ÕýÈ·µÄ½á¹û¡£ Äã¿ÉÄÜ»áÏëµ½ÕâÖÖ·½Ê½£º

$ git diff master

Õâ¸öÃüÁî»áÊä³öÒ»¸ö diff£¬µ«Ëü¿ÉÄܲ¢²»ÊÇÎÒÃÇÏëÒªµÄ¡£ Èç¹ûÔÚÄã´´½¨ÌØÐÔ·ÖÖ§Ö®ºó£¬master ·ÖÖ§ÏòÇ°ÒÆ¶¯ÁË£¬Äã»ñµÃµÄ½á¹û¾Í»áÏÔµÃÓÐЩ²»¶Ô¡£ ÕâÊÇÒòΪ Git »áÖ±½Ó½«¸ÃÌØÐÔ·ÖÖ§Óë master ·ÖÖ§µÄ×îÐÂÌá½»¿ìÕÕ½øÐбȽϡ£ ±ÈÈç˵ÄãÔÚ master ·ÖÖ§ÖÐÏòij¸öÎļþÌí¼ÓÁËÒ»ÐÐÄÚÈÝ£¬ÄÇôֱ½Ó±È¶Ô×îпìÕյĽá¹û¿´ÉÏÈ¥¾ÍÏñÊÇÄãÔÚÌØÐÔ·ÖÖ§Öн«ÕâÒ»ÐÐɾ³ýÁË¡£

Èç¹û master ·ÖÖ§ÊÇÄãµÄÌØÐÔ·ÖÖ§µÄÖ±½Ó׿ÏÈ£¬ÆäʵÊÇûÓÐÈκÎÎÊÌâµÄ£»µ«ÊÇÒ»µ©Á½¸ö·ÖÖ§µÄÀúÊ·²úÉúÁ˷ֲ棬ÉÏÊö±È¶Ô²úÉúµÄ diff ¿´ÉÏÈ¥¾ÍÏñÊǽ«ÌØÐÔ·ÖÖ§ÖÐËùÓеÄж«Î÷¼ÓÈ룬²¢ÇÒ½« master ·ÖÖ§Ëù¶ÀÓеĶ«Î÷ɾ³ý¡£

¶øÄãÕæÕýÏëÒª¼ì²éµÄ¶«Î÷£¬Êµ¼ÊÉϽö½öÊÇÌØÐÔ·ÖÖ§ËùÌí¼ÓµÄ¸ü¸Ä¡ª¡ªÒ²¾ÍÊǸ÷ÖÖ§Óë master ·ÖÖ§ºÏ²¢ËùÒªÒýÈëµÄ¹¤×÷¡£ Òª´ïµ½´ËÄ¿µÄ£¬ÄãÐèÒªÈà Git ¶ÔÌØÐÔ·ÖÖ§ÉÏ×îеÄÌá½»Óë¸Ã·ÖÖ§Óë master ·ÖÖ§µÄÊ׸ö¹«¹²×æÏȽøÐбȽϡ£

´Ó¼¼ÊõµÄ½Ç¶È½²£¬Äã¿ÉÒÔÒÔÊÖ¹¤µÄ·½Ê½ÕÒ³ö¹«¹²×æÏÈ£¬²¢¶ÔÆäÏÔʽÔËÐÐ diff ÃüÁ

$ git merge-base contrib master
36c7dba2c95e6bbb78dfa822519ecfec6e1ca649
$ git diff 36c7db

È»¶ø£¬ÕâÖÖ×ö·¨±È½ÏÂé·³£¬ËùÒÔ Git ÌṩÁËÒ»ÖֱȽϱã½ÝµÄ·½Ê½£ºÈýµãÓï·¨¡£ ¶ÔÓÚ diff ÃüÁîÀ´Ëµ£¬Äã¿ÉÒÔͨ¹ý°Ñ ... ÖÃÓÚÁíÒ»¸ö·ÖÖ§ÃûºóÀ´¶Ô¸Ã·ÖÖ§µÄ×îÐÂÌá½»ÓëÁ½¸ö·ÖÖ§µÄ¹²Í¬×æÏȽøÐбȽϣº

$ git diff master...contrib

¸ÃÃüÁî½ö»áÏÔʾ×Ôµ±Ç°ÌØÐÔ·ÖÖ§Óë master ·ÖÖ§µÄ¹²Í¬×æÏÈÆð£¬¸Ã·ÖÖ§ÖеŤ×÷¡£ Õâ¸öÓï·¨ºÜÓÐÓã¬Ó¦¸ÃÀμǡ£

½«¹±Ï׵Ť×÷ÕûºÏ½øÀ´

µ±ÌØÐÔ·ÖÖ§ÖÐËùÓеŤ×÷¶¼ÒѾ­×¼±¸ºÃÕûºÏ½øÈë¸ü¿¿½üÖ÷ÏߵķÖ֧ʱ£¬½ÓÏÂÀ´µÄÎÊÌâ¾ÍÊÇÈçºÎ½øÐÐÕûºÏÁË¡£ ´ËÍ⣬»¹ÓÐÒ»¸öÎÊÌâÊÇ£¬ÄãÏëʹÓÃÔõÑùµÄ×ÜÌ幤×÷Á÷À´Î¬»¤ÄãµÄÏîÄ¿£¿ ÄãµÄÑ¡ÔñÓкܶ࣬ÎÒÃÇ»á½éÉÜÆäÖеÄÒ»²¿·Ö¡£

ºÏ²¢¹¤×÷Á÷

Ò»Öַdz£¼òµ¥µÄ¹¤×÷Á÷»áÖ±½Ó½«¹¤×÷ºÏ²¢½øÈë master ·ÖÖ§¡£ ÔÚÕâÖÖÇé¿öÏ£¬master ·ÖÖ§°üº¬µÄ´úÂëÊÇ»ù±¾Îȶ¨µÄ¡£ µ±ÄãÍê³Éij¸öÌØÐÔ·ÖÖ§µÄ¹¤×÷£¬»òÉóºËͨ¹ýÁËÆäËûÈËËù¹±Ï׵Ť×÷ʱ£¬Äã»á½«ÆäºÏ²¢½øÈë master ·ÖÖ§£¬Ö®ºó½«ÌØÐÔ·Ö֧ɾ³ý£¬Èç´Ë·´¸´¡£ Èç¹ûÎÒÃǵİ汾¿â°üº¬ÀàËÆ °üº¬Èô¸ÉÌØÐÔ·ÖÖ§µÄÌá½»ÀúÊ·¡£ µÄÁ½¸öÃû³Æ·Ö±ðΪ ruby_client ºÍ php_client µÄ·ÖÖ§£¬²¢ÇÒÎÒÃÇÏȺϲ¢ ruby_client ·ÖÖ§£¬Ö®ºóºÏ²¢ php_client ·ÖÖ§£¬ÄÇôÌá½»ÀúÊ·×îºó»á±ä³É ºÏ²¢ÌØÐÔ·ÖÖ§Ö®ºó¡£ µÄÑù×Ó¡£

Figure 73. °üº¬Èô¸ÉÌØÐÔ·ÖÖ§µÄÌá½»ÀúÊ·¡£

Figure 74. ºÏ²¢ÌØÐÔ·ÖÖ§Ö®ºó¡£

ÕâÒ²ÐíÊÇ×î¼òµ¥µÄ¹¤×÷Á÷ÁË£¬µ«Êǵ±ÏîÄ¿¸ü´ó£¬»ò¸üÎȶ¨£¬Äã¶Ô×Ô¼ºËùÒýÈëµÄ¹¤×÷¸ü¼ÓÔÚÒâʱ£¬Ëü¿ÉÄÜ»á´øÀ´ÎÊÌâ¡£

Èç¹ûÄãµÄÏîÄ¿·Ç³£ÖØÒª£¬Äã¿ÉÄÜ»áʹÓÃÁ½½×¶ÎºÏ²¢Ñ­»·¡£ ÔÚÕâÖÖÇé¿öÏ£¬Äã»áά»¤Á½¸ö³¤ÆÚ·ÖÖ§£¬·Ö±ðÊÇ master ºÍ develop£¬master ·ÖÖ§Ö»»áÔÚÒ»¸ö·Ç³£Îȶ¨µÄ°æ±¾·¢²¼Ê±²Å»á¸üУ¬¶øËùÓеÄдúÂë»áÊ×ÏÈÕûºÏ½øÈë develop ·ÖÖ§¡£ Ä㶨ÆÚ½«ÕâÁ½¸ö·ÖÖ§ÍÆË͵½¹«¹²°æ±¾¿âÖС£ ÿ´ÎÐèÒªºÏ²¢ÐµÄÌØÐÔ·Ö֧ʱ£¨ºÏ²¢ÌØÐÔ·Ö֧ǰ¡££©£¬Äã¶¼Ó¦¸ÃºÏ²¢½øÈë develop ·ÖÖ§£¨ºÏ²¢ÌØÐÔ·ÖÖ§ºó¡££©£»µ±´ò±êÇ©·¢²¼µÄʱºò£¬Äã»á½« master ·ÖÖ§¿ì½øµ½ÒѾ­Îȶ¨µÄ develop ·ÖÖ§£¨Ò»´Î·¢²¼Ö®ºó¡££©¡£

Figure 75. ºÏ²¢ÌØÐÔ·Ö֧ǰ¡£

Figure 76. ºÏ²¢ÌØÐÔ·ÖÖ§ºó¡£

Figure 77. Ò»´Î·¢²¼Ö®ºó¡£

ÕâÑùµ±ÈËÃǿˡÄãÏîÄ¿µÄ°æ±¾¿âºó£¬¼È¿ÉÒÔ¼ì³ö master ·ÖÖ§ÒÔ¹¹½¨×îеÄÎȶ¨°æ±¾²¢±£³Ö¸üУ¬Ò²¿ÉÒÔ¼ì³ö°üº¬¸ü¶àж«Î÷µÄ develop ·ÖÖ§¡£ ÄãÒ²¿ÉÒÔÀ©Õ¹Õâ¸ö¸ÅÄά»¤Ò»¸ö½«ËùÓй¤×÷ºÏ²¢µ½Ò»ÆðµÄÕûºÏ·ÖÖ§¡£ µ±¸Ã·ÖÖ§µÄ´úÂëÎȶ¨²¢Í¨¹ý²âÊÔÖ®ºó£¬½«ÆäºÏ²¢½øÈë develop ·ÖÖ§£»¾­¹ýÒ»¶Îʱ¼ä£¬È·ÈÏÆäÎȶ¨Ö®ºó£¬½«ÆäÒÔ¿ì½øµÄÐÎʽ²¢Èë master ·ÖÖ§¡£

´óÏîÄ¿ºÏ²¢¹¤×÷Á÷

Git ÏîÄ¿°üº¬Ëĸö³¤ÆÚ·ÖÖ§£ºmaster¡¢next£¬ÓÃÓÚй¤×÷µÄ pu£¨proposed updates£©ºÍÓÃÓÚά»¤ÐÔÏòºóÒÆÖ²¹¤×÷£¨maintenance backports£©µÄ maint ·ÖÖ§¡£ ¹±Ï×ÕßµÄй¤×÷»áÒÔÀàËÆÖ®Ç°Ëù½éÉܵķ½Ê½ÊÕÈëÌØÐÔ·ÖÖ§ÖУ¨¼û ¹ÜÀí¸´ÔÓµÄһϵÁнÓÊÕ¹±Ï׵į½ÐÐÌØÐÔ·ÖÖ§¡££©¡£ Ö®ºó¶ÔÌØÐÔ·ÖÖ§½øÐвâÊÔÆÀ¹À£¬¼ì²éÆäÊÇ·ñÒѾ­Äܹ»ºÏ²¢£¬»òÕßÈÔÐèÒª¸ü¶à¹¤×÷¡£ °²È«µÄÌØÐÔ·ÖÖ§»á±»ºÏ²¢Èë next ·ÖÖ§£¬Ö®ºó¸Ã·ÖÖ§»á±»ÍÆËÍʹµÃËùÓÐÈ˶¼¿ÉÒÔ³¢ÊÔÕûºÏµ½Ò»ÆðµÄÌØÐÔ¡£

Figure 78. ¹ÜÀí¸´ÔÓµÄһϵÁнÓÊÕ¹±Ï׵į½ÐÐÌØÐÔ·ÖÖ§¡£

Èç¹ûÌØÐÔ·ÖÖ§ÐèÒª¸ü¶à¹¤×÷£¬ËüÔò»á±»²¢Èë pu ·ÖÖ§¡£ µ±ËüÃÇÍêÈ«Îȶ¨Ö®ºó£¬»á±»Ôٴβ¢Èë master ·ÖÖ§¡£ ÕâÒâζ×Å master ·Ö֧ʼÖÕÔÚ½øÐÐ¿ì½ø£¬next ·Ö֧ż¶û»á±»±ä»ù£¬¶ø pu ·ÖÖ§µÄ±ä»ù±È½ÏƵ·±£º

Figure 79. ½«¹±Ï×µÄÌØÐÔ·ÖÖ§²¢È볤ÆÚÕûºÏ·ÖÖ§¡£

µ±ÌØÐÔ·ÖÖ§×îÖÕ±»²¢Èë master ·ÖÖ§ºó£¬±ã»á±»´Ó°æ±¾¿âÖÐɾ³ýµô¡£ Git ÏîÄ¿»¹ÓÐÒ»¸ö´ÓÉÏÒ»´Î·¢²¼ÖÐÅÉÉú³öÀ´µÄ maint ·ÖÖ§À´ÌṩÏòºóÒÆÖ²¹ýÀ´µÄ²¹¶¡ÒÔ¹©·¢²¼Î¬»¤¸üС£ Òò´Ë£¬µ±Äã¿Ë¡ Git µÄ°æ±¾¿âÖ®ºó£¬¾Í»áÓÐËĸö¿É·Ö±ðÆÀ¹À¸ÃÏîÄ¿¿ª·¢µÄ²»Í¬½×¶ÎµÄ¿É¼ì³öµÄ·ÖÖ§£¬¼ì³öÄĸö·ÖÖ§£¬È¡¾öÓÚÄãÐèÒª¶àеİ汾£¬»òÕßÄãÏëÒªÈçºÎ½øÐй±Ï×£»¶ÔÓÚά»¤ÕßÀ´Ëµ£¬ÕâÌ׽ṹ»¯µÄ¹¤×÷Á÷ÄܰïÖúËüÃÇÉó²éÐµĹ±Ïס£

±ä»ùÓë¼ðÑ¡¹¤×÷Á÷

ΪÁ˱£³ÖÏßÐÔµÄÌá½»ÀúÊ·£¬ÓÐЩά»¤Õ߸üϲ»¶ÔÚ master ·ÖÖ§É϶Թ±Ï×¹ýÀ´µÄ¹¤×÷½øÐбä»ùºÍ¼ðÑ¡£¬¶ø²»ÊÇÖ±½Ó½«ÆäºÏ²¢¡£ µ±ÄãÍê³ÉÁËij¸öÌØÐÔ·ÖÖ§ÖеŤ×÷£¬²¢ÇÒ¾ö¶¨Òª½«ÆäÕûºÏµÄʱºò£¬Äã¿ÉÒÔÔڸ÷ÖÖ§ÖÐÔËÐбä»ùÃüÁÔÚµ±Ç° master ·ÖÖ§£¨»òÕßÊÇ develop µÈ·ÖÖ§£©µÄ»ù´¡ÉÏÖØÐ¹¹ÔìÐ޸ġ£ Èç¹û½á¹ûÀíÏëµÄ»°£¬Äã¿ÉÒÔ¿ì½ø master ·ÖÖ§£¬×îºóµÃµ½Ò»¸öÏßÐÔµÄÏîÄ¿Ìá½»ÀúÊ·¡£

ÁíÒ»ÖÖ½«ÒýÈëµÄ¹¤×÷×ªÒÆµ½ÆäËû·ÖÖ§µÄ·½·¨ÊǼðÑ¡¡£ Git ÖеļðÑ¡ÀàËÆÓÚ¶ÔÌØ¶¨µÄij´ÎÌá½»µÄ±ä»ù¡£ Ëü»áÌáÈ¡¸ÃÌá½»µÄ²¹¶¡£¬Ö®ºó³¢ÊÔ½«ÆäÖØÐÂÓ¦Óõ½µ±Ç°·ÖÖ§ÉÏ¡£ ÕâÖÖ·½Ê½ÔÚÄãÖ»ÏëÒýÈëÌØÐÔ·ÖÖ§ÖеÄij¸öÌá½»£¬»òÕßÌØÐÔ·ÖÖ§ÖÐÖ»ÓÐÒ»¸öÌá½»£¬¶øÄã²»ÏëÔËÐбä»ùʱºÜÓÐÓᣠ¾Ù¸öÀý×Ó£¬¼ÙÉèÄãµÄÏîÄ¿Ìá½»ÀúÊ·ÀàËÆ£º

Figure 80. ¼ðѡ֮ǰµÄʾÀýÀúÊ·¡£

Èç¹ûÄãÏ£Íû½«Ìá½» e43a6 À­È¡µ½ master ·ÖÖ§£¬Äã¿ÉÒÔÔËÐУº

$ git cherry-pick e43a6fd3e94888d76779ad79fb568ed180e5fcdf
Finished one cherry-pick.
[master]: created a0a41a9: "More friendly message when locking the index fails."
3 files changed, 17 insertions(+), 3 deletions(-)

ÕâÑù»áÀ­È¡ºÍ e43a6 ÏàͬµÄ¸ü¸Ä£¬µ«ÊÇÒòΪӦÓõÄÈÕÆÚ²»Í¬£¬Äã»áµÃµ½Ò»¸öеÄÌá½» SHA-1 Öµ¡£ ÏÖÔÚÄãµÄÀúÊ·»á±ä³ÉÕâÑù£º

Figure 81. ¼ðÑ¡ÌØÐÔ·ÖÖ§ÖеÄÒ»¸öÌá½»ºóµÄÀúÊ·¡£

ÏÖÔÚÄã¿ÉÒÔɾ³ýÕâ¸öÌØÐÔ·ÖÖ§£¬²¢¶ªÆú²»ÏëÀ­ÈëµÄÌá½»¡£

Rerere

Èç¹ûÄãÔÚ½øÐдóÁ¿µÄºÏ²¢»ò±ä»ù£¬»òά»¤Ò»¸ö³¤ÆÚµÄÌØÐÔ·ÖÖ§£¬Git ÌṩµÄÒ»¸ö½Ð×ö¡°rerere¡±µÄ¹¦ÄÜ»áÓÐһЩ°ïÖú¡£

Rerere ÊÇ¡°ÖØÓÃÒѼǼµÄ³åÍ»½â¾ö·½°¸£¨reuse recorded resolution£©¡±µÄÒâ˼¡ª¡ªËüÊÇÒ»ÖÖ¼ò»¯³åÍ»½â¾öµÄ·½·¨¡£ µ±ÆôÓà rerere ʱ£¬Git ½«»áά»¤Ò»Ð©³É¹¦ºÏ²¢Ö®Ç°ºÍÖ®ºóµÄ¾µÏñ£¬µ± Git ·¢ÏÖ֮ǰÒѾ­ÐÞ¸´¹ýÀàËÆµÄ³åͻʱ£¬±ã»áʹÓÃ֮ǰµÄÐÞ¸´·½°¸£¬¶ø²»ÐèÒªÄãµÄ¸ÉÔ¤¡£

Õâ¸ö¹¦Äܰüº¬Á½¸ö²¿·Ö£ºÒ»¸öÅäÖÃÑ¡ÏîºÍÒ»¸öÃüÁî¡£ ÆäÖеÄÅäÖÃÑ¡ÏîÊÇ rerere.enabled£¬°ÑËü·ÅÔÚÈ«¾ÖÅäÖÃÖоͿÉÒÔÁË£º

$ git config --global rerere.enabled true

ÏÖÔÚÿµ±Äã½øÐÐÒ»´ÎÐèÒª½â¾ö³åÍ»µÄºÏ²¢Ê±£¬½â¾ö·½°¸¶¼»á±»¼Ç¼ÔÚ»º´æÖУ¬ÒÔ±¸Ö®ºóʹÓá£

Èç¹ûÄãÐèÒªºÍ rerere µÄ»º´æ½»»¥£¬Äã¿ÉÒÔʹÓà git rerere ÃüÁî¡£ µ±µ¥¶Àµ÷ÓÃËüʱ£¬Git »á¼ì²é½â¾ö·½°¸Êý¾Ý¿â£¬³¢ÊÔѰÕÒÒ»¸öºÍµ±Ç°ÈÎÒ»³åÍ»Ïà¹ØµÄÆ¥ÅäÏî²¢½â¾ö³åÍ»£¨¾¡¹Üµ± rerere.enabled ±»ÉèÖÃΪ true ʱ»á×Ô¶¯½øÐУ©¡£ ËüÒ²ÓÐÈô¸É×ÓÃüÁ¿ÉÓÃÀ´²é¿´¼Ç¼Ïɾ³ýÌØ¶¨½â¾ö·½°¸ºÍÇå³ý»º´æÈ«²¿ÄÚÈݵȡ£ ÎÒÃǽ«ÔÚ Rerere ÖÐÏêϸ̽ÌÖ¡£

Ϊ·¢²¼´ò±êÇ©

µ±Äã¾ö¶¨½øÐÐÒ»´Î·¢²¼Ê±£¬Äã¿ÉÄÜÏëÒªÁôÏÂÒ»¸ö±êÇ©£¬ÕâÑùÔÚÖ®ºóµÄÈκÎÒ»¸öÌá½»µã¶¼¿ÉÒÔÖØÐ´´½¨¸Ã·¢²¼¡£ ÄãÔÚ Git »ù´¡ ÖÐÒѾ­Á˽âÁË´´½¨Ð±êÇ©µÄ¹ý³Ì¡£ ×÷Ϊһ¸öά»¤Õߣ¬Èç¹ûÄã¾ö¶¨ÒªÎª±êǩǩÃûµÄ»°£¬´ò±êÇ©µÄ¹ý³ÌÓ¦¸ÃÊÇÕâÑù×ӵģº

$ git tag -s v1.5 -m 'my signed 1.5 tag'
You need a passphrase to unlock the secret key for
user: "Scott Chacon <schacon@gmail.com>"
1024-bit DSA key, ID F721C45A, created 2009-02-09

Èç¹ûÄãΪ±êǩǩÃûÁË£¬Äã¿ÉÄÜ»áÓöµ½·Ö·¢ÓÃÀ´Ç©ÃûµÄ PGP ¹«Ô¿µÄÎÊÌâ¡£ Git ÏîÄ¿µÄά»¤ÕßÒѾ­½â¾öÁËÕâÒ»ÎÊÌ⣬Æä·½·¨ÊÇÔÚ°æ±¾¿âÖÐÒÔ blob ¶ÔÏóµÄÐÎʽ°üº¬ËûÃǵĹ«Ô¿£¬²¢Ìí¼ÓÒ»¸öÖ±½ÓÖ¸Ïò¸ÃÄÚÈݵıêÇ©¡£ ÒªÍê³ÉÕâÒ»ÈÎÎñ£¬Ê×ÏÈÄã¿ÉÒÔͨ¹ýÔËÐÐ gpg --list-keys ÕÒ³öÄãËùÏëÒªµÄ key£º

$ gpg --list-keys
/Users/schacon/.gnupg/pubring.gpg
---------------------------------
pub 1024D/F721C45A 2009-02-09 [expires: 2010-02-09]
uid Scott Chacon <schacon@gmail.com>
sub 2048g/45D02282 2009-02-09 [expires: 2010-02-09]

 

Ö®ºóÄã¿ÉÒÔͨ¹ýµ¼³ö key ²¢Í¨¹ý¹ÜµÀ´«µÝ¸ø git hash-object À´Ö±½Ó½« key µ¼Èëµ½ Git µÄÊý¾Ý¿âÖУ¬git hash-object ÃüÁî»áÏò Git ÖÐдÈëÒ»¸ö°üº¬ÆäÄÚÈݵÄРblob ¶ÔÏ󣬲¢ÏòÄã·µ»Ø¸Ã blob ¶ÔÏóµÄ SHA-1 Öµ£º

$ gpg -a --export F721C45A | git hash-object -w --stdin
659ef797d181633c87ec71ac3f9ba29fe5775b92

¼ÈÈ» Git ÖÐÒѾ­°üº¬ÄãµÄ key µÄÄÚÈÝÁË£¬Äã¾Í¿ÉÒÔͨ¹ýÖ¸¶¨ÓÉ hash-object ÃüÁî¸ø³öµÄРSHA-1 ÖµÀ´´´½¨Ò»¸öÖ±½ÓÖ¸ÏòËüµÄ±êÇ©£º

$ git tag -a maintainer-pgp-pub 659ef797d181633c87ec71ac3f9ba29fe5775b92

Èç¹ûÄãÔËÐÐ git push --tags ÃüÁÄÇô maintainer-pgp-pub ±êÇ©½«»á±»¹²Ïí¸øËùÓÐÈË¡£ ÐèҪУÑé±êÇ©µÄÈË¿ÉÒÔͨ¹ý´ÓÊý¾Ý¿âÖÐÖ±½ÓÀ­È¡ blob ¶ÔÏó²¢µ¼Èëµ½ GPG ÖÐÀ´µ¼Èë PGP key£º

$ git show maintainer-pgp-pub | gpg --import

ÈËÃÇ¿ÉÒÔʹÓÃÕâ¸ö key À´Ð£ÑéËùÓÐÓÉÄãÇ©ÃûµÄ±êÇ©¡£ ÁíÍ⣬Èç¹ûÄãÔÚ±êÇ©ÐÅÏ¢Öаüº¬ÁËһЩ²Ù×÷˵Ã÷£¬Óû§¿ÉÒÔͨ¹ýÔËÐÐ git show <tag> À´»ñÈ¡¸ü¶à¹ØÓÚ±êǩУÑéµÄ˵Ã÷¡£

Éú³ÉÒ»¸ö¹¹½¨ºÅ

Git Öв»´æÔÚËæÃ¿´ÎÌá½»µÝÔöµÄ¡°v123¡±Ö®ÀàµÄÊý×ÖÐòÁУ¬Èç¹ûÄãÏëҪΪÌá½»¸½ÉÏÒ»¸ö¿É¶ÁµÄÃû³Æ£¬¿ÉÒÔ¶ÔÆäÔËÐÐ git describe ÃüÁî¡£ Git ½«»á¸ø³öÒ»¸ö×Ö·û´®£¬ËüÓÉ×î½üµÄ±êÇ©Ãû¡¢×Ըñêǩ֮ºóµÄÌá½»ÊýÄ¿ºÍÄãËùÃèÊöµÄÌá½»µÄ²¿·Ö SHA-1 Öµ¹¹³É£º

$ git describe master
v1.6.2-rc1-20-g8c5b85c

 

ÕâÑùÄãÔÚµ¼³öÒ»¸ö¿ìÕÕ»ò¹¹½¨Ê±£¬¿ÉÒÔ¸ø³öÒ»¸ö±ãÓÚÈËÃÇÀí½âµÄÃüÃû¡£ ʵ¼ÊÉÏ£¬Èç¹ûÄãµÄ Git ÊÇ´Ó Git ×Ô¼ºµÄ°æ±¾¿â¿Ë¡ÏÂÀ´²¢¹¹½¨µÄ£¬ÄÇô git --version ÃüÁî¸ø³öµÄ½á¹ûÊÇÓë´ËÀàËÆµÄ¡£ Èç¹ûÄãËùÃèÊöµÄÌá½»×ÔÉí¾ÍÓÐÒ»¸ö±êÇ©£¬ÄÇôËü½«Ö»»áÊä³ö±êÇ©Ãû£¬Ã»ÓкóÃæÁ½ÏîÐÅÏ¢¡£

×¢Òâ git describe ÃüÁîÖ»ÊÊÓÃÓÚÓÐ×¢½âµÄ±êÇ©£¨¼´Ê¹Óà -a »ò -s Ñ¡Ïî´´½¨µÄ±êÇ©£©£¬ËùÒÔÈç¹ûÄãÔÚʹÓà git describe ÃüÁîµÄ»°£¬ÎªÁËÈ·±£ÄÜΪ±êÇ©Éú³ÉºÏÊʵÄÃû³Æ£¬´ò·¢²¼±êǩʱ¶¼Ó¦¸Ã²ÉÓüÓ×¢½âµÄ·½Ê½¡£ ÄãÒ²¿ÉÒÔʹÓÃÕâ¸ö×Ö·û´®À´µ÷Óà checkout »ò show ÃüÁµ«ÊÇÕâÒÀÀµÓÚÆäĩβµÄ¼ò¶Ì SHA-1 Öµ£¬Òò´Ë²»Ò»¶¨Ò»Ö±ÓÐЧ¡£ ±ÈÈ磬×î½ü Linux ÄÚºËΪÁ˱£Ö¤ SHA-1 Öµ¶ÔÏóµÄΨһÐÔ£¬½«ÆäλÊýÓÉ 8 λÀ©Õ¹µ½ÁË 10 룬µ¼ÖÂÒÔǰµÄ git describe Êä³öÈ«²¿Ê§Ð§¡£

×¼±¸Ò»´Î·¢²¼

ÏÖÔÚÄã¿ÉÒÔ·¢²¼Ò»¸ö¹¹½¨ÁË¡£ ÆäÖÐÒ»¼þÊÂÇé¾ÍÊÇΪÄÇЩ²»Ê¹Óà Git µÄ¿ÉÁ¯°üÃÇ´´½¨Ò»¸ö×îеĿìÕչ鵵¡£ ʹÓà git archive ÃüÁîÍê³É´Ë¹¤×÷£º

$ git archive master --prefix='project/' | gzip > `git describe master`.tar.gz
$ ls *.tar.gz
v1.6.2-rc1-20-g8c5b85c.tar.gz

 

Èç¹ûÓÐÈ˽«Õâ¸öѹËõ°ü½âѹ£¬Ëû¾Í¿ÉÒԵõ½ÄãµÄÏîÄ¿Îļþ¼ÐµÄ×îпìÕÕ¡£ ÄãÒ²¿ÉÒÔÒÔÀàËÆµÄ·½Ê½´´½¨Ò»¸ö zip ѹËõ°ü£¬µ«´ËʱÄãÓ¦¸ÃÏò git archive ÃüÁî´«µÝ --format=zip Ñ¡Ï

$ git archive master --prefix='project/' --format=zip > `git describe master`.zip

ÏÖÔÚÄãÓÐÁ˱¾´Î·¢²¼µÄÒ»¸ö tar °üºÍÒ»¸ö zip °ü£¬¿ÉÒÔ½«ÆäÉÏ´«µ½ÍøÕ¾»òÒÔµç×ÓÓʼþµÄÐÎʽ·¢Ë͸øÈËÃÇ¡£

ÖÆ×÷Ìá½»¼ò±¨

ÏÖÔÚÊÇʱºò֪ͨÓʼþÁбíÀïÄÇЩºÃÆæÄãµÄÏîÄ¿·¢ÉúÁËʲôµÄÈËÁË¡£ ʹÓà git shortlog ÃüÁî¿ÉÒÔ¿ìËÙÉú³ÉÒ»·Ý°üº¬´ÓÉϴη¢²¼Ö®ºóÏîÄ¿ÐÂÔöÄÚÈݵÄÐÞ¸ÄÈÕÖ¾£¨changelog£©ÀàÎĵµ¡£ Ëü»á¶ÔÄã¸ø¶¨·¶Î§ÄÚµÄËùÓÐÌá½»½øÐÐ×ܽ᣻±ÈÈ磬ÄãµÄÉÏÒ»´Î·¢²¼Ãû³ÆÊÇ v1.0.1£¬ÄÇôÏÂÃæµÄÃüÁî¿ÉÒÔ¸ø³öÉϴη¢²¼ÒÔÀ´ËùÓÐÌá½»µÄ×ܽ᣺

$ git shortlog --no-merges master --not v1.0.1
Chris Wanstrath (8):
Add support for annotated tags to Grit::Tag
Add packed-refs annotated tag support.
Add Grit::Commit#to_patch
Update version and History.txt
Remove stray `puts`
Make ls_tree ignore nils

Tom Preston-Werner (4):
fix dates in history
dynamic version method
Version bump to 1.0.2
Regenerated gemspec for version 1.0.2

Õâ·ÝÕû½àµÄ×ܽá°üÀ¨ÁË×Ô v1.0.1 ÒÔÀ´µÄËùÓÐÌá½»£¬²¢ÇÒÒѾ­°´ÕÕ×÷Õß·ÖºÃ×飬Äã¿ÉÒÔͨ¹ýµç×ÓÓʼþ½«ÆäÖ±½Ó·¢Ë͵½ÁбíÖС£

×îºó×ܽá

ÄãÏÖÔÚÄÜ×ÔÈçµØÊ¹Óà Git ΪÏîÄ¿×ö³ö¹±Ïס¢Î¬»¤×Ô¼ºµÄÏîÄ¿»ò²ÉÄÉÆäËûÓû§µÄ¹±Ï×ÁË¡£ ¹§Ï²Äã³ÉΪÁËÒ»¸ö¸ßЧµÄ Git ¿ª·¢Õߣ¡ ÏÂÒ»ÕÂÖУ¬Ä㽫»áѧµ½ÈçºÎʹÓùæÄ£×î´ó×îÁ÷ÐÐµÄ Git ÍйܷþÎñ£¬GitHub¡£

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

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

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

ÅäÖùÜÀíʵ¼ù
ÅäÖùÜÀí·½·¨¡¢¹¤¾ßÓëÓ¦ÓÃ
¶à²ã´Î¼¯³ÉÅäÖùÜÀí
²úÆ··¢²¼¹ÜÀí