Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Mercurial递归标记所有子存储库_Mercurial_Tags_Dvcs_Subrepos_Mercurial Subrepos - Fatal编程技术网

使用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上提交,它应该可以正常工作