验证Mercurial签入

时间:2010-07-13 13:58:22

标签: mercurial

有没有办法在Mercurial中验证/验证签到?我想在我们的组织中推出HG(60多个开发人员),我想要一种方法来确保每个人的签到来自正确的用户,并且他们都是正确的格式。

在试用期间,我们发现有些用户使用完全不同的用户名(复制其他人的.hgrc文件)进行了检查,其他用户使用其名称的不同版本(名字,全名,电子邮件地址等)进行了检查。不同的客户。

我们可以添加一个钩子来强制执行用户名的格式,但它仍然不能保证它是正确的用户。 Mercurial有什么可以管理的吗?或者我只是坚持CVS / SVN的思维方式?

谢谢, 戴夫。

2 个答案:

答案 0 :(得分:4)

大多数情况下,你采用的是CVS / SVN思维方式 - 如果你的员工不诚实,你还是会被搞砸。 :)然而,其他人使用各种技术处理这个问题有几种方法:

  • mozilla和其他一些人添加了一个可查看的pushlog,显示谁将每个cset移动到每个仓库中,因此您将获得隐含的批准步骤
  • 使用gpg extension,您可以确保csets已签名并编写快速changegroup挂钩,以确保进入受保护仓库的cset已由其作者签名
  • 您可以编写一个钩子,将名称的电子邮件部分与$REMOTE_USER变量(对于http)或$USER(对于ssh)进行比较,并要求它与推送用户匹配。

这些都不会阻止虚假提交,但是你可以阻止虚假提交进入一个如此受到保护的回购。

然而,在实践中,这并不是每个人(包括我)都会想到的问题。一个人最终得到了来自不同机器的许多相同名称的变体,但是任何按用户名(流失等)工作的命令都将采用别名映射来帮助您将它们分组(如果重要)。

答案 1 :(得分:3)

首先,您无法在提交时验证这一点,因为一旦将变更集推送到您的某个中央存储库,您就只能访问该变更集。

因此,您可以验证推送cset的人是否也是提交者(通过匹配http或ssh身份验证)。这有点限制,因为当人们推动其他开发人员的变更集时它会很有用。

您可以使用pgp扩展名(来自hgext)在提交后显式签署变更集,但如果您想为每个变更集执行此操作,那么它就是一种拖累。

commitsigs是另一个扩展,它对签名采取了不同的策略。它将签名直接嵌入到变更集中,从而避免了额外变更集的混乱。这为每个变更集增加了大约2 KB的开销。

Mozilla使用pushlog来跟踪推送内容的人。这使您可以查看服务器上的提交历史记录(但仅在那里)查看谁推送了哪组更改集,从而为您提供比通常更好的纸质记录。如果您包含在电子邮件中执行推送的人员(这是Python在转换完成后将执行的操作),也可以通过更改组通知来提供此功能。

所以这些是技术解决方案。另一方面,再考虑一下:您已经让一群人推送访问您的中央存储库。如果他们想要,他们可以用你的树捣乱。如果你相信他们将东西推入你的中心树,那么你是否也不相信他们最好的意图是将自己的名字放在他们的变更集上?