Mercurial:在“hg commit”之前强制执行“hg pull -u”

7

在某些情况下,我需要强制要求Mercurial用户在允许任何hg commit之前运行hg pull -u,即hg pull将意味着传入队列为空,并且我还希望该人使用分支的最新版本。

我如何设置这样的限制?

(我完全意识到这与DVCS设计核心的部分相违背)


另一种询问方式是如何实现服务器触发器以禁止创建多个分支的推送。 - Adam Houldsworth
我无法告诉你如何自动化,但我使用“hg incoming”来检查是否需要拉取。你可能想使用它。 - W. Goeman
4
解释问题的解决方法不如说明你想要解决的问题更好。 - Mark Lavin
3个回答

3
您可以要求开发人员安装。
[hooks]
pre-commit = hg pull -u

在它们的配置文件中(应该将其安装在每个仓库的.hg/hgrc文件中,因为这个工作流是仓库特定的),这使得Mercurial有点像Subversion:您的开发人员只会有一个未处理的变更集。但请注意,一旦有人推送到服务器上,hg pull -u不能更新到新分支提示,因为它将跨越分支(拓扑分支)。因此,在那一点上需要进行适当的合并(或rebase,参见hg pull --rebase)。

1

正如Adam所说,也许你真正需要做的是防止多个头(每个分支)。这就是我们使用Netbeans中的“forbid_2head”钩子来实现的(从这里链接https://www.mercurial-scm.org/wiki/TipsAndTricks#Prevent_a_push_that_would_create_multiple_heads

结果是该钩子会阻止在分支上创建多个头的任何推送(因此匿名/默认分支上有一个,每个命名分支上有一个)。这有效地强制在提交之前进行拉取,因为您必须拉取,将两个头本地获取,然后合并或变基以删除它。

请注意,该钩子位于服务器/主存储库上


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接