Git Review + Gerrit 安装及使用完成 Code-Review
转载自:https://cloud.tencent.com/developer/article/1010615
1、Code Review 介绍
Code Review 代码评审是指在软件开发过程中,对源代码的系统性检查。Code Review 是一种用来确认方案设计和代码实现的质量保证机制,通过这个机制我们可以对代码,测试过程和注释进行检查。Code Review 主要用来在软件工程过程中改进代码质量,查找系统缺陷,保证软件总体质量和提高开发者自身水平。
2、Gerrit 介绍
Gerrit 是一个免费、开放源代码的代码审查软件。利用网页浏览器,同一个团队的软件程序员,可以相互审阅彼此修改后的程序代码,决定是否能够提交,退回或者继续修改。Gerrit 是使用 Git 作为底层版本控制系统,通过网页界面,能方便的做代码审核工作的一个轻量型框架,出自google团队的开源项目。
这里我们要实现的是,本地 Git 提交代码 review 到 Gerrit,在 Gerrit 上做 Code Review,如果 commit 通过则直接 merge 到分支,不通过则再修改并 update patch set 或者直接 abandon 掉。
3、环境、软件准备
本次演示环境,我是在本地机器 Mac 上操作,以下是安装的软件及版本:
- Docker:version 17.03.1-ce
- Git:version 2.10.1
- Gerrit:version 2.13.5
- Git-Review:version 1.25.0
注意:Gerrit 这里我使用基于 Docker 安装,所以需要先安装一下 Docker,后边演示 Git-Review 操作,需要本地先安装 Git,这里 Git、Docker 的安装忽略。
4、 Git-Review 安装
git-review 安装方式很简单,针对不同的系统,安装方式也不同。
Linux系统上 yum | apt-get 安装
sudo yum install git-review
sudo apt-get install git-review
Mac OS X 上 pip | Homebrew 安装
1、pip安装方式
$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
$ python get-pip.py
$ sudo pip install git-review
2、Homebrew 安装
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
$ sudo brew install git-review
安装完毕后,可以通过 git review --help 查看 review 命令相关信息。
5、Gerrit 安装
Gerrit 详细的安装过程,可参考我之前的文章 记录Gerrit2.8.4环境迁移、安装、配置以及问题解决 写的比较详细。这里我在本地使用 docker 快速搭建一个简单的 gerrit 服务。
$ docker pull openfrontier/gerrit
$ docker run --name gerrit -p 9000:8080 -p 29418:29418 -v /Users/wanyang3/gerrit/review_site:/var/gerrit/review_site openfrontier/gerrit
启动完成后,本地访问 http://127.0.0.1:9000/ 即可访问 Gerrit 网页版。
6、简单的 Demo 示例
6.1 注册登录
默认 Gerrit 登录,需要点击页面右上角 “Become in”, 然后注册账号。 如果 Gerrit 配置 LDAP 登录,则需要在修改配置文件 /Users/wanyang3/gerrit/review_site/etc/gerrit.conf,配置上 LDAP 相关信息,然后点击页面右上角 “Sign In”,输入用户名、密码即可登录,系统自动将用户信息入库。 注意:第一个注册的帐号或者 LDAP 登录的用户,默认为管理员。

6.2 上传公钥
为了方便以后操作,这里我们使用 ssh 方式连接。Gerrit 配置 ssh key 也很简单。 登录系统后,点击右上角用户名 -> Settings -> SSH Public Keys -> Add Key,把自己本地的公钥复制到文本域里,点击 Add 即可。本地生成 SSH Key如下:
$ ssh-keygen –t rsa
$ cat ~/.ssh/id_rsa.pub #内容复制到上边文本域中。

6.3 创建项目
下边我们开始创建一个demo项目,项目名为 review_demo,点击 Projects -> Create New Project -> 输入 Project Name -> 点击 Create Project。
6.4 Clone 项目
clone 远程项目到本地,这里 clone 有两种,第一种只 clone 项目,第二种 clone 项目的同时,复制 gerrit 提供的 commit-msg 钩子脚本,它的作用是在每次新的提交时生成 change-id。
第一种:
git clone ssh://wanyang3@127.0.0.1:29418/review_demo
第二种:
git clone ssh://wanyang3@127.0.0.1:29418/review_demo && scp -p -P 29418 wanyang3@127.0.0.1:hooks/commit-msg review_demo/.git/hooks/
6.5 git review 操作
cd review_demo
git remote add gerrit ssh://wanyang3@127.0.0.1:29418/review_demo
#这里因为 git-review 在使用 gerrit 时会默认查找名为 gerrit 的 remote,
如果 remote 存在,则 git-review 将提交当前分支到 remote 的 HEAD:refs/for/master
如果 remote 不存在,则 git-review 会查找 .gitreview 文件,所以我们需要创建一个 .gitreview 文件。
vim .gitreview
[gerrit]
host=127.0.0.1
port=29418
project=review_demo
defaultbranch=develop #这里指向了 develop 分支。
接下来正常执行 git 操作,但是 commit 完成后,不需要 push,只需要执行:
git review #会自动推送到我们的 gerrit 服务器上
然后相关负责人去 gerrit 上做 Code review,如果审核通过,则 Merge 到分支,若未通过,则可直接 Abandon 掉或者 Code-Review -2打回。
注意:当我们提交的commit审核未通过时,我们再修改完成之后,执行:
git add .
git commit --amend #注意这里会保留上次的 change-id,gerrit 将不会生成新的评审任务编号,使用原有任务编号,并将本次提交作为老评审任务的补丁。
git review
6.6 示例操作
$ vim test.txt
$ git add .
$ git commit -m "add test.txt"
[develop 636e853] add test.txt
1 file changed, 1 insertion(+), 2 deletions(-)
$ git review
remote: Processing changes: new: 1, refs: 1, done
remote:
remote: New Changes: ###6.6.1 新的 change
remote: http://127.0.0.1:9000/11 add test.txt ###6.6.1 序号11
remote:
To ssh://127.0.0.1:29418/review_demo
* [new branch] HEAD -> refs/publish/develop
此时,本次 commit 已经提交到 gerrit 上,并生成好了change-id,等待审核 Code-Review。这里演示先 Code-Review -1,然后 Code-Review -2,相当于本次提交不通过。接下来,我们在做一下修改,再次提交(注意:这里我们要使用上一次提交的 change-id,意思是再次提交作为上一次的修改补丁),最后 Code-Review +1,Code-Review +2 审核通过本次提交,真正合并到分支上。(以上都是用我一个人的账号进行 Code-Review,实际应用中,可以事先指定好各审核人。)
$ vim test.txt
$ cat test.txt
This is test message for review_demo.
I have modify the bug, please let me pass.
$ git add .
$ git commit --amend
[develop b0e8fc1] add test.txt
Date: Mon Aug 14 10:19:54 2017 +0800
1 file changed, 2 insertions(+), 2 deletions(-)
$ git review
remote: Processing changes: updated: 1, refs: 1, done
remote:
remote: Updated Changes: ###6.6.2 更新 change
remote: http://127.0.0.1:9000/11 add test.txt ###6.6.2 序号11
remote:
To ssh://127.0.0.1:29418/review_demo
* [new branch] HEAD -> refs/publish/develop
#从打印的日志信息中6.6.1和6.6.2就可以看出来,本次 commit 是针对上一次提交的 update,使用的是同一个 change-id。

至此,针对本次的修改才被真正 merge 到分支上了。当然 gerrit 能做的还有很多,如权限控制,分组等等,这里只介绍了最简单的也是最核心的 Code-Review 功能的简单使用。
参考资料
Git Review + Gerrit 安装及使用完成 Code-Review的更多相关文章
- 如何搭建开源code review gerrit服务器
搭建环境:Ubuntu 14.04 一.环境准备 1.Java环境 gerrit依赖,用于安装gerrit环境. 下载:jdk-7u79-linux-x64.tar.gz http://www.ora ...
- 从code review到Git commit log
最近在读一本技术类的书:朱赟——<跃迁:从技术到管理的硅谷路径>,其中聊了很多很有趣的观点,比如:技术管理.技术实践.硅谷文化.个人成长等. 读到关于硅谷人如何做code review这一 ...
- 15个最佳的代码评审(Code Review)工具
代码评审可以被看作是计算机源代码的测试,它的目的是查找和修复引入到开发阶段的应用程序的错误,提高软件的整体素质和开发者的技能.代码审查程序以各种形式,如结对编程,代码抽查等.在这个列表中,我们编制了1 ...
- 项目管理系列--好用的代码评审(Code Review)工具
1. Gerrit Gerrit is a web based code review system, facilitating online code reviews for projects us ...
- 如何在团队中做好Code Review
一.Code Review的好处 想要做好Code Review,必须让参与的工程师充分认识到Code Review的好处 1.互相学习,彼此成就 无论是高手云集的架构师团队,还是以CURD为主的业务 ...
- 简单可行的code review规则
前言 曾经有一段垃圾代码放在我的面前,我没有拒绝,等我真正开始接手的时候我才后悔莫及,程序员最痛苦的事莫过于此! 每当接手别人的代码,都有一种想重新写一遍的感觉,等到别人再来接手你的代码时,同样的感觉 ...
- code review规则
简单可行的code review规则 前言 曾经有一段垃圾代码放在我的面前,我没有拒绝,等我真正开始接手的时候我才后悔莫及,程序员最痛苦的事莫过于此! 每当接手别人的代码,都有一种想重新写一遍的感觉, ...
- 在 GitHub 上玩转开源项目的 Code Review
一.幕后故事 时光荏苒,岁月如梭-- (太文绉绉了,这不是我的风格) 今天我准备聊聊在 GitHub 上如何玩 Code Review. 突发奇想?心血来潮?不是. 咋回事呢?(对八卦不感兴趣的可以直 ...
- Code Review 程序员的寄望与哀伤
一个程序员,他写完了代码,在测试环境通过了测试,然后他把它发布到了线上生产环境,但很快就发现在生产环境上出了问题,有潜在的 bug. 事后分析,是生产环境的一些微妙差异,使得这种 bug 场景在线下测 ...
随机推荐
- 华为交换机设置ntp时间同步
操作交换机型号:Huawei S5720 查看时间发现时间不对 [HUAWEI]display clock 2021-04-01 21:41:35 Thursday Time Zone(Default ...
- 绝对路径和相对路径和File类的构造方法
路径: 绝对路径:是一个完整的路径 以盼复(C:,D:)开始的路径 c:\a.txt C:\User\itcast\IdeaProjects\shungyuan\123.txt D:\demo\b.t ...
- 2499-springboot使用jar形式打包在linux上运行
由于maven使用的种种问题,以前springboot版本变化较快带来的一些不兼容问题,是否考虑下使用jar形式运行web程序,而不是固守于war包与tomcat: 主要原理有两点: 使用nohup来 ...
- Mybatis的使用(3)
1:动态sql: 意义:可以定义代码片段,可以进行逻辑判断,可以进行循环或批量处理,使条件判断更为简单 1.1:定义代码片段简化代码: 1.2:多条件查询: <where> <if ...
- NodeJS & Dapr Javascript SDK 官方使用指南
Dapr 是一个可移植的.事件驱动的运行时,它使任何开发人员能够轻松构建出弹性的.无状态和有状态的应用程序,并可运行在云平台或边缘计算中,它同时也支持多种编程语言和开发框架.Dapr 确保开发人员专注 ...
- 技术分享|sysbench 压测工具用法浅析
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 介绍 新业务上线的时候通常需要对数据库性能进行压力测试,以确认是否满足需要,今天简单介绍下sysbench的用法: 1.s ...
- Vim基础用法,最常用、最实用的命令介绍(保姆级教程)
配置文件设置 set number (设置行号) set nocompatible (设置不兼容vi模式,不设置会导致许多vim特性被禁用) set clipboard=unnamed (设置普通的复 ...
- servlet映射路径匹配解析
开头 servlet是javaweb用来处理请求和响应的重要对象,本文将从源码的角度分析tomcat内部是如何根据请求路径匹配得到处理请求的servlet的 假设有一个request请求路径为/tex ...
- java-循环
1.循环:反复执行一段相同或相似的代码(逻辑相似或者相同)2.循环三要素: 1.循环变量的初始化 2.循环的条件(以循环变量为基础) 3.循环变量的改变(向着循环的结束变)循环变量:在整个循环过程中所 ...
- z—libirary最新地址获取,zlibirary地址获取方式,zliabary最新地址,zliabary官网登录方式,zliabary最新登陆
Z-Library(缩写为z-lib,以前称为BookFinder)是Library Genesis的镜像,一个影子图书馆项目,用于对学术期刊文章.学术文本和大众感兴趣的书籍(其中一些是盗版的)进行文 ...