±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚ¼òÊ飬±¾ÎÄÖ÷Òª½éÉÜÁËgerritÊÇʲô¡¢gerritÓû§ÅäÖÃÒÔ¼°gerritµÄÈÕ³£Ê¹Óᢽø½×¹¦Äܵȡ£ |
|
1, GerritÊÇʲô£¿
Gerritʵ¼ÊÉÏÒ»¸öGit·þÎñÆ÷£¬ËüΪÔÚÆä·þÎñÆ÷ÉÏÍйܵÄGit²Ö¿âÌṩһϵÁÐȨÏÞ¿ØÖÆ£¬ÒÔ¼°Ò»¸öÓÃÀ´×öCode
ReviewÊÇWebÇ°Ì¨Ò³Ãæ¡£µ±È»£¬ÆäÖ÷Òª¹¦ÄܾÍÊÇÓÃÀ´×öCode Review¡£
2, GerritÓû§ÅäÖÃ
Email¼¤»î
GerritÕË»§µÄÉèÖýçÃæ£¬µã»÷¡°Contact Information¡±½øÈëEmail RegisterÒ³Ãæ£¬ÊäÈë×Ô¼ºµÄÓÊÏäÕË»§£¨´ËÓÊÏäÐèÒªÓë×Ô¼ºµÄGitÅäÖÃÒ»Ö£©¡£¿ÉÒÔÅäÖöà¸öEmailÕ˺š£

SSH keyÅäÖÃ
ͨ¹ýÒÔÏÂÃüÁîÉú³É²¢¶ÁÈ¡±¾»ússh key:
ssh-keygen -t
rsa
cat ~/.ssh/id_rsa.pub |
Copy keyµÄÄÚÈÝ£¬ÔÚGerritÕË»§µÄÉèÖÃÒ³Ãæ¡°SSH Public Key¡±ÖмÓÈë¼´¿É¡£

3, GerritÈÕ³£Ê¹ÓÃ
3.1 »ñÈ¡´úÂë¿â
µÇ¼GerritºóÔÚProjects-->List, Ñ¡ÔñÏàÓ¦¹¤³Ìyour_project£¬½øÈë¸Ã¹¤³ÌµÄGeneral½çÃæ¡£
Ñ¡ÖС°clone with commit-msg hook¡±ºÍ¡°SSH¡±:
git clone ssh://your_account@review.xxxxx.com:29418/your_project
&& scp -p -P 29418 your_account@review.xxxxx.com:hooks/commit-msg
cic-android/.git/hooks/ |
¿½±´ÒÔÉÏÃüÁîÔÚ×Ô¼º±¾µØGitÃüÁîÐд°¿ÚÖ´Ðм´¿ÉÀÈ¡¿â´úÂë¡£
3.2 Gerrit¹¤×÷Á÷³Ì
3.2.1 ÉÏ´«Ò»¸öcommit
GerritÏà¶ÔGitÌṩÁËÒ»¸öÌØÓеÄÃüÃû¿Õ¼ä¡°refs/for/¡±ÓÃÀ´¶¨ÒåÎÒÃǵÄÌá½»ÉÏ´«µ½Äĸöbranch£¬ÇÒ¿ÉÒÔÓÃÀ´Çø·ÖÎÒÃǵÄcommitÊÇÌá½»µ½Gerrit½øÐÐÉóºË»¹ÊÇÖ±½ÓÌá½»µ½Git²Ö¿â£¬¸ñʽÈçÏ£º
PushÒ»¸öCommitµ½Gerrit:
$ git commit
$ git push origin HEAD:refs/for/master |
Ö±½ÓPushÒ»¸öcommitµ½Git²Ö¿â:(ÎÒÃÇĬÈÏÅäÖóɲ»ÔÊÐí)
$ git commit
$ git push origin HEAD:master |
µ±ÎÒÃǵÄcommit Pushµ½GerritµÈ´ýreviewʱ£¬Gerrit»á½«´Ëcommit±£´æÔÚÒ»¸öÃûΪ¡°refs/changes/xx/yy/zz¡±µÄÒ»¸öÔÝ´æbranchÖС£
ÆäÖÐzzΪÕâ¸öcommitµÄpatch setºÅ£¬yyÊÇchangeºÅ£¬xxÊÇchangeºÅµÄºóÁ½Î»¡£
ÀýÈçÎÒÃǹ¤³ÌÖеÄÕâ¸ö´óÃ÷ͬѧµÄÌá½»£º
http://review.xxxxx.com:9090/#/c/545/ |
Ò»¹²Ìá½»ÁË9´Îpatch£¬ÄÇôµÚ9¸öpatch¾Í±£´æÔÚÒ»¸öÃûΪ¡°refs/changes/45/545/9¡±µÄbranchÖС£
¿ÉÒÔͨ¹ýGerritÒ³ÃæÖиÃcommitÓÒÉϽǵÄDownload°´Å¥ÑéÖ¤,±ÈÈç˵ÎÒÃÇÑ¡Ôñ¡°Cherry
Pick¡±, ÃüÁîÈçÏ£º
git fetch ssh://your_account@review.xxxxx.com:29418/your_project
refs/changes/45/545/9 && git cherry-pick
FETCH_HEAD |
ÔÚ´Ë£¬ÓбØÒªËµÏ¼¸¸ö¸ÅÄÒÔ±ãÀí½â£º
Change
Ò»¸öChange°üº¬Ò»¸öChange-Id£¬Õâ¸öId¾ÍÊÇͨ¹ýÎÒÃÇÀÈ¡´úÂë¿âµÄʱºòËù¿½±´µÄhooks£¨hooks/commit-msg£©×Ô¶¯Éú³ÉµÄ¡£
°üº¬Ò»¸ö»ò¶à¸öPatch Set£¬ÒÔ¼°ÖîÈçOwner£¬Project£¬Target branch,CommentsµÈÐÅÏ¢¡£
Change-Id
Change-IdÊÇÒ»´®SHA-1×Ö·û´®¡£ÓÐhooks×Ô¶¯Éú³ÉÔÚÎÒÃǵÄcommit
messageÏÂÃæ£º
Feature:Music
play.
BugId:/
Description:Music play.
Change-Id: I3d087f04d9d94bfaa93b8609b988b300af537497
|
ÔÚÒ»¸öprojectµÄÿ¸öbranchÖÐChange IdÊÇΨһµÄ¡£
Patch Set
Ò»¸öPatch Set¾ÍÊÇÒ»´Îcommit£¬Gerrit»á½«ÆäÉú³ÉÒ»¸öBranchÔÝ´æ¡£ChangeÖеÄÿÌá½»Ò»¸öPatch
Set±íʾÕâ¸öChangeµÄÒ»¸öеİ汾£¬×Ô¶¯¸²¸Çǰһ¸öPatch Set£¬ ĬÈÏÇé¿öÏ£¬½ö×îºóÒ»¸öPatch
SetÊÇÓÐÒâÒåµÄ¡£Code Reviewͨ¹ýʱ£¬Ò²½ö½öÊÇ×îºóÒ»¸öPatch Set»áºÏ²¢µ½Ö¸¶¨µÄbranchÖС£
¸öÈËGit¹¤×÷ÔÔòÒ»
** ÓÀÔ¶ÊÇ»ùÓÚÔ¶³Ì¿âµÄ×îдúÂ빤×÷£¬¾¡Á¿Ã¿Ò»²½²Ù×÷£¨ÌرðÊÇadd/commit/push£©¶¼Í¨¹ýgit
pull --rebase»ñȡһϵ±Ç°×îа汾¡£**
¸ù¾ÝÒÔÉÏÔÔò£¬½¨ÒéÔÚ½«±¾µØcommit pushµ½GerritÖ®ºó£¬Á¢Âíresetµô£¬»òÕßÖØÐÂÇл»Ò»¸öеķÖÖ§¹¤×÷¡£
3.2.2 ÉÏ´«Ò»¸öеÄpatch set
µ±ÎÒÃǵÄcommit±»reviewer´ò»ØÀ´Ê±£¬ÎÒÃÇ¿ÉÄÜÐèÒªÐ޸IJ¢ÖØÐÂÌá½»¡£
Èç¹ûÎÒÃǵĴúÂëÔÚ±¾µØ·ÖÖ§ÒѾresetµô£¬¿ÉÒÔͨ¹ýGerritÒ³ÃæÌṩµÄDownload·½Ê½»ñÈ¡£º
// fetch and
checkout the change
// (checkout command copied from change screen)
$ git fetch ssh://your_account@review.xxxxx.com:29418/your_project
refs/changes/45/545/9 && git checkout
FETCH_HEAD |
Èç¹û֮ǰÊÇͨ¹ýÇл»·ÖÖ§·½Ê½¹¤×÷µÄ£¬¿ÉÒÔÖØÐÂÇл»»Ø°üº¬´ËcommitµÄ·ÖÖ§¶øÎÞÐèÖ´ÐÐÉÏÊöÃüÁȻºó¿ÉÒÔÔÚ´Ë´úÂë»ù´¡ÉϽøÐÐÐ޸ģ¬ÖØÐÂadd£¬amend
commit:
// rework the
change
$ git add <path-of-reworked-file>
...
// amend commit
$ git commit --amend
// push patch set
$ git push origin HEAD:refs/for/master
|
3.2.3 Ìí¼ÓReviewers
ÔÚChange½çÃæÌí¼ÓÏà¹Øreviewers.¿ÉÒÔ¿¼ÂÇʹÓÃ×Ô¶¯Ìí¼ÓreviewersµÄ²å¼þ
3.2.4 Ìá½»Change
ChangeÒ»°ãÅäÖóÉÖ»ÓÐÔÚCode-Review +2 ÒÔ¼°Verified +1 µÄÇé¿öϲſÉÒÔSubmit¡£
Submitʱ¿ÉÄÜ»áÓгåÍ»£¬½çÃæ»áÌáʾ¡°Cannot Merge¡±×ÖÑù£¬´Ëʱ¿ÉÒÔÏȳ¢ÊÔGerritÒ³ÃæÌṩµÄRebase¹¦ÄÜ×öÒ»´ÎRebase²Ù×÷£¬Èç¹ûÌáʾ³åÍ»£¬ÔòÐèÔÚ±¾µØ½â¾ö³åÍ»ºóÖØÐÂÌá½»Ò»¸öPatch
Setµ½¸ÃChangeÉÏ¡£
±¾µØRebaseµÄÒ»ÖÖÁ÷³Ì:
// update the
remote tracking branches
$ git fetch
// fetch and checkout the change
// (checkout command copied from change screen)
$ git fetch ssh://your_account@review.xxxxx.com:29418/your_project
refs/changes/74/67374/2 && git checkout
FETCH_HEAD
// do the rebase
$ git rebase origin/master
// resolve conflicts if needed and stage the
conflict resolution
...
$ git add <path-of-file-with-conflicts-resolved>
// continue the rebase
$ git rebase --continue
// push the commit with the conflict resolution
as new patch set
$ git push origin HEAD:refs/for/master
|
3.3 ¶àFeature²¢Ðпª·¢
Code ReviewÐèҪʱ¼ä£¬¿ª·¢ÈËÔ±¿ÉÒÔÔÚ´ËÆÚ¼ä¿ª·¢ÆäËûfeature£¬Õâ¾Í²úÉúÁ˶àfeature²¢Ðпª·¢µÄ״̬¡£
ΪÁ˱£Ö¤¼õÉÙ³åÍ»ºÍÒÀÀµ£¬Ã¿Ò»¸öfeature¶¼Ó¦¸ÃÊÇÔÚ¸Ãfeature×Ô¼ºµÄ±¾µØ·ÖÖ§¿ª·¢£¬ÇÒ´Ë·ÖÖ§ÊÇ»ùÓÚÔ¶³Ì·ÖÖ§£¨target
branch£©µÄµ±Ç°HEADµÄ¡£ Ò²¾ÍÊÇ»ùÓÚÔ¶³Ì¿âµÄ×îдúÂ뿪·¢£¬¶ø²»Ó¦¸ÃÒÀÀµÓÚcode reviewÖеÄij¸ö¡¢Ä³Ð©Change¡£
µ±È»£¬Èç¹û±ØÒª£¬ÄãÒ²¿ÉÒÔ»ùÓÚÒ»¸öÕýÔÚcode reviewµÄChange¿ª·¢ÐµÄfeature£¬ÕâÑù»á²úÉúÒÀÀµ£¬¿ÉÒÔÔÚGerritÖиÃChangeµÄÒ³Ãæ¿´µ½¡°Related
Changes¡±¡£Õâ¾ÍÒªÇóreviewerÒ²ÐèÒª¹Ø×¢Õâ¸öÒÀÀµ¹ØÏµ£¬µ÷ÕûreviewʱÐò¡£
¸ù¾ÝÒÔÍùµÄʹÓþÑ飬ǿÁÒ½¨Òé²»Òª²úÉúÕâÖÖÒÀÀµ£¬¾¡Á¿Ê¹Ã¿Ò»¸öChangeÌá½»¶¼ÊÇÎÞÒÀÀµµÄ£¬±ÜÃâChangeµÄÁ¬»·Ê§°Üµ¼Ö¸÷ÖÖ½â³åÍ»µÄ¹¤×÷¡£
¸öÈËGit¹¤×÷ÔÔò¶þ
** ¾¡¿ÉÄܱ£Ö¤Ã¿Ò»¸öChangeµÄÍêÕûÐÔÒÔ¼°¶ÀÁ¢ÐÔ£¬ÇÒԽСԽºÃ¡£**
4, ½ø½×¹¦ÄÜ
4.1 WebÒ³Ãæ´úÂëÐÞ¸Ä
GerritÌṩÁËÖ±½ÓÔÚWebÒ³ÃæÐÞ¸ÄÎÒÃǵÄpatch´úÂëµÄ¹¦ÄÜ£¬Õâ¶ÔÓÚÎÒÃÇ×öһЩСµÄÎÊÌâÐ޸썱ÈÈç¸ñʽ»¯ÎÊÌ⣬ÃüÃû²»¶Ô£¬¶àÓàµÄ¿Õ¸ñµÈ)·Ç³£·½±ã¡£

µã»÷Editºó£¬¸Ã¹¤¾ßÀ¸ÏÔʾÈçÏ£º

¿ÉÒÔÔڴ˶ÔpatchµÄÎļþ½øÐÐÐ޸ģ¬É¾³ýµÈ¡£
Èç¹ûÏë¶ÔÎļþÖеÄij´¦½øÐб༣¬µã»÷½øÈë¸ÃÎļþµÄreview½çÃæ£º

µã»÷±à¼°´Å¥£¬½øÈë±à¼Ä£Ê½£¬±à¼Íêsave£º

»áÔÚChangeÒ³Ãæ¿´µ½£¬µã»÷Publish Edit°´Å¥£¬Gerrit»á×Ô¶¯°ïÄãÉú³ÉÒ»¸ö°üº¬¸Õ¸ÕÐ޸ĵÄpatch¡£


4.2 ²Ý¸åÏ书ÄÜ
Gerrit¿ÉÒÔ×÷Ϊһ¸ö×Ô¼ºµÄChange²Ý¸åÏ䣬ÎÒÃÇ¿ÉÒÔ½«Ò»Ð©»¹Î´Íê³É£¬»òÕß»¹²»ÏëÌá½»reviewµÄChangeÉÏ´«ÖÁ´Ë´¦¡£Ò»À´¿ÉÒÔ×÷Ϊһ¸ö±¸·Ý£¬ÁíÍâÔÚ¶àÈË»¥ÏàÐÖúÍê³Éͬһ¸ö¹¦ÄÜ£¬»òÊÇ×Ô¼ºÔÚ¶ą̀µçÄÔ£¨¼ÒÀï¡¢°ì¹«ÊÒ£©ÉÏ´¦ÀíδÍê³ÉµÄ¹¤×÷¡£
²»Í¬ÓÚÌá½»Ò»¸öÕýʽChangeµÄ¡°refs/for/¡±ÐÒ飬Ìá½»Ò»¸öChangeµ½²Ý¸åÏäµÄÐÒ鷽ʽΪ¡°refs/drafts/¡±,ÈçÏ£º
$ git commit
$ git push origin HEAD:refs/drafts/luckyair |
ÔÚGerritÒ³ÃæµÄDraftsÀ¸£º

²Ý¸åÏäÖеÄChangeÒ²¿ÉÒԺܷ½±ãµÄת»»ÎªÕýʽµÄChange£¬¶øÎÞÐèÖØÐÂÓá°refs/for/¡±À´Ìá½»£¬µã»÷Publish°´Å¥×ª»»ÎªÕýʽChange£¬Ò²¿ÉÒÔÔÚ´Ëɾ³ý´Ë²Ý¸å¡£
 |