在某些情况下,我需要强制Mercurial用户在允许任何hg pull -u
之前运行hg commit
,即hg pull
意味着传入的队列为空 - 而且我还希望这个人使用分支的头版本。
我如何设置这样的限制?
(我完全清楚这与DVCS设计核心部分有关)
答案 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)
结果是钩子阻止了在分支上创建多个头的任何推送(因此匿名/默认分支上的一个加上命名分支上的一个)。这有效地强制在提交之前进行拉动,因为你必须拉动,在本地获取两个头,然后合并或重新删除它。
注意,钩子位于服务器/主仓库
上