我在某些情况下需要强制Mercurial用户在允许任何hg commit
之前运行hg pull -u
,即hg pull
将意味着传入队列是空 - 而且我还希望这个人使用分支的头版。Mercurial:在“hg commit”之前强制执行“hg pull -u”
我该如何设置这样的限制?
(我深知,这违背了DVCS设计的核心部分)
我在某些情况下需要强制Mercurial用户在允许任何hg commit
之前运行hg pull -u
,即hg pull
将意味着传入队列是空 - 而且我还希望这个人使用分支的头版。Mercurial:在“hg commit”之前强制执行“hg pull -u”
我该如何设置这样的限制?
(我深知,这违背了DVCS设计的核心部分)
通常善变不会让你推一个开放的头到服务器,而不使用-f标志(力)。你可以编写一个钩子来自动提取,但由于服务器不知道你有什么,所以不能强制服务器端。有对善变的有关此方案的网站上的文章: https://www.mercurial-scm.org/wiki/TipsAndTricks?highlight=%28heads%29#Prevent_a_push_that_would_create_multiple_heads
你可以问你的开发人员安装
[hooks]
pre-commit = hg pull -u
在他们的配置文件
(它可能应该因为这种安装在每个仓库.hg/hgrc
文件工作流是特定于存储库的)
这使得Mercurial有点像Subversion一样:你的开发者只会有一个突出的变更集。但是请注意,只要有人推送到服务器,hg pull -u
无法更新到新的分支提示,因为它将跨越分支(拓扑分支)来执行此操作。所以在这一点上需要适当的合并(或者rebase,见hg pull --rebase
)。
正如亚当所说,也许你真正需要做的是防止多个头(每个分支)。这是我们所做的,使用Netbeans的'forbid_2head'钩子(从这里链接https://www.mercurial-scm.org/wiki/TipsAndTricks#Prevent_a_push_that_would_create_multiple_heads)
结果是钩子阻止任何在分支上创建多个头的推送(所以匿名/默认分支上的一个加每个在命名分支上)。这有效地在提交之前强制拉动,因为你必须拉动,在本地获得两个头,然后合并或重新绑定以将其移除。
注,钩是在服务器/主回购
要求的另一种方式,这是如何实现的服务器触发器来禁止,创造多头推。 – 2012-04-16 14:02:11
我不能告诉你如何自动化,但我使用“hg incoming”来检查是否需要拉动。你可能想要使用它。 – 2012-04-16 14:02:37
如果你解释了你正试图解决的问题,而不是你想解决的破解解决方案,那会更好。 – 2012-04-16 14:34:30