如何合并 2 git 个存储库?
How can I merge 2 git repositories?
我有两个 git 存储库,比如 project1 和 project2,project2 位于 project1 的子文件夹中:
/project1/.git (with contents of project2/ ignored)
/project1/project2/.git
我想知道如何将 project2 合并到 project1 中,具有相同的文件夹结构,但保留 project2 的历史记录?
我有一个简单的解决方案吗?
我会先将 project2
中的所有内容移动到一个子目录中,然后简单地将 project2
的修改后的存储库合并到 project1
.
中
假设您想将 project2
中的分支 PROJECT2_BRANCH
的内容和历史作为子模块合并到 project1
中的分支 PROJECT1_BRANCH
中:
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
最后,我将 project2 移动到一个临时文件夹中,然后:
git subtree add -P project2 ~/tmp_project2 PROJECT2_BRANCH
做的很好。
我有两个 git 存储库,比如 project1 和 project2,project2 位于 project1 的子文件夹中:
/project1/.git (with contents of project2/ ignored)
/project1/project2/.git
我想知道如何将 project2 合并到 project1 中,具有相同的文件夹结构,但保留 project2 的历史记录?
我有一个简单的解决方案吗?
我会先将 project2
中的所有内容移动到一个子目录中,然后简单地将 project2
的修改后的存储库合并到 project1
.
假设您想将 project2
中的分支 PROJECT2_BRANCH
的内容和历史作为子模块合并到 project1
中的分支 PROJECT1_BRANCH
中:
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
最后,我将 project2 移动到一个临时文件夹中,然后:
git subtree add -P project2 ~/tmp_project2 PROJECT2_BRANCH
做的很好。