´úÂëÉóºË£¨Code
Review£©ÊÇÈí¼þÑз¢ÖÊÁ¿±£ÕÏ»úÖÆÖзdz£ÖØÒªµÄÒ»»·£¬µ«ÔÚʵ¼ÊÏîĿִÐйý³ÌÖУ¬È´ÒòΪÖÖÖÖÔÒò±»DelayÉõÖÁÊǺöÂÔ¡£ÔÚʵ¼ùÖУ¬¸ø´ó¼ÒÍÆ¼öÒ»¿îÃâ·Ñ¡¢¿ª·ÅÔ´´úÂëµÄ´úÂëÉó²éÈí¼þGerrit¡£
1. Why Code Review
Code ReviewÊÇʲô£¿
Code Review×îÖ±¹ÛµÄ½âÊͼ´¿´´úÂë¡£³£¹æµÄ×ö·¨Îª×Ô¼º¿´£¬ÓÐʱ´úÂëÂß¼ÎÊÌâ¿ÉÄÜ×Ô¼º¿´²»³öÀ´£¬ÐèÒªÕÒͬÊÂÒ»Æð¿´£¬ÔÚ´ó¼Ò֪ʶÌåϵÏà¶Ôƽ¾ùµÄÇé¿öÏ¿ÉÄÜÐèÒª»¨Ç®×¨ÃŵĹ«Ë¾°ïÖú²é¿´¡£
Code ReviewÐèÒª¿´ÄÄЩ£¿¶ÔÓÚ¸ÕÈëÖ°³¡»òÕ߸սӴ¥µ½CodingµÄÐÂÈËÀ´Ëµ£¬´úÂë·ç¸ñÊDZȽÏÖØÒªµÄÒ»¿é¡£³ý´ËÖ®Í⣬±àÂë¹æ·¶¼°´úÂë½á¹¹Ð´·¨£¬¿ò¼ÜºÍ¹¤¾ßµÄÑ¡ÐÍ£¬¾ßÌåÏîÄ¿µÄÒµÎñÂß¼£¬°²È«Òþ»¼£¬ÐÔÄÜÎÊÌâµÈ¶¼¿ÉÒÔͨ¹ýreviewµÄ·½Ê½·¢ÏÖ¡£Code
Review´ÓǰÍùºó´óÖ·ÖΪ½á¶Ô±à³Ì£¬Ìá½»´úÂëºó£¬²âÊÔ֮ǰ£¬·¢°æÖ®Ç°£¬·¢°æÖ®ºóµÈ¼¸¸ö½×¶Î£¬Ô½Íùºó£¬Code
ReviewµÄЧ¹ûÔ½²î£¬ÐÞ¸´µÄ³É±¾Ò²Ô½À´Ô½¸ß¡£
Ϊʲôһ¶¨Òª×öÈë¿âǰCode Review£¿
Ê×ÏÈ£¬´úÂëÉó²éµÄ×î´óµÄ¹¦ÓÃÊÇ´¿Éç»áÐԵġ£Èç¹ûÄãÔÚ±à³Ì£¬¶øÇÒÖªµÀ½«»áÓÐͬʼì²éÄãµÄ´úÂ룬Äã±à³Ì̬¶È¾ÍÍêÈ«²»Ò»ÑùÁË¡£Äãд³öµÄ´úÂ뽫¸ü¼ÓÕû½à£¬ÓиüºÃµÄ×¢ÊͺͳÌÐò½á¹¹¡£
Æä´Î£¬ÍµÀÁÊÇÈ˵ÄÌìÐÔ£¬´Ó½ÚÔ¼³É±¾µÄ½Ç¶È¿¼ÂÇ£¬´ó¼ÒÒ»°ã»áÑ¡ÔñÔÚ²âÊÔ֮ǰÎÞÏÞÖÆµÄDelay Code Review¡£Èë¿âǰ×öCode
Review±ãÊdzɱ¾ºÍЧ¹ûÖ®¼ä×î¼Ñƽºâµã£¬ËüÄܼ°Ê±·¢ÏÖÎÊÌ⣬½øÐÐÐ޸ĺóÈ·±£´úÂëÖÊÁ¿¡£
×îºó£¬´úÂëÉó²éÄÜ´«²¥ÖªÊ¶¡£Ôںܶ࿪·¢ÍŶÓÀ¾³£Ã¿¸öÈ˸ºÔðÒ»¸öºËÐÄÄ£¿é£¬Ã¿¸öÈ˶¼Ö»¹Ø×¢×Ô¼ºµÄÄ£¿é¡£³ý·ÇÊÇͬʵÄÄ£¿éÓ°ÏìÁË×Ô¼ºµÄ³ÌÐò£¬ËûÃÇ´Ó²»Ï໥½»Á÷¡£ÕâÖÖÇé¿öµÄºó¹ûÊÇ£¬Ã¿¸öÄ£¿éÖ»ÓÐÒ»¸öÈËÊìϤÀïÃæµÄ´úÂë¡£Èç¹ûÕâ¸öÈËÐݼٻò´ÇÖ°ÁË£¬ÆäËûÈËÔòÊøÊÖÎ޲ߡ£Í¨¹ý´úÂëÉó²é£¬ÖÁÉÙ»áÓÐÁ½¸öÈËÊìϤÕâЩ³ÌÐò¡ª¡ª×÷Õߣ¬ÒÔ¼°Éó²éÕß¡£Éó²éÕß²¢²»ÄÜÏñ³ÌÐòµÄ×÷ÕßÒ»Ñù¶Ô³ÌÐòÊ®·ÖÁ˽⣬µ«ÖÁÉÙËû»áÊìϤ³ÌÐòµÄÉè¼ÆºÍ¼Ü¹¹£¬ÕâÊǼ«ÆäÖØÒªµÄ¡£
2. Gerrit¼ò½é
GerritÊÇGoogleΪAndroidϵͳÑз¢Á¿Éí¶¨ÖÆµÄÒ»Ì×Ãâ·Ñ¿ªÔ´µÄ´úÂëÉóºËϵͳ£¬ËüÔÚ´«Í³µÄÔ´Âë¹ÜÀíÐ×÷Á÷³ÌÖÐÇ¿ÖÆÐÔÒýÈë´úÂëÉóºË»úÖÆ£¬Í¨¹ýÈ˹¤´úÂëÉóºËºÍ×Ô¶¯»¯´úÂëÑéÖ¤¹ý³Ì£¬½«²»·ûºÏÒªÇóµÄ´úÂëÆÁ±ÎÔÚ´úÂë¿âÖ®Í⣬ȷ±£ºËÐÄ´úÂë¶àÈËУÑé¡¢¶àÈË»¥±¸ºÍ×Ô¶¯»¯¹¹½¨ºËÑé¡£
Gerrit֮ǰµÄϵͳ¼Ü¹¹£º

GerritÖ®ºóµÄϵͳ¼Ü¹¹£º

ͨ¹ýGerrit»úÖÆ½«´úÂë×ö·Ö¸ô¡£
GerritÊÊÓÃÐÔ
¼¸ºõÈκÎÐèÒªÕýʽ·¢²¼µÄÏîÄ¿¶¼Ó¦µ±Ê¹ÓÃGerritÀ´½øÐдúÂëÉó²é£¬Èç¹ûTeamÖÐÓÐÐÂÈË£¬±ØÐëʹÓÃGerritÈ·±£´úÂëÖÊÁ¿¡£
GerritЧ¹û


ÕûÌåÉÏÀ´Ëµ£¬¸öÍÆÊ¹Óõıê×¼ÅäÖÃΪGerrit+Jenkins+Sonar£¬Õû¸öϵͳ´î½¨Íê³ÉºóµÃµ½µÄЧ¹ûΪ£º100%
Code StyleÎÊÌâ±ÜÃâÈë¿â£¬80% Éè¼ÆÎÊÌâ±ÜÃâÈë¿â£¬40% Âß¼´íÎó±ÜÃâÈë¿â£¬20% °²È«Òþ»¼±ÜÃâÈë¿â£¬100%
ÈËÔ±»¥±¸¡£
3. GerritÈëÃÅʵս
Gerrit²¿ÊðºÍÔËÐÐ
JDK»·¾³ÅäÖãº
java -jar gerrit-2.12.war init -d review_site

GerritÈËÔ±½ÇÉ«ÅäÖÃ
ʹÓÃOpenIDµÇ¼£¬µÚÒ»¸öµÇ¼µÄÓû§Îªadmin£¬´´½¨devÕʺš¢reviewÕʺźÍverifyÕʺţ¬´´½¨dev¡¢reviewºÍverifyÓû§×é²¢Ìí¼ÓÏàÓ¦Óû§£¬×¢ÒâÉèÖÃUsername£¬´úÂëͬ²½Ê±ÐèÒªÓõ½¡£

´´½¨µÚÒ»¸öÏîÄ¿£¬ÅäÖÃȨÏÞ¹ÜÀí
Ìí¼Óproject£¬Ñ¡Ôñ Inherit From All-Projects£¬µ±È»Ò²¿ÉÒÔ×Ô¶¨ÒåParent
Project¡£

Ìí¼ÓVerified±êǩ֧³Ö£¬ÕâÀïÐÞ¸ÄAll-Project ÏîÄ¿µÄproject.config£¬ËùÓм̳Ð×ÔAll-ProjectµÄÏîÄ¿×Ô¶¯Ìí¼ÓVerified
±êÇ©£¬Ò²¿ÉÕë¶ÔÏîÄ¿×Ô¶¨ÒåÊÇ·ñverify¡£

´´½¨Óû§×飺

Ìí¼ÓÏà¹ØÓû§È¨ÏÞ£º

½«´úÂë¿âͬ²½µ½±¾µØ£¨SSH/Http£©
HTTP ·½Ê½£º
HTTP Password ÃÜÂëÔÚ ÕË»§ - ->> Settings ¨C>>
HTTP Password ´¦»ñÈ¡¡£

SSH·½Ê½£º
Ìí¼ÓSSH Public Key¡£

Clone´úÂëµ½±¾µØ


commit-msg£¬Ìṩ×Ô¶¯Ð´Èëchange-Id ÖÁgit logÄÚ¹¦ÄÜ¡£
Ìá½»µÚÒ»¸öchange


GerritÉϽøÐдúÂëÉó²é£¬È·ÈÏÈë¿â
Verify£º
¹¤³ÌÀïÃæ½ÓÈëÁËjenkins×Ô¶¯verify£¬½á¹û¿ÉÔÚÉÏͼºì¿òÄÚչʾverify½á¹û¡£
review´úÂ룬Ìá½»Èë¿â¡£


±¾µØ´úÂë¿â¸üУ¬»ñÈ¡×îÐÂÈë¿â´úÂë
´úÂësubmitºóͨ¹ýgit pull - - rebase ¸üдúÂë¡£

GerritÈëÃÅʵս-³õ¼¶ÐÞ²¹
Èç¹ûËùÓдúÂëÌá½»¾ù±»´ò»Ø£¬¿ÉÒÔ½øÐб©Á¦»Ø¹ö£ºgit reset £¬½Ó×ÅÖØÐÂÌá½»Gerrit£¬ÔÙ½øÐÐGerritÉó²éÈë¿â¡£


GerritÈëÃÅʵս-¸ß¼¶ÐÞ²¹
Èç¹ûµ¥¸öÌá½»´ò»Ø£¬Ôò¿É½»»¥Ê½»Ø¹ö£ºgit rebase -i £¬ÐÞ¸ÄÖ¸¶¨commitµã£ºgit commit
¨Camend£¬Íê³ÉËùÓÐcommitµã´¦Àí£ºgit rebase ¨Ccontinue£¬È»ºóÖØÐÂÌá½»Gerrit£¬×îºóGerritÉó²éÈë¿â¡£
Rebaseǰ£º

Rebaseºó£º

rebaseÔÚͬһ¸öµãÉÏÐ޸쬲»»á²úÉúÉóºËµã£¬¶à¸öcommitµãͬʱ´æÔÚÊÇÓÈÆäÓÐÓá£

Gerrit¾Ñé̸
µÚÒ»£¬Git±ðÃû°ó¶¨£¬Ìí¼Ó±ðÃû×ֶΣ¬Í¨¹ýgit review masterÕâÑù¼òµ¥Óï·¨Ìá½»µ½masterÔ´¶Ë·ÖÖ§£¬¿ÉÒÔʡȥºÜ¶à¹¤×÷¡£ÐÞ¸ÄϵͳĿ¼»òÕßÏîĿĿϵÄ.gitconfig
Îļþ£¬Ìí¼Ó

Ò²¿Éͨ¹ýgit config ¨Cglobal alias.review ÃüÁîÐ޸ģº

µÚ¶þ£¬¹¤¾ßÖ»ÊÇÒ»²¿·Ö£¬¸üÖØÒªµÄÊÇÈËÓëÈ˵±ÃæµÄ¹µÍ¨½»Á÷£¬´ó¼ÒÌÖÂÛÒ»¸öºÃµÄ½â¾ö·½°¸£¬²ÅÄܸüºÃµÄ½â¾öÎÊÌ⡣ûÓн»Á÷£¬¹¤¾ßÒ²¾ÍʧȥÁËÒâÒå¡£
×îºó£¬¹ØÓÚreview»ýѹÎÊÌ⣬Ҫ±ÜÃâÌá½»»ýѹ£¬´úÂëÉóºË¹ý³ÌÒª¼°Ê±Íê³É£¬±ÜÃâ Code ReviewÁ÷ÓÚÐÎʽ¡£ |