为什么我的 Mercurial 标签没有出现在标签列表中?
Why does my Mercurial tag not show up in the list of tags?
我有一个包含多个标签的 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
目录没有帮助。
当您更新到 特定标签时,标签本身会消失。这是 Mercurial stores 标签的自然结果,它在一个版本控制的文件中。有关其他示例,请参阅 the wiki,但简而言之:
hg up -r 1.66
将您带到标记为 1.66
的修订版,它本身有一个 .hgtags
文件 而 没有 1.66
的条目] 在其中,因为您刚刚更新到的版本是在 在 名称 1.66
本身进入 .hgtags
之前创建的。据推测,这就是这里发生的事情。 (根据评论编辑:显然不是。我假设因为您显示的是文件中的行,所以您主要是在查看文件。现在它非常神秘。)
注意:当使用像 1.66
这样的标签名称作为 --rev
选项,或 运行 hg tags
时,Mercurial 扫描 all 前往 所有 他们的 .hgtags
文件。有一些复杂的代码来缓存结果,因为这个扫描很昂贵,但效果是 hg tags
应该 列出标签,即使你在.hgtags
文件。
当您再次创建标签时,Mercurial 首先删除旧标签(即全零行),然后创建具有相同哈希 ID 的新标签(即 f0519f072992c39346b65332e444492fc5694e14
) 线。新的 .hgtags
内容进入新的提交。更新到 1.66
应该会使 所有三个 行从文件中消失,因为 f0519f072992c39346b65332e444492fc5694e14
中的 .hgtags
文件是该文件的一个版本,没有1.66
的出现次数。但是只要你更新到头部,而不是标记 1.66
,你现在就会看到所有三行。同时hg tags
应该继续列出标签。
事实证明,相同的标签名称之前(错误地)用于此存储库上的本地标签,但随后被删除。因此,有一行删除了.hg/localtags
中的标签。这似乎也覆盖了非本地标签。从 localtags
文件中删除有问题的行解决了问题。
我有一个包含多个标签的 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
目录没有帮助。
当您更新到 特定标签时,标签本身会消失。这是 Mercurial stores 标签的自然结果,它在一个版本控制的文件中。有关其他示例,请参阅 the wiki,但简而言之:
hg up -r 1.66
将您带到标记为 1.66
的修订版,它本身有一个 .hgtags
文件 而 没有 1.66
的条目] 在其中,因为您刚刚更新到的版本是在 在 名称 1.66
本身进入 .hgtags
之前创建的。据推测,这就是这里发生的事情。 (根据评论编辑:显然不是。我假设因为您显示的是文件中的行,所以您主要是在查看文件。现在它非常神秘。)
注意:当使用像 1.66
这样的标签名称作为 --rev
选项,或 运行 hg tags
时,Mercurial 扫描 all 前往 所有 他们的 .hgtags
文件。有一些复杂的代码来缓存结果,因为这个扫描很昂贵,但效果是 hg tags
应该 列出标签,即使你在.hgtags
文件。
当您再次创建标签时,Mercurial 首先删除旧标签(即全零行),然后创建具有相同哈希 ID 的新标签(即 f0519f072992c39346b65332e444492fc5694e14
) 线。新的 .hgtags
内容进入新的提交。更新到 1.66
应该会使 所有三个 行从文件中消失,因为 f0519f072992c39346b65332e444492fc5694e14
中的 .hgtags
文件是该文件的一个版本,没有1.66
的出现次数。但是只要你更新到头部,而不是标记 1.66
,你现在就会看到所有三行。同时hg tags
应该继续列出标签。
事实证明,相同的标签名称之前(错误地)用于此存储库上的本地标签,但随后被删除。因此,有一行删除了.hg/localtags
中的标签。这似乎也覆盖了非本地标签。从 localtags
文件中删除有问题的行解决了问题。