2017-09-06 43 views
0

我有两个Mercurial存储库。两个回购都有自己无关的历史。让我们称他们为:在Mercurial中导入不相关的回购协议到另一个回购

  • “主”(包括项目本身)

我现在想“进口”的Lab回购到

  • “实验室”(包含一些相关内容) Main具有以下限制的回购:

    • 两个回购都应保留其历史。
    • Lab应作为子文件夹存储在Main中。
    • Lab的更改应位于合并到Main的分支中。

    以下https://www.mercurial-scm.org/wiki/MergingUnrelatedRepositories基本上可以工作,但不会创建分支。

  • +0

    *不创建分支*取决于您所指的“分支”。如果您希望传入存储库中名为'default'的分支将* renamed *重命名为某个其他名称(以便导入的提交不共享分支名称),则可以使用Convert扩展。请参阅https://stackoverflow.com/questions/7567636/using-the-hg-convert-extension-branchmap-option – torek

    +1

    相关:https://pt.stackoverflow.com/a/101243/64(葡萄牙语,但是图片可以帮助) –

    回答

    1

    给定资料库MainLab,可以合并Lab库到主存储库,并通过做其默认分支重命名为其他名称与convert扩展以下几点:

    1. 创建一个文件“branchmap .txt“包含default Lab。使用此分支图,“默认”分支中的Lab更改集将命名为“Lab”。如果您的实验室存储库中有其他分支机构,则可能需要额外的条目。
    2. 运行hg convert Lab Main --branchmap branchmap.txt。这假定实验室和主存储库目录以及branchmap.txt文件位于当前目录中。相应地调整路径。实验室变更集将被添加到主存储库。
    3. 在主存储库中,以下命令将Lab文件移动到Lab子目录中,然后将Lab分支与默认文件合并。
      a。 b。 mkdir Lab
      c。 d。 e。hg ci -m "Moved Lab files to Lab subdirectory"
      e。 f。hg update default
      f。 g。hg merge Lab
      g。 hg ci -m Merge

    现在您可以在将来继续修改Lab分支并根据需要合并为默认值。

    +0

    你也可以用“hg pull --force”来拉动无关的回购,然后合并你最终结合在一起的两个头。在这种情况下,您最终会得到一个包含两个根变更集的回购协议,这可能会让您感到困惑,但这样您可以为其中一个回购站保留变更集哈希值。 – ngoldbaum

    +0

    @ngoldbaum是的,但不会将传入的repo重命名为新的分支,对于合并,将文件重命名为子目录仍然需要完成。您也可以使用此方法获得两个根变更集,但'hg convert'也会将传入的默认分支重命名为另一个名称。 –