2010-02-10 187 views
8

我有一个文件结构这样一个Git项目:合并两个Git仓库

Project_A/files... 

我有一个文件结构类似这样的另一个Git项目:

Project_B/ 
     Project_A/files... 
     files... 

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

我尝试使用子树合并,但我得到了一个错误说“进入‘XXX’重叠‘XXX’”

有没有一种方法来项目合并到项目B,并保留所有提交历史的?

在此先感谢!

+0

哪个存储库应该在重叠情况下获胜? – 2010-02-10 04:51:09

+0

@dirtytofu刚刚用移植技术完成了我的答案,可能是您的案例中更合适的解决方案。 – VonC 2010-02-10 09:21:02

+0

@gbacon理想情况下,我想合并这两个。 – dirtytofu 2010-02-11 20:30:22

回答

1

如果projectB已经包含projectAsubmodule,你应该:


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

见问题Git question: possible to merge two different by equal repositories?

+2

你的意思是“子树合并?”虽然我更喜欢淹没树。 – ebneter 2010-02-10 07:02:47

+0

@ebneter:固定。我不应该在6AM回答问题;) – VonC 2010-02-10 07:06:38

+0

Project_A当前不是Project_B的子模块。两个不同的开发仓库由两个不同的团队开始,现在我试图将我的团队仓库合并到他们的仓库中,但项目的不同文件结构似乎给我带来了一些问题。 – dirtytofu 2010-02-10 08:25:55

12

你可以做这样的事情:

在Project_A,使一个新的Project_A子目录和git MV到一切,所以Project_A现在看起来

Project_A/ 
    Project_A/files... 

然后,在Project_B中:

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 

...并修复如果需要merge_trial(或泡沫,冲洗,重复,直到你得到你想要的冲突/重叠)。

我已经做了一些完全像这样的事情,作为svn-> git迁移的一部分。

+0

除了git-mv之外,还有一种方法可以移动我的文件,以便我之前在Project_A中的所有提交也显示为新的修改结构? 我认为它必须做一些与git-filter-branch,但我还没有测试过这个命令。 – dirtytofu 2010-02-10 08:23:20

+0

是的,你可以使用git filter-branch来完成同样的事情。不过,在这种情况下,git mv可能会更容易。无论如何,当你将project_A提取到Project_B中时,所有的历史记录都会随之而来。 – ebneter 2010-02-10 08:33:21

+0

这对我来说非常合适!谢谢! – GaryO 2011-05-20 14:05:04