Answers:
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协议本身。