如何在没有进化扩展的情况下避免对客户端的 mercurial 过时警告

Eul*_*ges 5 mercurial mercurial-phases

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

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

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

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

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

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

Eul*_*ges 2

我发现了这个问题的几个解决方法(黑客),因为在撰写本答案时,mercurial 似乎无法解决这个问题:

每个存储库的演化扩展

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

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

# This is <repo>/.hg/hgrc
[paths]
default = ssh://localhost//path/to/origin/repo
[extensions]
evolve =
Run Code Online (Sandbox Code Playgroud)

以及~/.hgrc

[extensions]
# evolve =     => Disabled on purpose
Run Code Online (Sandbox Code Playgroud)

使用钩子删除过时的标记

只需使用钩子删除.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
Run Code Online (Sandbox Code Playgroud)