是否可以标记主父存储库并将标记添加到所有子存储库中?
如果没有这个,如果我要将项目作为子存储库删除并自行访问它,它将丢失所有标记信息,因为它只属于父存储库。
答案 0 :(得分:2)
这可能是有可能的,但有点棘手。您必须基本上编写自己的tag
实用程序(可能作为Mercurial扩展)来帮助收集所需的额外信息并对hg tag
进行额外调用。但是,在编写扩展时我对API知之甚少,所以我提供的任何想法都将基于使用命令直接调用hg
。
默认情况下,在主存储库上提交时,将首先提交子存储库。然后它为每个子参数获取新的变更集ID,并将它们放在.hgsubstate
文件中,格式如下:
77ba00000fe8e9ca033d97dc07b85a50dd106837 nested
递归标记需要获取.hgsubstate
文件的内容,就像它在主存储库中标记的变更集中一样。您可能会想到hg revert
,但这可能是一个坏主意,因为它可能会轻易破坏您的工作目录(hg
不喜欢在.hgsubstate
上执行此操作)。您最好的选择是为该修订执行hg export
并解析+
文件中.hgsubstate
行的结果差异。
然后你将从每个中取出changset id和subrepo名称,以便调用hg -R <subrepopath> tag -r <id> <tag>
。当然,最后标记主要回购。
这仍有潜在的问题,你必须要注意的事情或弄清楚如何生活。例如:如果您已经在主要仓库上承诺但在1个或更多子仓库上没有承诺,会发生什么?现在,您在主仓库中有多个变更集,其中.hgsubstate
在子仓位列出了相同的变更集ID。因此,如果您在主仓库上标记两者,则subrepo上的变更集将具有2个标记。
我正在使用TortoisHg 2.0.5 w / Mercurial 1.8.4。单独标记子存储库不会产生任何需要在主存储库上提交,它应该可以正常工作。