我有一个文件结构这样一个Git项目:合并两个Git仓库
Project_A/files...
我有一个文件结构类似这样的另一个Git项目:
Project_B/
Project_A/files...
files...
现在我想将项目A合并到项目B中,并继续使用项目B作为唯一的存储库。
我尝试使用子树合并,但我得到了一个错误说“进入‘XXX’重叠‘XXX’”
有没有一种方法来项目合并到项目B,并保留所有提交历史的?
在此先感谢!
我有一个文件结构这样一个Git项目:合并两个Git仓库
Project_A/files...
我有一个文件结构类似这样的另一个Git项目:
Project_B/
Project_A/files...
files...
现在我想将项目A合并到项目B中,并继续使用项目B作为唯一的存储库。
我尝试使用子树合并,但我得到了一个错误说“进入‘XXX’重叠‘XXX’”
有没有一种方法来项目合并到项目B,并保留所有提交历史的?
在此先感谢!
如果projectB
已经包含projectA
为submodule,你应该:
projectA
as a submodule到projectB
如果projectA
是不是projectB
一个子模块,我会建议提取projectA
我nto projectB
repo,然后使用嫁接技术将两条提交行链接在一起,而不处理经典合并所涉及的所有合并冲突。
见问题Git question: possible to merge two different by equal repositories?
你可以做这样的事情:
在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迁移的一部分。
除了git-mv之外,还有一种方法可以移动我的文件,以便我之前在Project_A中的所有提交也显示为新的修改结构? 我认为它必须做一些与git-filter-branch,但我还没有测试过这个命令。 – dirtytofu 2010-02-10 08:23:20
是的,你可以使用git filter-branch来完成同样的事情。不过,在这种情况下,git mv可能会更容易。无论如何,当你将project_A提取到Project_B中时,所有的历史记录都会随之而来。 – ebneter 2010-02-10 08:33:21
这对我来说非常合适!谢谢! – GaryO 2011-05-20 14:05:04
哪个存储库应该在重叠情况下获胜? – 2010-02-10 04:51:09
@dirtytofu刚刚用移植技术完成了我的答案,可能是您的案例中更合适的解决方案。 – VonC 2010-02-10 09:21:02
@gbacon理想情况下,我想合并这两个。 – dirtytofu 2010-02-11 20:30:22