如何将含client/server的GitHub仓库拆分为两个独立仓库并保留提交历史
使用git filter-repo拆分仓库并保留提交历史
前置准备
- 克隆原仓库到本地(确保拉取完整提交历史):
git clone <原仓库的GitHub地址> cd <克隆后的仓库目录> - 安装
git filter-repo工具:根据系统选择对应命令,比如 macOS 用brew install git-filter-repo,Debian/Ubuntu 用sudo apt install git-filter-repo。
拆分client为独立仓库
- 复制原仓库目录作为client的工作副本(防止影响后续server的拆分操作):
cp -r <原仓库目录> ./client-repo cd ./client-repo - 执行filter-repo命令,保留仅与client文件夹相关的提交,并将client内的文件移到仓库根目录:
git filter-repo --path client/ --path-rename client/: - 在GitHub创建一个新的空仓库(命名为client),更新本地仓库的远程地址并推送:
git remote set-url origin <新client仓库的GitHub地址> git push -u origin main
拆分server为独立仓库
- 回到原仓库目录,复制一份作为server的工作副本:
cp -r <原仓库目录> ./server-repo cd ./server-repo - 执行filter-repo命令,保留仅与server文件夹相关的提交,并将server内的文件移到仓库根目录:
git filter-repo --path server/ --path-rename server/: - 在GitHub创建新的空server仓库,更新远程地址并推送:
git remote set-url origin <新server仓库的GitHub地址> git push -u origin main
删除原主仓库
- 确认两个新仓库的提交历史、文件内容都无误后,进入原仓库的GitHub页面,在「Settings」中找到「Delete this repository」选项完成删除。
- 本地的原仓库目录可直接删除。
注意事项
- 操作前务必备份原仓库,避免数据丢失。
- 如果原仓库存在多个分支,需要对每个分支重复上述filter-repo操作,或者在命令中通过
--branches参数指定要处理的分支。
内容的提问来源于stack exchange,提问作者stephaniex
相关产品推荐
相关产品推荐

