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

时间:2015-12-21 19:48:26

标签: mercurial rhodecode

假设我在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 Tag Design,但没有提到任何细节。

我问的原因是我们在工作中使用Rhodecode for Mercurial,并且当它处于高负荷时,这种传播似乎滞后显着

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

1 个答案:

答案 0 :(得分:3)

引用一些documentation

  

在任何给定时间生效的标签是每个头中指定的标签。如果相同的标签在两个不同的头中指定两个不同的修订,则会出现一个困难的情况。没有一般的&#34;正确&#34;解决这个问题。

     

如果标签的两个定义/更改似乎无关......最近的&#34;最近的&#34; (例如,具有较高数字修订号的那个)获胜   ...
  但是,如果标记是在两个头的共同祖先中定义的,但只在一个头中更改,则更改的标记将胜过未更改的标记。

此外:

  

如果只有一个头,则只考虑标签出现的最后一行。如果有多个磁头,则先前的标签定义用于确定哪个磁头保存最新的标签....如果标签指向0000000000000000000000000000000000000000,则认为它被删除。

我的猜测是滞后是当你需要解决多个分支中的多个标签时,Mercurial必须查找每个变更集以确定其修订版以确定&#34;最尖端&#34;。只有变更集哈希和标记名称位于.hgtags