2017-05-29 44 views
0

我有一个Mercurial仓库,它有几个标签。这些标签用于发布管理,并且都包含版本号。所有标签始终添加在默认分支上。下面是我的.hgtags文件的摘录:为什么我的Mercurial标签不出现在标签列表中?

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目录没有帮助。

+0

您的.hgtags文件中是否有另一行删除标记,即“0000000000000000000000000000000000000000 1.66”? – planetmaker

+0

@planetmaker不,这是1.66的唯一行 – Chris

+0

Mercurial使用来自所有分支头的.hgtags文件,所以也许标签在另一个头中被删除? –

回答

0

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

0

当您将更新为特定标签时,标签本身消失。这是Mercurial 存储标签的方式的自然结果,该标签位于版本控制的文件中。见the wiki额外的例子,但在短:

hg up -r 1.66 

,会进入被标记1.66的修订,其本身所具有的.hgtags文件,做有它1.66项,因为修改你刚刚更新到创建之前名称1.66本身进入.hgtags。据推测,这是发生在这里的事情。 (编辑每条评论:显然不是,我假设因为你显示文件中的行,你主要看文件,现在它很神秘。)

注意:当使用标签名称1.66作为--rev选项或运行hg tags,Mercurial scans 全部头为全部为.hgtags文件。有一些复杂的代码来缓存结果,因为此扫描很昂贵,但效果是hg tags应该列出标记,即使您在.hgtags文件中看不到它。


当你去重新创造它的标签,水银首先删除旧的标签(这是全零线),然后创建与它相同的哈希ID新标签(这是f0519f072992c39346b65332e444492fc5694e14)线。新的.hgtags内容进入新的提交。由于f0519f072992c39346b65332e444492fc5694e14中的.hgtags文件是没有出现1.66的文件的版本,因此更新到1.66应使全部三个行从文件中消失。但只要您更新到头部,而不是标记1.66,您现在将看到所有三条线。同时hg tags应该继续列出标签。

+0

据我所知,标签的修订版本看不到它自己的标签,但我的问题是标签不能被标签修订版的子版本看到,即使检出缺省的头版本时也是如此。 – Chris

+0

有趣的......不应该发生,*提供*您更新(或让您的GUI更新)到实际的头,而不是标记的版本。如果使用命令行而不是TortoiseHg,问题会消失吗? – torek

+0

我使用命令行进行检查,如果这是你的意思,标签不会显示在'hg tags'中。 – Chris

相关问题