Gerrit代码审查,还是Github的分叉模型?


64

我正在启动一个将由团队和社区开发的软件项目。我以前是在Gerrit上出售的,但是现在Github的fork和pull请求模型似乎几乎提供了更多工具,可视化提交的方式以及易用性。

对于至少两者都有一点经验的人来说,两者的利弊是什么?对于希望为社区发展留出无限可能的基于团队的项目,哪个会更好?

Answers:


84

Gerrit和GitHub工作流程之间的主要区别在于更改的建模方式。

在Gerrit中,每次提交都是独立存在的更改。尽管Gerrit会向您显示提交之间的关系,但是审阅是在每个提交的基础上进行的。擅长将大型变更分解为小型,独立的提交的团队可能会在Gerrit上取得更大的成功。但是,由于Gerrit的模型包括对特定提交的连续修订,因此鼓励了许多开发人员不习惯的Git工作流,例如修改较早的提交并重新推送它,或者将一组不断增长的提交从一个主题分支压缩为单个承诺。

在Github中,拉取请求为两个分支之间的关系建模。Github上预期的工作流程是将一个或多个更改提交到主题分支(通常在存储库的分支中,但不一定),并在该分支和“上游”分支之间创建拉取请求。在这种情况下,正在审查的是一组提交,随着审查的继续,提交将继续增长。结果是一组更改,这些更改可以在完成后自动合并。拉取请求可以有效地跟踪更大范围内的更改,该范围可以通过多次提交来实现。拉取请求还支持更多开发人员习惯的SCM工作流程,例如通过在同一分支中提交后续提交来响应评论。

Github的最大优势是与Gerrit相比,熟悉它的开发人员数量众多。Gerrit可以在Git高级用户中流行,但是无摩擦地使用它需要中级或高级git知识,以及对陡峭学习曲线的承受力。

Gerrit的优势是与Git的关系更加深厚。Github Pull Requests与Git的标准数据模型相去甚远,因此必须使用Github的Web UI或其专有API来创建Pull Request。Gerrit用于创建和更新更改的界面是git协议本身。


8
谢谢马丁,这是一个有趣的答案。我一直想看看Gerrit一段时间,但我想搁置它。如果它鼓励编辑历史记录和压缩提交,那么我就不希望这样做。* 8'(
Mark Booth 2012年

15
为了明确起见(我经常在工作场所使用Gerrit),Martin在这里说:“ Gerrit鼓励Git工作流程……例如修改较早的提交并重新推动它,或者压缩一组不断增长的提交。 ..成一个提交”是完全正确的。我的澄清是@MarkBooth关于“编辑历史”的评论不是Martin所说的。修订提交(虽然仍然在格里特,而不是尚未合并origin / master的)并没有涉及“编辑历史”。实际上,此工作流程效果很好。马克·布斯(Mark Booth)所指的历史记录的“糟糕”编辑是将编辑后的历史记录重新推送到原始/母版。
likethesky 2014年

2
感谢您对@likethesky的澄清,但是我对“编辑历史”有一个更确切的解释,就我而言,导致变更集包含您未明确提交的内容的任何内容都是“编辑历史”。我意识到,尽管这是一种相当苛刻的解释,而且很少有人坚持。* 8')
Mark Booth 2014年

2
很公平。:-)不确定我理解“包含未明确提交的内容的变更集”是什么意思。详尽...我假设您并不是说您从未提交过临时(本地或通过远程分支在团队成员之间共享)的提交,例如“ WIP:这试图解决我们讨论的主要问题”,其后是更有帮助的压榨/修改说,“问题123:重构XYZ以提高弹性和水平缩放的难易程度”,作为该工作的最终提交消息。但是无论如何,您当然可以选择以任何让您感到高兴的方式使用git!
likethesky 2014年

7
这是一个了不起的答案。另外,我发现GitHub的pull请求促进了更小,更迭代的提交,并且通常以更具描述性的git日志结尾,该日志不仅显示工作产品,而且显示工作过程。Gerrit的代码审阅使用更大,更精细的提交来培养更清晰的存储库历史记录(实际的合并提交非常少)。
tophyr 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.