如何在没有进化扩展的客户端上避免使用mercurial过时警告

时间:2018-06-08 15:00:44

标签: mercurial mercurial-phases

我目前在使用mercurial的公司工作,但大多数开发人员使用MQ而不是新的evolve流程。因此,大多数用户没有启用扩展程序。

每次推送到主存储库时,.hg/store/obsstore都会被过时的变更集自动推送。这是有问题的,因为之后所有未启用扩展的用户都会收到以下消息:

  

未启用过时功能,但找到了33个标记!

this答案中提出的一个解决方案涉及在本地删除.obsstore,但这不是我想要的,因为我仍在使用evolve和这意味着我希望过时的变更集保持隐藏状态。不仅如此,服务器仓库上应该提供过时的标记和变更集,以便我们保持使用evolve的好处,例如智能冲突解决。

我希望有一种方法可以不将过时的变更集推送到服务器仓库,或者(正确的方法)让服务器不将过时的数据推送到没有启用evolve的客户端。

这可能吗?如果没有,为什么不呢?

2 个答案:

答案 0 :(得分:1)

如果你真的想在本地使用evolve而不是交换你的黑客,你就可以做到。我会告诉你如何但是要注意你会遇到与使用剥离和rebase而不进化的问题完全相同的问题。如果您推送以前版本的变更集并推送新版本,则服务器将同时具有这两个版本。 如果您只想在本地使用Evolve,可以在配置文件中添加以下行:

[experimental]
createmarkers=True
allowunstable=True
exchangeopt=False

答案 1 :(得分:1)

我找到了解决此问题的几种解决方法(破解),因为在撰写此答案时,看起来Mercurial无法解决此问题:

每个存储库演进扩展

evolve文件中删除~/.hgrc扩展名,在每个存储库的基础上启用它,然后使用SSH指向存储库(在我们的示例中,它位于NFS上,即问题的根源)。

也就是说,您在存储库的hgrc上将拥有:

# This is <repo>/.hg/hgrc
[paths]
default = ssh://localhost//path/to/origin/repo
[extensions]
evolve =

~/.hgrc上:

[extensions]
# evolve =     => Disabled on purpose

使用挂钩删除过时的标记

只需使用钩子即可删除存储库.obspurge中的hgrc文件:

# This is <repo>/.hg/hgrc
[alias]
obspurge = !echo "Purging obsolete markers" && rm /path/to/origin/repo/.hg/store/obsstore
[hooks]
post-push = hg obspurge