Skip to content

Latest commit

 

History

History
239 lines (168 loc) · 7.64 KB

1.md

File metadata and controls

239 lines (168 loc) · 7.64 KB

Gerrit 使用流程

gerrit 简介

Gerrit,一种免费、开放源代码的代码审查软件,使用网页界面。利用网页浏览器,同一个团队的软件程序员,可以相互审阅彼此修改后的程序代码,决定是否能够提交,退回或者继续修改。它使用Git作为底层版本控制系统。它分支自Rietveld,作者为Google公司的Shawn Pearce,原先是为了管理Android计划而产生。这个软件的名称,来自于荷兰设计师赫里特·里特费尔德(Gerrit Rietveld)。最早它是由Python写成,在第二版后,改成用Java与SQL。使用Google Web Toolkit来产生前端的JavaScript。

使用 docker 安装 gerrit

作者比较廊,安装部署是个麻烦有碰运气的时,有了 docker 这个神器后,妈妈在也不担心部署环境问题了。do 关于 docker 的使用不在本话题之内,这里只列出一些操作步骤。

1. pull docker 镜像

docker pull gerritforge/gerrit-ubuntu15.04

2. 启动 docker

docker run -d -p 80:8080 -p 29418 29418 gerritforge/gerrit-ubuntu15.04

注意:端口映射,需要映射 29418 端口,gerrit ssh 需要用到,同时 8080 端口为 gerrit web 的端口映射为 80 端口,当然 80 端口不能被占用,护着映射为其他端口。

注册账户

登录部署好的 gerrit 主页,注册账户:

gerrit_register

根据要求填写账户信息,特别注意下面两项:

1. ssh key(ssh 认证方式用到)

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

2. 设置 Server Host Key(ssh 认证方式用到)

将注册页面中最下方的 Server Host Key 添加到 ~/.ssh/known_hosts 末尾

echo [复制的内容] >> ~/.ssh/known_hosts

3. 设置 ssh config(ssh 认证方式用到)

vim ~/.ssh/config

Host gerrit 127.0.0.1
    IdentityFile ~/.ssh/id_rsa
    User aqcoder
    Port 29418
    HostName 127.0.0.1

4. 生成 http 密码(http 认证方式用到)

点击 HTTP Password --> Create Password 按钮。

创建项目

现在我们开始创建一个空的项目。

gerrit_createproj

设置项目发送邮件 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"

提交修改

1. git config

注意:提交者必须和 geriit 注册的邮箱一致

git config user.name aqcoder
git config user.email [email protected]

2. 设置 commit 分支

gerrit 不允许用户直接向 master 分支直接 push 代码,只能想 push 到分支,然后经过 review 以后再合并,这个也是 review 的精髓所在。

aqcoder@ubuntu:~/code/lo_core$ git config remote.origin.push refs/heads/*:refs/for/*

3. 设置 commit hook

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

4. push 到 gerrit

由于上面的提交我们没有 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,可以看到你的修改了:

gerrit_push

5. push 认证方式

两种的设置在我们的上面的注册步骤已经完成了。

  1. 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)

code review

登录管理员账户,找到刚才的提交。进行代码审核,审核通过后,点击 review, merge patch 到 master。这样一次代码审核就完成了。

gerrit_review