使用Mercurial递归标记所有子存储库



是否可以标记主父存储库并将标记添加到所有子存储库?

如果没有这一点,如果我将一个项目作为子存储库删除并单独访问它,它将丢失所有标签信息,因为这只属于父存储库。

这可能是可能的,但有点棘手。基本上,您必须编写自己的tag实用程序(也许是Mercurial扩展),以帮助收集所需的额外信息并对hg tag进行额外调用。然而,在编写扩展时,我对API了解不多,所以我提供的任何想法都将基于使用命令直接调用hg

默认情况下,在主存储库上提交时,会首先提交子存储库。然后,它为每个子Po获取新的变更集id,并将它们以如下格式放在.hgsubstate文件中:

77ba00000fe8e9ca033d97dc07b85a50dd106837 nested

递归标记需要获得.hgsubstate文件的内容,就像它在主存储库中标记的变更集中一样。你可能会想到hg revert,但这不是一个好主意,因为它很容易破坏你的工作目录(hg无论如何都不喜欢在.hgsubstate上这样做)。最好的办法是为该修订版执行hg export,并解析.hgsubstate文件上+行的差异。

然后,您将从其中的每一个中获取更改集id和子博客名称,以便调用hg -R <subrepopath> tag -r <id> <tag>。当然,最后标记主回购。

这仍然存在潜在的问题,你必须意识到或想办法应对这些问题。例如:如果你在主回购上承诺了,但没有在一个或多个子回购上承诺,会发生什么?现在,您在主repo上有多个变更集,其中.hgsubstate在子repo上列出了相同的变更集id。因此,如果在主repo上标记这两个,那么子repo上的变更集将有2个标记。

我使用的是TortoisHg 2.0.5 w/Mercurial 1.8.4。单独标记子仓库不需要在主仓库上进行任何承诺,它应该基本上可以正常工作。

最新更新