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

时间:2012-04-16 13:57:12

标签: mercurial dvcs mercurial-hook

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

我如何设置这样的限制?

(我完全清楚这与DVCS设计核心部分有关)

3 个答案:

答案 0 :(得分:3)

您可以要求开发人员安装

[hooks]
pre-commit = hg pull -u

在他们的配置文件中(它应该安装在每个存储库.hg/hgrc文件中,因为此工作流是特定于存储库的。)

这使Mercurial变得像Subversion一样:您的开发人员只有一个未完成的变更集。但请注意,只要有人推送到服务器,hg pull -u就无法更新到新的分支提示,因为它将跨越分支(拓扑分支)来执行此操作。因此,此时需要进行适当的合并(或rebase,请参阅hg pull --rebase)。

答案 1 :(得分:1)

通常,mercurial不会让你在不使用-f标志(强制)的情况下将打开的头推到服务器。您可以编写一个自动拉取的钩子,但由于服务器不知道您拥有什么,因此无法强制执行服务器端。 mercurial的网站上有一篇关于这种情况的文章: https://www.mercurial-scm.org/wiki/TipsAndTricks?highlight=%28heads%29#Prevent_a_push_that_would_create_multiple_heads

答案 2 :(得分:1)

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

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

注意,钩子位于服务器/主仓库

相关问题