为什么我的Mercurial标签没有显示在标签列表中?

时间:2017-05-29 08:36:14

标签: tags mercurial tortoisehg

我有一个Mercurial存储库,它有几个标签。这些标签用于发布管理,并且都包含版本号。所有标签始终添加在默认分支上。以下是我的.hgtags文件的摘录:

55d0e566170f61935088c301ced8137b17868171 1.63
d898fc03cefa0becb880e0ad214d80aec22b79df 1.64
dfef02cc4a2f8e34ba9e34c782299708d8ec68b7 1.65
f0519f072992c39346b65332e444492fc5694e14 1.66
6537785f8093c0f3b55df0e41bb5586aa104bd9f 1.66.1

出于某种原因,1.66标记未显示在TortoiseHg中,也未显示在hg tags中。我可以通过TortoiseHg再次添加它来显示它,它在文件中创建了另外两行:

0000000000000000000000000000000000000000 1.66
f0519f072992c39346b65332e444492fc5694e14 1.66

如您所见,新创建的标记的哈希值与旧标记的哈希值相同。

为什么现有标签不显示?清除.hg/cache目录没有帮助。

2 个答案:

答案 0 :(得分:0)

更新到特定标记时,标记本身就会消失。这是Mercurial 存储标记的方式的自然结果,该标记位于修订控制的文件中。有关其他示例,请参阅the wiki,但简而言之:

hg up -r 1.66

带您进入标记为1.66的修订版,该版本本身有一个{em} 的.hgtags文件,其中包含1.66条目,因为您刚刚更新的修订版名称1.66本身进入.hgtags之前创建了。据推测,这就是这里发生的事情。 (根据评论编辑:显然不是。我认为,因为你显示文件中的行,你主要是看文件。现在它非常神秘。)

注意:当使用1.66标记名称作为--rev选项或运行hg tags时,Mercurial会扫描所有标题 all < / em>他们的.hgtags个文件。有一些复杂的代码可以缓存结果,因为这次扫描很昂贵,但效果是hg tags 应该列出标记,即使你无法在{ {1}}档案。

当你再次创建标签时,Mercurial首先删除旧标签(即全零线),然后创建其中包含相同哈希ID的新标签(即&#39; s .hgtags)行。新的f0519f072992c39346b65332e444492fc5694e14内容进入新的提交。更新到.hgtags会使所有三个行从文件中消失,因为1.66中的.hgtags文件是该文件的一个版本,不会出现{ {1}}。但只要您更新到头部,而不是标记f0519f072992c39346b65332e444492fc5694e14,您现在将看到所有三行。同时1.66应继续列出标记。

答案 1 :(得分:0)

事实证明,相同的标记名称(错误地)以前用于此存储库上的本地标记,但随后被删除。因此,有一行删除了.hg/localtags中的标记。这似乎也会覆盖非本地标签。从localtags文件中删除违规行可解决问题。