如何合并2个git存储库?

时间:2016-09-25 17:33:16

标签: git github merge git-branch

我有两个git存储库,比如project1和project2,而project2位于project1的子文件夹中:

/project1/.git (with contents of project2/ ignored)
/project1/project2/.git 

我想知道如何将project2合并到project1中,使用相同的文件夹结构,但保留project2的历史记录?

我有一个简单的解决方案吗?

2 个答案:

答案 0 :(得分:2)

我首先将project2内的所有内容移动到子目录中,然后将这样修改后的project2存储库合并到project1

假设您要将PROJECT2_BRANCHproject2分支的内容和历史记录作为子模块合并到PROJECT1_BRANCH中的分支project1中:

git clone /project1/project2 ~/tmp_project2
cd ~/tmp_project2
git checkout PROJECT2_BRANCH
mkdir project2
# The following line requires bash, it will not work in a POSIX shell.
# It basically "git mv"s into project2 everything except .git and project2
git ls-tree --name-only -z HEAD|{ while read -d '' f; do git mv "$f" project2; done; }
git commit -m "Moved everything into a new subdirectory project2"

git clone /project1 ~/project1_merged_with_project2
cd ~/project1_merged_with_project2
git checkout PROJECT1_BRANCH
git remote add proj2 ~/tmp_project2
git pull proj2 PROJECT2_BRANCH

git remote remove proj2
rm -rf ~/tmp_project2

答案 1 :(得分:0)

最后,我将project2移动到一个临时文件夹中,然后:

git subtree add -P project2 ~/tmp_project2 PROJECT2_BRANCH

做得很好。

相关问题