【发布时间】:2015-12-21 19:48:25
【问题描述】:
假设我在 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 中的一个错误),但我想知道这是如何工作的,以便更好地理解底层机制。
【问题讨论】:
-
你运行的是什么版本? Mercurial 3.4 和 3.5 对标签缓存有一些相当显着的性能改进(而 3.3 有性能回归)。
-
忽略我之前的问题,我误解了您所说的“滞后”是什么意思。如果
hg tags缺少您当前.hgtags中的某些内容(并且该标签未在另一个分支或另一个修订版中删除——这就是您有时可以合法地在.hgtags中看到标签的方式,但在@ 中却没有987654333@),这意味着有一个错误。仅供参考,Mercurial 使用缓存来避免涉及的相当昂贵的计算和新提交时的更新;如果有错误,很可能是标签缓存的问题。