转载自: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 上操作,以下是安装的软件及版本:

  1. Docker:version 17.03.1-ce
  2. Git:version 2.10.1
  3. Gerrit:version 2.13.5
  4. 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的更多相关文章

  1. 如何搭建开源code review gerrit服务器

    搭建环境:Ubuntu 14.04 一.环境准备 1.Java环境 gerrit依赖,用于安装gerrit环境. 下载:jdk-7u79-linux-x64.tar.gz http://www.ora ...

  2. 从code review到Git commit log

    最近在读一本技术类的书:朱赟——<跃迁:从技术到管理的硅谷路径>,其中聊了很多很有趣的观点,比如:技术管理.技术实践.硅谷文化.个人成长等. 读到关于硅谷人如何做code review这一 ...

  3. 15个最佳的代码评审(Code Review)工具

    代码评审可以被看作是计算机源代码的测试,它的目的是查找和修复引入到开发阶段的应用程序的错误,提高软件的整体素质和开发者的技能.代码审查程序以各种形式,如结对编程,代码抽查等.在这个列表中,我们编制了1 ...

  4. 项目管理系列--好用的代码评审(Code Review)工具

    1. Gerrit Gerrit is a web based code review system, facilitating online code reviews for projects us ...

  5. 如何在团队中做好Code Review

    一.Code Review的好处 想要做好Code Review,必须让参与的工程师充分认识到Code Review的好处 1.互相学习,彼此成就 无论是高手云集的架构师团队,还是以CURD为主的业务 ...

  6. 简单可行的code review规则

    前言 曾经有一段垃圾代码放在我的面前,我没有拒绝,等我真正开始接手的时候我才后悔莫及,程序员最痛苦的事莫过于此! 每当接手别人的代码,都有一种想重新写一遍的感觉,等到别人再来接手你的代码时,同样的感觉 ...

  7. code review规则

    简单可行的code review规则 前言 曾经有一段垃圾代码放在我的面前,我没有拒绝,等我真正开始接手的时候我才后悔莫及,程序员最痛苦的事莫过于此! 每当接手别人的代码,都有一种想重新写一遍的感觉, ...

  8. 在 GitHub 上玩转开源项目的 Code Review

    一.幕后故事 时光荏苒,岁月如梭-- (太文绉绉了,这不是我的风格) 今天我准备聊聊在 GitHub 上如何玩 Code Review. 突发奇想?心血来潮?不是. 咋回事呢?(对八卦不感兴趣的可以直 ...

  9. Code Review 程序员的寄望与哀伤

    一个程序员,他写完了代码,在测试环境通过了测试,然后他把它发布到了线上生产环境,但很快就发现在生产环境上出了问题,有潜在的 bug. 事后分析,是生产环境的一些微妙差异,使得这种 bug 场景在线下测 ...

随机推荐

  1. 基于SqlSugar的开发框架循序渐进介绍(12)-- 拆分页面模块内容为组件,实现分而治之的处理

    在早期的随笔就介绍过,把常规页面的内容拆分为几个不同的组件,如普通的页面,包括列表查询.详细资料查看.新增资料.编辑资料.导入资料等页面场景,这些内容相对比较独立,而有一定的代码量,本篇随笔介绍基于V ...

  2. 发明Linux的帕特里克

    Slackware Linux 是目前市场存活时间最长的 Linux 发行版之一,它基于一个叫做 SLS(Soft Landing Systems)的 Linux 项目而设计,易于使用和稳定. Sla ...

  3. NOI / 2.1基本算法之枚举-8759:火车上的人数

    8759:火车上的人数​​​​​​ 总时间限制: 1000ms 内存限制: 65536kB 描述 火车从始发站(称为第1站)开出,在始发站上车的人数为a,然后到达第2站,在第2站有人上.下车,但上.下 ...

  4. javascript引用奇趣

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  5. Python Flask Blueprint 蓝图

    Python Flask Blueprint 蓝图 本篇来了解一下 Flask 中 Blueprint 蓝图,什么蓝图 ..就是一个分模块的扩展而已,用来让不同的 业务模块api 分到不同的pytho ...

  6. Nginx 认证模块

    # Nginx用户认证模块 # 主要应用业务:文件下载.当用户需要下载某些文件的时候,我们增加用户名和密码机制来进行用户验证. # 该功能的实现是通过ngx_http_auth_basic_modul ...

  7. LyScript 内存交换与差异对比

    LyScript 针对内存读写函数的封装功能并不多,只提供了内存读取和内存写入函数的封装,本篇文章将继续对API进行封装,实现一些在软件逆向分析中非常实用的功能,例如内存交换,内存区域对比,磁盘与内存 ...

  8. 青峰Flutter视频播放软件

    下载地址: https://github.com/patton88/peak_flutter_player/raw/master/peak_flutter_player_v1.1.5_release0 ...

  9. vue原理相关

    vue原理三大模块:响应式.vdom和diff.模板编译 vue原理要点: 1.组件化 组件化的历史:在vue之前已经有组件化的概念了,想asp.jsp.php等就有组件化的概念,nodejs也有组件 ...

  10. vue.js及H5常见跨域问题解决方案

    一.原生H5跨域问题解决方案 1.live-server 代理解决 首先在有node.js环境下,打开命令行工具,输入 npm install live-server -g 全局安装全局安装 live ...