【问题标题】:Recursively tag all Sub-Repositories using Mercurial使用 Mercurial 递归标记所有子存储库
【发布时间】:2011-06-27 10:43:50
【问题描述】:

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

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

【问题讨论】:

    标签: mercurial tags dvcs subrepos mercurial-subrepos


    【解决方案1】:

    这可能是可能的,但有点棘手。您基本上必须编写自己的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。因此,如果您在主 repo 上同时标记两者,则子 repo 上的变更集将有 2 个标记。

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

    【讨论】:

      猜你喜欢
      • 2011-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多