如何拆分Git仓库并将指定目录内容迁移至根目录
拆分Git仓库并保留提交历史(将子目录内容移至根目录)
生成独立的my-library仓库(内容移至根目录)
- 克隆原仓库到本地新目录(避免修改原仓库)
git clone <原仓库URL> my-library-new cd my-library-new
- 使用
git filter-repo重写提交历史,仅保留my-library/目录下的内容,并将其移至仓库根目录:
git filter-repo --subdirectory-filter my-library/
此命令会自动清理所有与my-library/无关的提交,同时将该目录下的所有文件直接放到仓库根目录,完全匹配你的需求。
- 验证目录结构:
ls -la
此时根目录应直接包含src/和CMakeLists.txt。
- 创建新的远程仓库(例如GitHub上命名为
my-library),然后推送本地分支:
git remote set-url origin <新仓库远程URL> git push -u origin main
生成独立的tests仓库
- 重新克隆原仓库到新目录(或回到原仓库的干净克隆副本):
cd .. git clone <原仓库URL> tests-new cd tests-new
- 保留
tests/目录的提交历史:
git filter-repo --subdirectory-filter tests/
- 创建新的远程仓库(例如命名为
my-library-tests),推送本地内容:
git remote set-url origin <新tests仓库远程URL> git push -u origin main
注意事项
- 确保已安装
git filter-repo:Linux可通过包管理器(如apt install git-filter-repo)安装,Mac使用brew install git-filter-repo,Windows可从官方渠道下载脚本。 - 操作前务必备份原仓库,防止数据丢失。
- 所有操作均在原仓库的副本上进行,不会影响原仓库的内容。
内容的提问来源于stack exchange,提问作者Sisyffe
相关产品推荐
相关产品推荐

