2011-03-11 56 views
4

在开发过程中,我们将所有* .resx文件发送给一个翻译器。翻译者通常需要一周的时间才能发回文件。在此期间,不允许添加,删除或更新任何resx文件。如何防止Mercurial提交/推送某些文件?

如何配置mercurial执行该策略?

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

很高兴有:

  1. 我会转“政策”和关闭每隔几个星期。所以理想情况下,我希望在某个地方容易配置并影响所有开发者的东西。

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

感谢


UPDATE:在翻译过程

更多信息:

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

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

为什么要防止更新resx?如果开发人员将标签值从“打开”更改为“关闭”,他已经做出了非常重要的语义变化。如果他在翻译包发送后这样做,我们将不会得到正确的翻译。

回答

4

除非您可以控制其桌面计算机(使用pretxncommit钩子),否则您不能停止对文件进行更改以改变.resx文件,即使此时它可以轻松绕过。在push时使用pretxnchangegroup挂钩对中央服务器进行检查更为正常,但你说得对,他们必须修复任何变更集并重新推送,这是高级用法。无论哪种情况,您都会使用AclExtension来强制实施限制。

下面是两种替代方式去了解这一点,可以先制定出更好的为你:

  1. 克隆你的仓库在翻译过程的开始,开发商警告独自一段时间离开的.resx,应用翻译人员完成后的工作,然后将这些更改合并到merge command that always gives the incoming changes priority:X的主开发库中。然后使用简单的hg log命令查找.resx中刚刚被覆盖的所有更改并告诉开发人员重新添加它们。在这个时候嘲笑他们。

交替

  1. 充分利用.resx文件较大外库的Subrepository。然后在禁止期间关闭对该resx存储库的写入访问权限。开发人员可以在外部存储库中进行提交,但不能在内部进行提交,但克隆仍然可以像往常一样完成。

对于什么是值得的,其他人都用简单的合并来处理这个问题,.resx是(XML)文本,它合并得很好。

在使用DVCS时,并不总是很容易反映svn的体验,但无论如何通常有更好的选择。

+0

我将检查AclExtension。 resx文件分散在项目文件夹中的多个目录中,子存储库在该上下文中不起作用。我没有做所有这些来缓解合并过程。我更新了我的问题,并提供了更多信息,说明我们为什么这样做 – Sylvain 2011-03-11 15:33:25

+0

你的解释是有道理的。您可以使用AclExtension在推送级别执行您想要的操作。我仍然认为这是一种非常普遍的情况,而其他人都设法解决这个问题而不诉诸于阻塞钩应该让你停下来。例如,以下是Mercurial项目本身的方式,它依赖于编码期间和之后发生工作的大量志愿者翻译人员处理它:http://mercurial.selenic.com/wiki/TranslatingMercurial – 2011-03-11 16:03:26

0

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

+0

我不喜欢这样因为开发者不会注意到他对resx的改变被忽略了。如果一个开发者在翻译过程中“必须”改变一个有用的理由,我们必须知道,因为翻译者发回文件时必须完成这项工作。 – Sylvain 2011-03-11 15:10:14

+2

它也不起作用。只有在考虑** untracked **文件时才会查阅'.hgignore'文件。一旦文件已经被添加/追踪(就像这些.resx文件一样),那么'.hgignore'完全没有效果。 – 2011-03-11 15:50:49

相关问题