合并两个Git存储库


Merging two Git repositories

我有一个一Git项目,文件结构如下:

1
    Project_A/files...

我有另一个Git项目,文件结构如下:

1
2
3
    Project_B/
        Project_A/files...
        files...

现在,我想将项目A合并到项目B中,并继续使用项目B作为唯一的存储库。

我尝试使用子树合并,但在说"条目'xxx'与'xxx'重叠"时出错。

有没有一种方法可以将项目A合并到项目B中并保留所有提交历史记录?

事先谢谢!


你可以这样做:

在项目"A"中,将新项目"A"设为子目录,并将所有内容都放入其中,因此项目"A"现在看起来像

1
2
Project_A/
    Project_A/files...

然后,在项目B中:

1
2
3
4
5
git remote add project_A Project_A
git fetch project_A
git branch project_A project_A/master
git checkout -b merge_trial master
git merge project_A

…如有必要,在合并试验(或起泡,漂洗,重复,直到你得到你想要的冲突/重叠)。

作为SVN->Git迁移的一部分,我实际上做了类似的事情。


如果projectB已经包含projectA作为子模块,您应该:

  • 首先删除projectA作为projectB的子模块。
  • 然后尝试合并子树

如果projectA不是projectB的子模块,我建议将projectA提取到projectBrepo中,然后使用嫁接技术将两个提交行连接在一起,而不处理经典合并所涉及的所有合并冲突。

参见问题Git问题:是否可以通过相同的存储库合并两个不同的存储库?