在某些情况下,我需要强制执行 Mercurial 用户在允许hg pull -u
任何人之前运行,即,这意味着传入队列是空的——此外,我还希望该人使用分支的头版本。hg commit
hg pull
我该如何设置这样的限制?
(我完全意识到这违背了 DVCS 设计核心的部分内容)
在某些情况下,我需要强制执行 Mercurial 用户在允许hg pull -u
任何人之前运行,即,这意味着传入队列是空的——此外,我还希望该人使用分支的头版本。hg commit
hg pull
我该如何设置这样的限制?
(我完全意识到这违背了 DVCS 设计核心的部分内容)
您可以要求您的开发人员安装
[hooks]
pre-commit = hg pull -u
在他们的配置文件中(它可能应该安装在每个存储库.hg/hgrc
文件中,因为此工作流是特定于存储库的)。
这使得 Mercurial 有点像 Subversion:您的开发人员将只有一个未完成的变更集。但是请注意,一旦有人推送到服务器,hg pull -u
就无法更新到新的分支提示,因为它会跨分支(拓扑分支)这样做。因此,此时需要进行适当的合并(或变基,请参阅参考资料hg pull --rebase
)。
正如亚当所说,也许你真正需要做的是防止多头(每个分支)。这就是我们所做的,使用来自 Netbeans 的 'forbid_2head' 钩子(从这里链接https://www.mercurial-scm.org/wiki/TipsAndTricks#Prevent_a_push_that_would_create_multiple_heads)
结果是钩子阻止了在一个分支上创建多个头的任何推送(因此一个在匿名/默认分支上加上一个在命名分支上)。这有效地强制在提交之前进行拉动,因为您必须拉动,在本地获取两个头,然后合并或变基以将其移除。
请注意,钩子在服务器/主存储库上
通常,在不使用 -f 标志(强制)的情况下,mercurial 不会让您将打开的头部推送到服务器。您可以编写一个挂钩来自动拉取,但由于服务器不知道您拥有什么,因此无法在服务器端强制执行。mercurial 的网站上有一篇关于这种情况的文章: https ://www.mercurial-scm.org/wiki/TipsAndTricks?highlight=%28heads%29#Prevent_a_push_that_would_create_multiple_heads