Mercurial中的标签如何自动传播到所有分支



假设我在Mercurial中有50多个功能分支。如果我这样做:

hg tag some-tag

在其中一个特性分支中,它似乎传播到所有分支。无论我在哪个功能分支中,hg tags都将显示所有标记。一切都很好。但是,如果我执行hg log,它会告诉我,包含对.hgtags的更改的变更集发生在特定的分支中:

changeset:   4:ea48c727fbcd
branch:      feat1
tag:         tip
user:        Daniel <xxxx@yyyy.com>
date:        Mon Dec 21 20:15:11 2015 +0100
files:       .hgtags
description:
Added tag feat-1.0 for changeset 3c81a17d4b31

Mercurial如何在所有分支中保持.hgtags同步?我读过Mercurial标签设计,但它没有提到任何细节。

我问的原因是,我们在工作中使用的是Mercurial的Rhodecode,当它处于重负载时,这种传播似乎明显滞后于

这种滞后真的很烦人,因为我可以在.hgtags文件中看到最新的标记,但hg tags没有列出最新的标签。做另一个标记有时会解决这个问题(也许这是Rhodecode中的一个错误),但我想知道这是如何工作的,以便更好地理解底层机制。

引用一些文档:

在任何给定时间有效的标签都是在每个头中指定的标签。如果同一个标签在两个不同的标题中指定了两个不同版本,则会出现一个困难的情况。没有一般的";正确的";这个问题的解决方案。

如果标签的两个定义/更改似乎不相关。。。";最顶端";(例如,数值修订号较高的那个)获胜

然而,如果一个标签是在两个头部的共同祖先中定义的,但仅在一个头部中发生了更改,则更改后的标签将战胜未更改的标签。

还有:

如果只有一个头,则只考虑标记出现的最后一行。如果有多个头,则使用标记的先前定义来确定哪个头持有最近的标记。。。。如果某个标记指向00000000000000000000000000000000,则认为该标记已被删除。

我的猜测是,滞后是当你在多个分支中有多个标签需要解析时,Mercurial必须查找每个变更集来确定它的修订,以确定";最顶端";。.hgtags中只有变更集哈希和标记名称。

最新更新