如何将Git仓库中的部分子项目推送至第二个独立远程仓库
无需拆分原有仓库的实现方案
你不需要移除现有子项目再重新接入subtree,直接使用Git原生的git subtree split能力即可实现需求,完全不影响原有完整仓库向组织私有远程的推送、使用逻辑。
操作步骤
- 首先为每个子项目添加对应的目标远程仓库(以存放在总仓库
projects/sub-project1目录的子项目要推到GitHub仓库为例):
# 远程仓库名可以自定义,不同子项目设置不同的名称避免冲突 git remote add sub1-remote git@github.com:your-username/sub-project1.git
- 提取对应子目录的独立提交分支,该分支仅包含目标子目录的内容与相关提交历史:
# --prefix参数填子项目在总仓库中的相对路径,-b后面是本地临时分支的自定义名称 git subtree split --prefix=projects/sub-project1 -b sub1-split
- 将拆分后的独立分支推送到目标远程仓库的对应分支即可:
# 目标分支按需调整为main/master等你需要的分支名 git push sub1-remote sub1-split:main
使用说明
- 原有总仓库的所有操作不受任何影响,你可以正常提交、拉取、推送完整项目到组织私有远程,不需要调整现有目录结构
- 后续子项目有更新需要同步到第二个远程时,重复执行拆分、推送的两步命令即可,
git subtree split会自动增量提取新的提交,不会重复处理历史内容 - 如需双向同步,也可以将目标远程的改动拉回总仓库的对应子目录,命令为:
git subtree pull --prefix=projects/sub-project1 sub1-remote main - 子项目数量多的情况下可以把上述命令写成批量脚本,不需要额外安装第三方工具
内容的提问来源于stack exchange,提问作者SaschaH
相关产品推荐
相关产品推荐

