假设我在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 3c81a17d4b31Mercurial如何使.hgtags在所有分支中保持同步?我读过汞标签设计,但没有提到任何细节。
我要问的原因是,我们在工作中使用Rhodecode来处理汞,当它承受很重的负载时,这种传播似乎明显滞后。
这种滞后非常恼人,因为我可以在.hgtags文件中看到最新的标记,但是hg tags没有列出最新的标记。做另一个标记有时会解决这个问题(可能是Rhodecode中的一个bug ),但我想知道它是如何工作的,以便更好地理解底层机制。
发布于 2015-12-21 21:56:00
引用一些文档
在任何给定时间有效的标记是在每个头中指定的标记。如果相同的标签在两个不同的标题中指定了两个不同的修订,则会出现一个困难的情况。这个问题没有一个普遍的“正确”的解决办法。 如果标记的两个定义/更改看起来像unrelated...the,则“最尖端”(例如,具有较高数值修订号的定义/更改)获胜。 ..。 但是,如果标记是在两个头的共同祖先中定义的,但仅在一个头中更改,则更改后的标记将战胜未更改的头。
另外:
如果只有一个头,则只考虑标记出现的最后一行。如果有多个头,则使用以前对标记的定义来确定哪个头持有最近的标记.如果标记指向0000000000000000000000000000000000000000000000000000000000000000000000000000,则视为删除。
我的猜测是,当您在多个分支中有多个需要解析的标记时,Mercurial必须查找每个更改集以确定其修订以确定“最顶端”。只有更改集哈希和标记名称在.hgtags中。
https://stackoverflow.com/questions/34403283
复制相似问题