如何防止Mercurial提交/推送某些文件?

时间:2011-03-11 14:51:50

标签: mercurial

在我们的开发过程中,我们将所有* .resx文件发送给翻译人员。翻译通常需要一周时间才能发回文件。在此期间,不允许任何人添加,删除或更新任何resx文件。

如何配置mercurial来强制执行该策略?

我们的设置:每个开发人员都使用我们的中央存储库的本地克隆。

很高兴:

  1. 我会每隔几周打开和关闭“政策”。理想情况下,我想在一个地方轻松配置并影响所有开发人员。

  2. 我宁愿在本地存储库级别执行该策略,然后在中央存储库级别执行该策略,因为如果我们阻止中央存储库上的“推送”,则dev将更难撤消已在本地提交的变更。

  3. 由于


    更新:

    有关翻译流程的更多信息:

    合并不是问题。翻译器不会更改我们发送给他的文件。我们向他发送了一堆语言中立的.resx(form1.resx)并返回一堆语言特定的resx(form1.FR.resx)。

    为什么要阻止添加新的resx?当我们向应用程序添加新UI时,会发生添加resx。如果我们在发送翻译包之后这样做,翻译人员将不会知道新的用户界面,我们最终会得到一个没有翻译的新用户界面。

    为什么要阻止更新resx?如果开发人员将标签值从“打开”更改为“关闭”,他就会进行非常重要的语义更改。如果他在翻译包发送后这样做,我们将无法获得正确的翻译。

2 个答案:

答案 0 :(得分:4)

除非您可以控制桌面计算机(使用.resx挂钩),否则您无法阻止人们对pretxncommit文件进行更改,即使这样也很容易被绕过。使用push挂钩在pretxnchangegroup时将检查放在中央服务器上更为正常,但你是正确的,他们必须修复任何更改集并重新推送,是高级用法。在任何一种情况下,您都使用AclExtension来强制实施限制。

以下是另外两种可能更适合您的方法:

  1. 在翻译过程开始时克隆您的存储库,警告开发人员单独离开.resx一段时间,在翻译完成后应用翻译器的工作,然后使用{将这些更改合并回主开发存储库{3}}:X。然后使用简单的hg log命令查找刚被覆盖的.resx中的所有更改,并告诉开发人员重新添加它们。在这个时候谴责他们。
  2. 交替

    1. 使.resx文件成为较大外部存储库的merge command that always gives the incoming changes priority。然后在禁用期间关闭对该resx存储库的写访问权限。开发人员将能够在外部存储库中提交但不能在内部存储库中提交,但克隆仍然可以像往常一样完全获得。
    2. 对于它的价值,其他人都通过简单的合并处理这个问题,.resx是(XML)文本,它合并得很好。

      使用DVCS时,要完全反映您的svn体验并不总是那么容易,但无论如何通常都有更好的选择。

答案 1 :(得分:0)

您可以将* .resx添加到hgignore文件