我目前在使用mercurial的公司工作,但大多数开发人员使用MQ而不是新的evolve流程。因此,大多数用户没有启用扩展程序。
每次推送到主存储库时,.hg/store/obsstore
都会被过时的变更集自动推送。这是有问题的,因为之后所有未启用扩展的用户都会收到以下消息:
未启用过时功能,但找到了33个标记!
this答案中提出的一个解决方案涉及在本地删除.obsstore
,但这不是我想要的,因为我仍在使用evolve
和这意味着我希望过时的变更集保持隐藏状态。不仅如此,服务器仓库上应该提供过时的标记和变更集,以便我们保持使用evolve
的好处,例如智能冲突解决。
我希望有一种方法可以不将过时的变更集推送到服务器仓库,或者(正确的方法)让服务器不将过时的数据推送到没有启用evolve
的客户端。
这可能吗?如果没有,为什么不呢?
答案 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