为便于开发人员对Go的开发做出贡献,Google开始将[Go的GitHub PR(Pull Request)镜像到Go的上游Git服务器Gerrit](https://github.com/golang/go/wiki/GerritBot)。
[Gerrit是Go开发中主要使用的代码管理工具](https://golang.org/doc/contribute.html)。为便于开发人员获取Go代码,现在所有归并到Gerrit的更改,同时也镜像到[GitHub上的GoLang代码仓储](https://github.com/golang)中。据Google的Go工程师Andrew Bonventre介绍,Go团队近期也开始对GitHub PR做镜像,目前在于使Go开发贡献工作流更顺畅。
该工作是通过GerritBot实现的。GerritBot是一种机器人,它可以将任一GitHub PR导入到Gerrit,并以评论(comment)形式将Gerrit的审查链接发布到GitHub PR。所有在Gerrit中添加的评论都将同步到PR中,PR原始贡献者可以对这些评论做处理,并在不离开GitHub环境的情况下将更多的提交推送到同一PR分支。
[Gerrit](https://gerrit-review.googlesource.com/q/status%3aopen)是一种基于Web的代码审查工具,构建在Git之上。Gerrit通过提供一种轻量级框架,[简化了代码的审查](https://gerrit-review.googlesource.com/Documentation/intro-how-gerrit-works.html)。在框架中可并排展示所有的更改,并支持内联评论。这在某种程度上类似于GitHub PR所提供的功能,虽然两者在哲学上存在着根本差异。事实上,Gerrit在每次提交时都执行审查,而GitHub PR则是基于两个分支间的差异执行审查。这[对于在GitHub或Gerrit中哪种工作流更自然](https://softwareengineering.stackexchange.com/questions/173262/gerrit-code-review-or-githubs-fork-and-pull-model)具有重大影响。具体来说,Gerrit注重于单次提交审查,应该将更改分解为一组较小的自包含提交,而通常GitHub PR包含多次提交。
此外,Gerrit实际上提供了一种提交模型。在模型中,提交在实际归并到上游前,会做连续的修订。该模型的目标是通过修改先前的提交,仔细修订变更的历史记录,或将多次提交置于一次提交中。GitHub PR一般不会这样使用,尤其是在使用GitHub Web UI时。在使用命令行处理PR时,我们可以手动获得类似的结果。
查看英文原文: [Go Accepts Patches from GitHub Pull Requests Now](https://www.infoq.com/news/2018/02/golang-github-gerrit-bot)
译者:盖磊,来源:[infoq](http://www.infoq.com/cn/news/2018/02/golang-github-gerrit-bot)
有疑问加站长微信联系(非本文作者)
![](https://static.golangjob.cn/static/img/footer.png?imageView2/2/w/280)