Gerrit,一种免费、开放源代码的代码审查软件,使用网页界面。利用网页浏览器,同一个团队的软件程序员,可以相互审阅彼此修改后的程序代码,决定是否能够提交,退回或者继续修改。它使用Git作为底层版本控制系统。它分支自Rietveld,作者为Google公司的Shawn Pearce,原先是为了管理Android计划而产生。这个软件的名称,来自于荷兰设计师赫里特·里特费尔德(Gerrit Rietveld)。最早它是由Python写成,在第二版后,改成用Java与SQL。使用Google Web Toolkit来产生前端的JavaScript。
作者比较廊,安装部署是个麻烦有碰运气的时,有了 docker 这个神器后,妈妈在也不担心部署环境问题了。do 关于 docker 的使用不在本话题之内,这里只列出一些操作步骤。
docker pull gerritforge/gerrit-ubuntu15.04
docker run -d -p 80:8080 -p 29418 29418 gerritforge/gerrit-ubuntu15.04
注意:端口映射,需要映射 29418 端口,gerrit ssh 需要用到,同时 8080 端口为 gerrit web 的端口映射为 80 端口,当然 80 端口不能被占用,护着映射为其他端口。
登录部署好的 gerrit 主页,注册账户:
根据要求填写账户信息,特别注意下面两项:
gerrit 提交时使用 ssh 协议提交代码,一次需要设置 ssh key 信息。首先,生词 ssh key:
aqcoder@ubuntu:~/code/lo_core$ ssh-keygen -C aqcoder
Generating public/private rsa key pair.
Enter file in which to save the key (/home/aqcoder/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/aqcoder/.ssh/id_rsa.
Your public key has been saved in /home/aqcoder/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:LVcg70Rw4DVSVOE3o1OLkknLBD9NCi7TLYdrl2BOjLA aqcoder
The key's randomart image is:
+---[RSA 2048]----+
| . B=O.+. |
| o * & B |
| E + @ @ + = |
| * % B = + |
| S % + . |
| . + . . |
| |
| |
| |
+----[SHA256]-----+
这里不需要设置密码,一路回车即可。
将 id_rsa.pub 的内容复制到刚才注册页面的 ssh key 中。
aqcoder@ubuntu:~/code/lo_core$ cat ~/.ssh/id_rsa.pub
将注册页面中最下方的 Server Host Key 添加到 ~/.ssh/known_hosts 末尾
echo [复制的内容] >> ~/.ssh/known_hosts
vim ~/.ssh/config
Host gerrit 127.0.0.1
IdentityFile ~/.ssh/id_rsa
User aqcoder
Port 29418
HostName 127.0.0.1
点击 HTTP Password --> Create Password 按钮。
现在我们开始创建一个空的项目。
设置项目发送邮件 stmp:
点击 project --> list --> lo_coer --> Edit Config
根据你的邮箱,追加一下内容:
[sendemail]
enable = true
smtpServer = smtp.gmail.com
smtpServerPort = 465
smtpEncryption = ssl
smtpUser = [email protected]
smtpPass = your_password
sslVerify = false
from = Code Review < [email protected]>
将刚才创建的项目克隆岛本地:
aqcoder@ubuntu:~/code$ sudo git clone http://127.0.0.1/lo_core
Cloning into 'lo_core'...
remote: Counting objects: 2, done
remote: Finding sources: 100% (2/2)
remote: Total 2 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (2/2), done.
Checking connectivity... done.
为了演示效果,我们在这里就添加一个 test 文件,在实际项目中添加您要管理的代码。当然也可以使用命令来直接添加已经在 git 管理下的本地仓库同时创建项目。
aqcoder@ubuntu:~/code/lo_core$ touch test
aqcoder@ubuntu:~/code/lo_core$ git add .
aqcoder@ubuntu:~/code/lo_core$ git commit -m"test"
注意:提交者必须和 geriit 注册的邮箱一致
git config user.name aqcoder
git config user.email [email protected]
gerrit 不允许用户直接向 master 分支直接 push 代码,只能想 push 到分支,然后经过 review 以后再合并,这个也是 review 的精髓所在。
aqcoder@ubuntu:~/code/lo_core$ git config remote.origin.push refs/heads/*:refs/for/*
gerrit 中使用 change-id 做为一个 patch 的提交,也就说当你在修改一个 bug 或完成一个功能时,可能有多次的提交,但是他们应该使用一个 change-id。这使得提交历史干净明了,易于撤销 patch。因此,在每次提交时需要使用 hook 生成 chang-id,当需要往这个 patch 进行第二次提交时使用 git --amend
再次提交。
aqcoder@ubuntu:~/code/lo_core$ gitdir=$(git rev-parse --git-dir); scp -p -P 29418 [email protected]:hooks/commit-msg ${gitdir}/hooks/
commit-msg 100% 4662 4.6KB/s 00:00
由于上面的提交我们没有 change-d 因此,在这里在进行一次提交操作。
aqcoder@ubuntu:~/code/lo_core$ git commit --amend
[master 0e0fc03] test
Date: Sun Apr 10 19:20:45 2016 +0800
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 test
现在可以 push 了(push 的时候有 http 和 ssh 两种认证方式,这里使用了 http 的方式,两种方式说明详见下面 push 认证方式)。
aqcoder@ubuntu:~/code/lo_core$ git push
Username for 'http://127.0.0.1': aqcoder
Password for 'http://127.0.0.1':
Counting objects: 3, done.
Writing objects: 100% (3/3), 275 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: Processing changes: new: 1, refs: 1, done
remote:
remote: New Changes:
remote: http://bcad5a346f31:8080/34 test
remote:
To http://gerrit.zysoft.com/lo_core
* [new branch] master -> refs/for/master
提交成功,现在登录 grrit,可以看到你的修改了:
两种的设置在我们的上面的注册步骤已经完成了。
- http 的认证方式理解起来比较简单,通过用户名密码认证。 使用注册步骤中生成的密码即可通过验证。
gerrit 的 HTTP 密码不能修改,每次输入比较麻烦。可以设置 git 缓存此密码:git config --global credential.helper store
2. ssh 方式验证。注册步骤我们已经完成了公钥秘钥的设置,现在还需要设置 push url
git remote set-url origin ssh://127.0.0.1/lo_core
如果 push 的时候出现 Permission Denied
aqcoder@ubuntu:~/code/lo_core$ git push
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
尝试执行
aqcoder@ubuntu:~/code/test$ ssh-add ~/.ssh/id_rsa
Identity added: /home/aqcoder/.ssh/id_rsa (/homeaqcoder/.ssh/id_rsa)
登录管理员账户,找到刚才的提交。进行代码审核,审核通过后,点击 review, merge patch 到 master。这样一次代码审核就完成了。