【问题标题】:Split out a branch into a new repo将一个分支拆分为一个新的仓库
【发布时间】:2020-10-27 16:41:09
【问题描述】:

我有一个 mercurial 存储库,现在有效地包含两个存储库。 在过去的某个时候,一个分支从 default 中分离出来(我们称之为 default-other)。 default 和 default-other 现在都有很多提交,并且没有计划将 default-other 合并回 default 。一些提交已从 default 移植到 default-other。

现在,我想从 default-other 分支创建一个新的 repo,同时保留完整的历史记录。即包含

的回购
  • 从 default 到创建 default-other 分支的所有提交
  • 所有来自 default-other 的提交
  • 从 default-other 分支出来的所有分支
  • default-other 分支后没有来自 default 的提交

理想情况下,我想对不同的分支使用不同的策略。有些分支是必须保留的发布分支,而另一些是我想折叠到新的 default 中的功能分支。

我尝试使用转换扩展,但我不知道如何正确设置分支图。

【问题讨论】:

    标签: mercurial


    【解决方案1】:

    我认为您几乎可以使用hg strip 完成您所说的所有事情。像这样的:

    1. 将原始存储库克隆到新存储库
    2. hg up null 从工作目录中删除任何内容(这样处理可能更快)
    3. 确定您要删除的所有分支(命名或匿名)和变更集。准确地说,您需要的是每个提交的变更集 ID 及其应删除的后代。
    4. hg strip -r 12345678890 对于每个提交。这将删除提交及其所有后代(可能包括合并)。

    如果需要,您可以执行此过程两次,但第二次去除正交变更集(属于 default-other 但不属于 default 的变更集) .

    也就是说,您可能仍想使用 hg convert 的几个原因:

    1. repo 中有不相关的文件。例如,如果 default 分支有一些与 default-other 无关的旧东西。您可以使用convert 来清除此类文件的历史记录。

    2. 您希望 default 和 default-other 看起来它们始终是同一个分支。您可以使用convert 重命名其中一个或两个。 (branchmap)

    3. 您希望确保新的存储库不能与原始存储库一起推送/拉取,这可能会打乱您所有精心设计的计划。通过“转换”整个 repo,IIRC 的所有变更集 ID 都将被更新,并且 repo 看起来不像原始的亲戚。


    我的建议是分阶段工作:

    1. 将原件克隆到 clone1
    2. 使用strip 尽可能多地完成工作
    3. 从 clone1 制作 clone2
    4. 运行convert任务#1
    5. 从 clone2 制作 clone3
    6. 运行convert任务#2

    等等

    我建议不要将许多不同的 convert 东西批处理在一起 - 以小增量运行它们。这似乎需要更长的时间,但这样更容易做到。

    最终,您可以移除所有中间克隆,但根据经验,我发现这是进行重大结构更改的最有效和最安全的方法。

    【讨论】:

      【解决方案2】:

      只需使用described in wiki 格式的分支图。在你的情况下,这很简单

      default-other default
      ...
      renamed-child1 default
      renamed-child2 default
      ...
      

      加法

      因为转换扩展不能停止条件“之前”的转换,只有“之后”(请参阅​​--rev 选项),您必须在转换过程之前为转换准备存储库(克隆到新的中间 repo 仅子集或原始变更集没有default,只有default-other 和后代?)

      【讨论】:

      • 谢谢,但是使用这个分支图,我会从 default-other 和 default 获得提交,但我想在 default-other 分支的地方“切断”默认值。更新了问题,使这一要求更加清晰。
      猜你喜欢
      • 2019-03-10
      • 2016-06-26
      • 2022-09-25
      • 2023-01-13
      • 1970-01-01
      • 2021-07-04
      • 1970-01-01
      • 2013-10-07
      • 1970-01-01
      相关资源
      最近更新 更多