2012-07-10 56 views
3

有没有工具,这使得拉请求和组合评论防呆和安全的混帐?这个基于评论的Git工作流可以被Gerrit强制执行吗?

我知道有几个相关的问题已经在github上提出过了(参见:Using git for Code Reviews,Online Code Review Tool with Git Integration)。

人们一直在暗示使用gerritgist

在前面的问题中提出的解决方案具有很好的接口,但是在访问控制方面它们会失败。我们公司太小,不能强迫一个人审查代码或有专门的维护人员。因此,我们正在寻找一种工具来确保(或至少鼓励)代码在被推送到我们的中央存储库之前进行审查。

注意事项:绝对用户访问控制不是必需的,因为我们通常信任我们的员工。但是,我们希望禁止直接推送到我们的中央存储库,而不会限制推送给单个人的权限。

这样的工具(或工具和脚本的组合)应至少实现这些任务:在web界面上显示

  • 化妆引入请求。 (gerrit达到这一点)
  • 中央存储库链接到该工具,以便只读访问是可能的,但推送至少需要另一个人来检查和确认更改集。
  • 负责审查和确认的人员可以是开发团队中的任意人员。
  • 该工具必须自动检测(并拒绝)导致合并冲突的请求。
  • 它不应该使用已知可以改变提交的SHA1哈希的git函数。

我提出这个解决方案:

  • 使用格里特的拉请求和审查处理。
  • gerrit应该始终拥有主人的克隆。
  • 对于每个请求,gerrit检查这些补丁是否适用于没有冲突的主机(这将是一个脚本钩子,我不知道gerrit是否具有这些特性)。
  • 中央存储库由具有shell访问权的特权用户(此处名为gerrit)拥有,并通过http公开。
  • 每当其他人查看代码时,Web界面中都会有一个应用按钮,它会自动将更改推送到中央存储库。

不幸的是,我不知道gerrit和文档是稀缺的。有没有可能在gerrit中实现这个工作流程?是否有另一种工具可以满足这些要求?

+0

你的购物清单应该用gerrit覆盖。安装并使用它,它并不疯狂。 – 2012-07-10 20:01:50

+0

我只是建议让jenkins标志在gerrit中构建为'看起来不错',这样您就可以确保它编译/通过测试/无论您的构建指标如何。 – 2012-07-10 20:02:36

+0

@honk:啊谢谢你!到目前为止,我并没有考虑持续整合。 – Alex 2012-07-10 20:04:06

回答

1

严格地说,您不需要让gerrit将更改推送到另一个托管存储库(尽管它具有允许推送的内置挂钩),因为Gerrit可以充当存储库主机。

可以限制Gerrit只应用快进的补丁,拒绝那些需要合并的补丁。如果你的项目中不仅仅是少数人,这可能会让你放慢脚步:越多人承诺,补丁越有可能在被接受之前必须重新组装。

应用补丁不是一个单击操作:审查补丁后,审阅者必须首先选择一个分数(范围从-2到+2),使用+2启用“立即应用”按钮。如果您没有CI系统验证补丁,他们可能还需要表明他们已验证源代码作品。如果你有有一个CI机器人,并且它在审阅者查看代码时没有完成,他们可以留下他们的反馈,任何人(受权限)都可以在CI机器人完成时触发合并。

对任意团队成员的要求是可以满足的,除非您的意思是“任意团队成员不是提交变更的成员”。我怀疑这就是你真正想要的,但你可以追溯到警察局。

+0

我自己也得出了和你一样的结论。似乎认为git的java实现仍然有一些微妙的错误。所以我们目前正在考虑规避gerrit的托管设施,尽管它们在将来可能会变得有用。此外,推动是用gerrit以一种非常规的方式完成的,所以我们不确定我们是否希望使用gerrit与不太有信心使用git的人。 – Alex 2012-07-20 18:29:00

+0

您是否知道如何使用gerrit与外部存储库? – Alex 2012-07-20 19:28:12

1

我认为Gerrit会满足大部分/所有您的需求。您可以集成可与Gerrit交互的Jenkins等CI工具,并根据需要添加其他功能。

要记住的一件事 - 修补程序可能能够在发出拉请求时干净地合并,但它稍后仍可能会合并冲突。如果开发者A提出了可以完全合并的请求1,那么开发者B发出请求2-9,这些请求也可以全部合并,如果2-9被首先审查和提交,那么请求1可能不会干净地合并。

Gerrit有能力尝试和检测到这种情况,并在修补程序需要重新配置时提醒用户。

+0

关于合并冲突,也有在格里特进行琐碎的冲突的3路合并有用的设置,可参见[--use内容合并](http://gerrit-documentation.googlecode.com/svn/Documentation/2.3/cmd-create-project.html#_options)。 – 2012-07-19 15:30:29

0

我诚挚推荐Critic,这是一个在Opera Software开发和使用的Git审查系统。 W3C也将其用于reviewing tests


make pull requests visible in a web interface. (gerrit achieves that)

评论家做到这一点。它完全与Git集成。您只需将批评者设置为Git-remote,然后推送至r/your-branch,它会创建一个评论,并将所有匹配的评论者发送给这些文件。

the central repository is linked to that tool, such that read-only access is possible, but pushing requires at least another person to review and acknowledge the changeset.

批评家的确有自己的仓库。它有几个钩子来做不同的事情,但对于你的用例,你可能会自己写一些。

the person responsible for review and acknowledgement can be an arbitrary person from the development team.

这个就可以了。或者实际上,您(作为评论者)为您想要查看的内容提供了一个评论过滤器。还有'看'过滤器。在小回购中,我只是在/(所有)上做一个过滤器。在我有更大的项目上,例如/desktop/linux/和例如一个与.*.py

the tool must autonomously detect (and refuse) pull requests that lead to merge conflicts. it shouldn't use git functions that are known to alter the SHA1 hash of the commit(s).

这是更好的,它都可以做。我们使用它的方式是重新分配。你可以自己做,它会弄清楚你改变了什么。如果你改变了一些东西并进行了重新组合,它会让你相当生气,但是会显示在三方评论中发生的所有变化。

我们有一个扩展,大部分用户已经安装了,FiddleAndTweak,它允许您直接在评论界面做简单的修正,以及交互式你衍合推前。

我们有自己的commitqueue这评论家连接到使用简单的扩展。这允许您在审核被接受后,通过点击一下鼠标排列您的更改。它不会让你推不干净的分支。它是在合并之前进行实际编译和测试的承诺本身;但是您可以允许它合并或重定义您的更改。可悲的是,我们的承诺非常具体,并且不像Critic那样公开。虽然审查制度肯定是较难的部分。

因此,与批评家,你需要写之外的一些小的脚本,以做到“一键式回购”。但是对于一些更简单的项目,编写一个小扩展很容易,只需在“集成”按钮被按下时将接受的代码合并到主控中。