首先Gerrit中已经有了两个帐号,一个是我的帐号,属于管理员,另一个是工程师。
本文就描述一个简单的审批流程:
工程师提交代码,我Review通过,然后将代码提交。
step1: 创建Reviewer组和Verifier组
Reviewer负责review
Verifier负责将review的结果提交到Git中心仓库中
然后设置成员,由于我是管理员,所以我自然同时都在Reviewer和Verifier组中。
step2:创建项目组,比如这里是appengine team,将工程师加入其中
step3:设置review和verifier权限。为了简单起见,通过Gerrit在All projects的Access中如下设置:
简单文字描述一下:
在refs/* 路径下,添加Reviewer组,权限是Label Code-Review,范围是-2~+2
在refs/* 路径下,添加Verifier组,权限是Label Verifier,范围是-1~+1
step4:设置要管理工程的access权限。
将appengine team组加入到refs/for/*路径下,权限为Push.
解释一下,每当工程师通过命令git push直接推送到中心仓库的ref/heades/master的时候,就会失败。只能推送到ref/for/master,等待审批。
服务端设置完成后,开始设置客户端。
step5: 设置push的快捷方式
每次敲命令:git push origin HEAD:refs/for/master 是很容易出错的,所以在客户端clone出来的工程目录下.git/config文件中添加一节配置:
- [remote "review"]
- pushurl = ssh://wangxd555@10.112.18.189:29418/appengine.git
- push = HEAD:refs/for/master
- receivepack = git receive-pack --reviewer csfreebird
这样,以后就可用git push review 来推送。
step6: 为了避免一个change被打回来修改后再被当作新的change提交,要使用Gerrit提供的hook脚本
scp -P 29418 -p username@gerrit_server:/hooks/commit-msg .git/hooks
现在正常工作吧。