【问题标题】:Merge different repositories into one将不同的存储库合并为一个
【发布时间】:2012-08-24 12:12:49
【问题描述】:

我有两个不同的 Mercurial 存储库,每个都有自己的历史。 有没有办法将两者合并到一个存储库中,同时拥有两者的完整历史记录?

【问题讨论】:

    标签: mercurial merge repository


    【解决方案1】:

    您可以使用-f 标志将一个拉入另一个:

    > cd path\to\repo1
    > hg pull -f path\to\repo2
    > hg merge
    
    .... deal with merge conflicts ....
    
    > hg commit -m "Merge with repo2"
    

    【讨论】:

    • 为确保不会发生合并冲突,只需在合并前将两个存储库之一中的所有文件移动到子文件夹中:mkdir foo; hg rename * foo。
    • 例如我有两个repos repo1和repo2。我想将 repo2 导入 repo1 以便目录结构如下所示:repo1/src/com/example/HelloWorld.java repo1/repo2/src/com/example/
    • 你可以按照马丁的建议去做。在repo2 中,您将执行mkdir repo2; hg rename * repo2; hg commit -m "Move repo2 files into a subfolder",然后按照我上面的说明进行操作(尽管除非您在repo1 中已经有一个repo2 文件夹,否则不会有合并冲突)
    • 结合马丁和史蒂夫的回答正是我想要的。谢谢大家!
    【解决方案2】:

    也许吧。试试这个方法:

    1. 克隆 repo #1
    2. 使用来自 repo #2 的 hg export 创建一组补丁
    3. 使用hg import将补丁导入克隆

    当两个 repos 有公共文件时,这将失败。这里的解决方案是使用hg patch 应用失败的补丁。

    背景:Mercurial 为每个变更集创建一个校验和。这个强加密校验和包含修改日期、用户名、父变更集的校验和和补丁。

    这意味着如果您尝试将变更集从一个 repo 复制到另一个 repo,这将失败,因为找不到父变更集。由于校验和,添加父变更集并不容易。

    【讨论】:

      猜你喜欢
      • 2023-03-22
      • 2010-09-21
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 2010-09-19
      • 2011-02-26
      • 2016-06-28
      • 1970-01-01
      相关资源
      最近更新 更多