此问题在此处已有答案:
How do you merge two Git repositories?(26个答案)
3天前关闭。
我有一个git仓库,它包含在另一个git仓库中;我怎样才能在保持提交历史的情况下将内部文件永久地合并到外部文件中呢?为了更好地说明,下面是我的目录结构:
[dev]
> [ext]
...
> [libs]
...
> [tools]
...
dev
是我的git仓库A的根目录,它通过 .gitignore 规则排除了ext
目录中的所有内容。而ext
则是我的git仓库B的根目录。我希望只保留仓库A,并让它包含dev
下的所有内容,包括ext
的内容,同时将B的提交历史合并到A中--这样我就有了一个包含所有内容以及A和B的所有历史的存储库。
不涉及子模块;存储库的分离仅通过外部存储库上的排除规则来完成。
做这件事的最好方法是什么?
2条答案
按热度按时间uz75evzq1#
从moving开始,将存储库B的内容(在
ext
中)转移到存储库中的新ext
目录(即<project>/ext/ext
)。这样,在下一步中,存储库B的历史将“记住”它的源代码树属于
ext
目录。不要忘记提交此更改。
之后,你可以进入仓库A(根项目),将仓库B添加为远程仓库,获取它的不相关历史,然后创建一个继承自两个修订历史的合并提交。请注意,你需要将
--allow-unrelated-histories
传递给git-merge
以允许不相关历史的合并。默认情况下,
git merge
命令拒绝合并没有共同祖先的历史。当合并两个独立开始的项目的历史时,可以使用此选项来覆盖此安全性。总的来说,这些是要运行的命令:
pod7payv2#
首先,备份。其次,将
ext
中的所有内容推送到B
:删除子目录
ext
,并从.gitignore
中删除它:现在使用
git subtree
将B
导入到A
中: