6

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

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

4

1 回答 1

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。因此,如果您在主存储库上同时标记两者,则子存储库上的变更集将有 2 个标记。

我正在使用带有 Mercurial 1.8.4 的 TortoisHg 2.0.5。自己标记子存储库不需要在主存储库上提交,它应该可以正常工作。

于 2011-06-27T17:11:36.503 回答