使用Mercurial递归标记所有子存储库
是否可以标记主父存储库并将标记添加到所有子存储库中使用Mercurial递归标记所有子存储库,mercurial,tags,dvcs,subrepos,mercurial-subrepos,Mercurial,Tags,Dvcs,Subrepos,Mercurial Subrepos,是否可以标记主父存储库并将标记添加到所有子存储库中 如果不这样做,如果我将项目作为子存储库删除并单独访问它,它将丢失所有标记信息,因为这只属于父repo。这可能是可能的,但有点棘手。基本上,您必须编写自己的tag实用程序(可能作为Mercurial扩展)来帮助收集所需的额外信息,并对hg tag进行额外调用。但是,在编写扩展时,我对API了解不多,因此我提供的任何想法都是基于直接使用命令调用hg 默认情况下,在主存储库上提交时,首先提交子存储库。然后它为每个子repo获取新的变更集id,并将它们
如果不这样做,如果我将项目作为子存储库删除并单独访问它,它将丢失所有标记信息,因为这只属于父repo。这可能是可能的,但有点棘手。基本上,您必须编写自己的
tag
实用程序(可能作为Mercurial扩展)来帮助收集所需的额外信息,并对hg tag
进行额外调用。但是,在编写扩展时,我对API了解不多,因此我提供的任何想法都是基于直接使用命令调用hg
默认情况下,在主存储库上提交时,首先提交子存储库。然后它为每个子repo获取新的变更集id,并将它们以如下格式放入.hgsubstate
文件中:
77ba00000fe8e9ca033d97dc07b85a50dd106837 nested
递归标记需要获取.hgsubstate
文件的内容,因为它在主存储库中标记的变更集中。您可能会想到hg revert
,但这不是一个好主意,因为它很容易弄脏您的工作目录(hg
不喜欢在.hgsubstate
上执行)。最好的方法是对该修订版执行hg export
,并解析.hgsubstate
文件中+
行的结果差异
然后,为了调用hg-R tag-R
,您将从每一个变量中获取changset id和subrepo名称。当然,最后要标记主回购协议
这方面仍然存在潜在的问题,你必须意识到这些问题,或者想办法解决这些问题。例如:如果您在主回购协议上进行了承诺,但没有在一个或多个子回购协议上进行承诺,会发生什么情况?现在,主repo上有多个变更集,.hgsubstate
在子repo上列出了相同的变更集id。因此,如果在主回购上同时标记这两个,子回购上的变更集将有两个标记
我使用的是Ottoishg2.0.5w/Mercurial 1.8.4。单独标记子存储库并不需要在主repo上提交,它应该可以正常工作