如何将projectB迁移至新Git仓库并添加剩余projectA为子模块
迁移
projectB到独立仓库并引入projectA作为子模块的方案 步骤1:提取projectB的完整提交历史(不碰原仓库)
- 先克隆原
projectA的本地副本,避免直接修改原仓库:
git clone <原projectA的Git地址> projectA-temp cd projectA-temp
- 用
git filter-repo提取仅和projectB相关的提交历史,同时把projectB下的内容移到仓库根目录:
git filter-repo --subdirectory-filter projectB
执行后,当前仓库的提交历史就只剩projectB的相关记录,所有文件都在根目录。
步骤2:推送projectB到新的GitHub仓库
- 创建好新的GitHub仓库
projectB后,把处理后的本地仓库推上去:
git remote add new-origin <新projectB的GitHub地址> git push -u new-origin main # 分支名是master的话就改成master
步骤3:在新projectB仓库中添加projectA作为子模块
- 克隆新的
projectB仓库到本地(或者直接在刚才的projectA-temp目录继续操作):
cd .. git clone <新projectB的GitHub地址> projectB-new cd projectB-new
- 创建
lib目录,把原projectA作为子模块加到lib/projectA:
mkdir -p lib git submodule add <原projectA的Git地址> lib/projectA
- 提交并推送这个更改:
git add .gitmodules lib/projectA git commit -m "Add projectA as submodule in lib" git push
可选:清理原projectA中的projectB目录
- 如果不需要在原
projectA里保留projectB,可以回到原仓库删除它:
cd ../projectA # 切换到原projectA仓库目录 git rm -r projectB git commit -m "移除projectB目录(已迁移至独立仓库)" git push
验证结果
- 原
projectA仓库完全不受影响,所有迁移操作都在本地副本完成 - 新
projectB仓库保留了原projectB的完整提交历史,目录结构符合预期,且通过子模块依赖projectA
内容的提问来源于stack exchange,提问作者mariob6
相关产品推荐
相关产品推荐

