转载自: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. 使用vs2022编译assimp,并基于OpenGL加载模型

    Assimp :全称为Open Asset Import Library,这是一个模型加载库,可以导入几十种不同格式的模型文件(同样也可以导出部分模型格式).只要Assimp加载完了模型文件,我们就可 ...

  2. C++学习日记:关于我决定开始学习C++的那些事

    苦恼于Python运行时感人的速度,我决定学习C++. 为了激励我自己好好地学习这门未曾谋面的编程语言,我决定在此开设专栏:C++学习日记.希望在读者们的监督下,我可以早日掌握这门语言.当然,如果那位 ...

  3. Redis基础课程讲义

    Redis基础 课程内容 Redis入门 Redis数据类型 Redis常用命令 在Java中操作Redis 1. 前言 1.1 什么是Redis Redis是一个基于内存的key-value结构数据 ...

  4. [linux] 输入&输出&错误流

    输入&输出&错误流 Linux中有三种标准输入输出,分别是STDIN,STDOUT,STDERR,对应的数字分别是0,1,2. 标准 数字 含义 STDIN 0 标准输入,默认从键盘读 ...

  5. DZY Loves Math II

    简要题面 对于正整数 \(S, n\),求满足如下条件的素数数列 \((p_1,p_2,\cdots,p_k)\)(\(k\) 为任意正整数) 的个数: \(p_1\le p_2\le\cdots\l ...

  6. JS计算文本字符串字节长度和像素长度的方法

    来源:js获取字符长度并计算px宽度 - [云]风过无痕 - 博客园 (cnblogs.com) <!DOCTYPE html> <html lang="en"& ...

  7. PHP单粒模式

    <?php class C { //三私一公 protected static $_instance = null; protected function __construct() //pro ...

  8. 为你的网站加上live2d的动态小挂件,博君一晒

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_122 喜欢二次元的朋友一定对大名鼎鼎的live2d技术并不陌生,live2D是一种应用于电子游戏的绘图渲染技术,技术由日本Cybe ...

  9. MultiJittered采样类定义和测试

    多重抖动在书上说的是水平和竖直方面随机交换. 类声明: #pragma once #ifndef __MULTIJITTERED_HEADER__ #define __MULTIJITTERED_HE ...

  10. java-前端之css

    css样式: <!-- 内联样式:在元素的style属性内写样式 --> <h2 style="color: red;">愿你单枪匹马,亦能所向披靡!< ...