【问题标题】:Why does my Mercurial tag not show up in the list of tags?为什么我的 Mercurial 标签没有显示在标签列表中?
【发布时间】:2017-05-29 08:36:13
【问题描述】:

我有一个包含多个标签的 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 目录没有帮助。

【问题讨论】:

  • 您的 .hgtags 文件中是否有另一行删除了标签,即 0000000000000000000000000000000000000000 1.66
  • @planetmaker 不,这是 1.66 的唯一行
  • Mercurial 使用来自所有分支头的 .hgtags 文件,所以可能在另一个头中删除了标签?
  • @MarkTolonen 我认为不是。有什么简单的方法可以找到还是我必须手动检查每个分支头?
  • 在 Windows 上,您可以执行以下操作以在每个拓扑头上列出 .hgtags 的内容:for /f %r in ('hg heads -t -T {rev}\n') do @hg cat .hgtags -r %r。然后检查结果是否删除了标记。

标签: tags mercurial tortoisehg


【解决方案1】:

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

hg up -r 1.66

将您带到标记为1.66 的修订版,该修订版本身有一个.hgtags 文件没有在其中包含1.66 的条目,因为您刚刚的修订版updated-to 是在 名称 1.66 本身进入 .hgtags 之前创建的。据推测,这就是这里发生的事情。 (按 cmets 编辑:显然不是。我假设因为您显示文件中的行,所以您主要查看文件。现在它非常神秘。)

注意:当使用1.66 之类的标签名称作为--rev 选项或运行hg tags 时,Mercurial 会扫描所有头以寻找所有他们的@987654331 @ 文件。由于此扫描代价高昂,因此需要一些复杂的代码来缓存结果,但效果是hg tags 应该 列出标记,即使您在.hgtags 文件中看不到它。


当您再次创建标签时,Mercurial 首先删除旧标签(即全零行),然后创建具有相同哈希 ID 的新标签(即f0519f072992c39346b65332e444492fc5694e14)行。新的.hgtags 内容进入新的提交。更新到1.66 应该会使所有三行 从文件中消失,因为f0519f072992c39346b65332e444492fc5694e14 中的.hgtags 文件是该文件的版本,没有出现1.66。但只要您更新到头部,而不是标记1.66,您现在就会看到所有三行。同时hg tags应该继续列出标签。

【讨论】:

  • 我知道标签的修订版看不到自己的标签,但我的问题是标签的修订版的子修订版看不到标签,即使签出默认的头修订版也是如此.
  • 有趣...这不应该发生,假设您更新(或更新您的 GUI)到实际的头部,而不是标记的版本。如果您使用命令行而不是 TortoiseHg,问题会消失吗?
  • 我使用命令行进行了检查,如果这就是您的意思,标签不会显示在 hg tags 中。
  • 这不是我的意思,但足够了:应该显示标签。
  • 是的,这也是我的理解,它适用于除此之外的所有其他标签,即比该标签更旧和新的标签。您还有什么想法可以调试吗?
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2019-04-28
    • 1970-01-01
    • 1970-01-01
    • 2014-11-17
    • 1970-01-01
    • 1970-01-01
    • 2013-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多