如何将多个Git仓库合并到主仓库并保留单个文件历史
合并多个独立Git仓库到主仓库并保留文件历史
需求
将多个独立Git仓库合并到名为mainrepo的主仓库,合并后结构如下:
mainrepo/repo1/:保留原repo1的src目录和pom.xml文件及对应结构mainrepo/repo2/:保留原repo2的src目录和pom.xml文件及对应结构mainrepo/repo3/:保留原repo3的src目录和pom.xml文件及对应结构
尝试过的无效方法
git subtree+git filter-repo组合:
执行命令:
问题:仅第一个仓库的操作有效,添加第二个仓库后,第一个仓库的历史记录会丢失。git subtree add --prefix=repo1 https://bitbucket.org/repos/repo1.git master git filter-repo --force --path src/ --path pom.xml --path-rename :repo1/- 尝试过Stack Overflow上的另外两种合并方案,均无法保留单个文件的完整历史。
可行解决方案
步骤1:初始化主仓库
mkdir mainrepo cd mainrepo git init cd ..
步骤2:对每个子仓库执行以下操作(以repo1为例)
git clone https://bitbucket.org/repos/repo1.git cd repo1 git filter-repo --force --path src/ --path pom.xml --to-subdirectory-filter repo1 cd ../mainrepo git pull --allow-unrelated-histories ../repo1/ cd ..
提示:将上述命令中的
repo1替换为repo2、repo3,重复执行即可完成所有仓库的合并。
内容的提问来源于stack exchange,提问作者Solaris
相关产品推荐
相关产品推荐

