Gerrit & GitLab & Hooks

第一次在公司见到 Gerrit、一面懵逼。什么xx玩意…

Gerrit,一种开放源代码的代码审查软件,使用网页界面。利用网页浏览器,同一个团队的软件开发者,可以相互审阅彼此修改后的代码,决定是否能够提交,回退或是继续修改。它使用版本控制系统Git作为底层。

它分支自Rietveld,作者为Google公司的Shawn Pearce,原先是为了管理Android项目而产生。[2]这个软件的名称,来自于荷兰设计师赫里特·里特费尔德(Gerrit Rietveld)。

—–来自 wiki

然后公司同时还使用到了 GitLab、我懵逼了。正常来说、GitLab 已经能满足大部分日常到使用了、到底为啥还要使用 Gerrit。

它分支自Rietveld,作者为Google公司的Shawn Pearce,原先是为了管理Android项目而产生。[2]这个软件的名称,来自于荷兰设计师赫里特·里特费尔德(Gerrit Rietveld)。

=== GitLab wiki

后来了解到它们两者之间的关系和角色、类似如下图片

公司给到的 GitLab 账号角色是 Reporter、只能 pull 而不能 push,如果想要 push 代码到分支上、只能先 push 到 Gerrit 中、Gerrit 可能存在代码插件或者人工review、通过之后才能push 成功。Gerrit 和 GitLab 之间会做同步、所以你能即时的在 GitLab 中看到你 push 的代码。

使用 Gerrit 的时候会将一个hook脚本放置在你的项目的 .git/hooks中、

里面有各种 hook的脚本、只要你将后缀.sample去掉就会在特定的时候执行。

使用 Gerrit 的时候会用其中的一个脚本在你的commit comment中增加一个 Change-Id的随机值

在 Idea 中 commit 的时候、如果你的项目中存在 hook 脚本、则会出现是否执行hook 脚本的选项

我们尝试在 commit 之前进行一次 compile、因为有时候 push 到远程仓库的代码可能并不能编译通过(把不能正常运行甚至不能编译通过的代码push上去、真的会影响其他同事开发)

我们在 pre-commit 中、增加以下命令、因为我的项目是多个模块的、所以还要进去到具体子模块中的 pom文件中。执行的时候目录是在跟 .git 目录在同一层的

然后进行 commit

可以在执行 commit 之前确实执行了一次 compile。如果执行 hooks的时候返回 非0 就会阻止此次 commit

使用 Gerrit 还有一个点就是、push的时候不能直接push到原来的远程分支

# 这样子是 push 会直接绕过 Gerrit 的代码审阅、所以不能push成功
git push origin master
# 这样子才能
git push origin head:refs/for/master

GitLab吧直接(不需要Gerrit配合),界面非常美观,使用方法也很简单,而且也能满足之前的代码审核的要求。所以大家也都转去GitLab吧。

https://www.cnblogs.com/kevingrace/p/5651447.html

https://zh.wikipedia.org/wiki/GitLab

https://zh.wikipedia.org/wiki/Gerrit

张贴在2