2011-06-27 28 views

回答

2

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

默认情况下,当您在主存储库上提交时,首先提交子存储库。然后,它需要新的变更ID为每个subrepo并把它们在.hgsubstate文件中这样的格式:

77ba00000fe8e9ca033d97dc07b85a50dd106837 nested 

递归标签将需要得到.hgsubstate文件的内容,因为它是在变更你正在主存储库中进行标记。你可能会想到hg revert,但这不是一个好主意,因为它可以很容易地清理你的工作目录(hg不喜欢在.hgsubstate上执行它)。你最好的选择是修改hg export,并解析.hgsubstate文件中+行的结果差异。

然后,您将从每个这些人中获取changset id和subrepo名称,以便拨打hg -R <subrepopath> tag -r <id> <tag>。当然,最后标记主要回购。

这仍然有潜在的问题,你必须保持意识或弄清楚如何生活。例如:如果您在主要的回购仓库中承诺但不在一个或多个subrepos上会发生什么情况?现在,您在主要回购库上有多个变更集,其中.hgsubstate在子索引中列出了相同的变更集标识。因此,如果您在主repo上标记两个变量,则subrepo上的变更集将包含2个标签。

我正在使用TortoisHg 2.0.5 w/Mercurial 1.8.4。自行标记子库不会产生任何需要在主库上进行提交的情况,它应该大部分工作正常。

相关问题