Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在没有扩展的情况下避免客户机上出现mercurial过时警告_Mercurial_Mercurial Phases - Fatal编程技术网

如何在没有扩展的情况下避免客户机上出现mercurial过时警告

如何在没有扩展的情况下避免客户机上出现mercurial过时警告,mercurial,mercurial-phases,Mercurial,Mercurial Phases,我目前在一家使用mercurial的公司工作,但大多数开发人员使用MQ而不是新的流。因此,大多数用户没有启用扩展 每次我推送到主存储库,.hg/store/obsstore都会自动推送到过时的变更集。这是有问题的,因为在此之后,所有未启用扩展的用户都会收到以下消息: 未启用过时功能,但找到33个标记 答案中提出的一个解决方案是在本地删除.obsstore,但这不是我想要的,因为我仍在使用evolve,这意味着我希望过时的变更集保持隐藏状态。不仅如此,还应该在服务器repo上提供过时的标记和变更集

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

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

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

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

我希望有一种方法,要么不将过时的变更集推送到服务器repo,要么(正确的方法)服务器不将过时的数据推送到未启用
evolve
的客户端


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

如果您确实想在本地使用evolve,但不想交换您的OBS标记,您可以这样做。我将告诉您如何操作,但请注意,您将遇到与使用剥离和再基础时完全相同的问题。如果推送变更集的早期版本并推送新版本,服务器将同时拥有这两个版本。 如果只想在本地使用Evolve,可以在配置文件中添加以下行:

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

我发现了一些解决这个问题的方法(黑客),因为在撰写此答案时,mercurial似乎没有办法解决这个问题:

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

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

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

使用钩子删除过时的标记 只需使用钩子删除存储库的
hgrc
上的
.obspurge
文件:

[extensions]
# evolve =     => Disabled on purpose
# This is <repo>/.hg/hgrc
[alias]
obspurge = !echo "Purging obsolete markers" && rm /path/to/origin/repo/.hg/store/obsstore
[hooks]
post-push = hg obspurge
这是/.hg/hgrc [别名] obspurge=!echo“清除过时标记”和&rm/path/to/origin/repo/.hg/store/obsstore [钩子] 后推=吹扫
这篇文章没有回答你的问题,但值得一读:谢谢你,@andref。我已经阅读了这篇文章,它很好地说明了为什么不使用MQ。不幸的是,我工作的大多数人都不同意,这仅仅是因为学习一种新的范式有一条曲线。不幸的是,这并不能解决这个问题。使用此配置,过时标记仍被推到上游。我认为这对evolve来说是一个很大的挫折,因为这意味着我每次都必须手动删除obspluge(否则这个工具对于其他用户来说几乎是坏掉的)。