使用git filter-repo保留指定目录并迁移子目录至根目录
使用git filter-repo高效清理仓库并迁移目录
解决--path-rename的错误问题
你遇到的Empty path component found in input错误,是因为--path-rename的语法要求冒号后必须指定有效的目标路径,不能留空。要把src/module1下的内容移到仓库根目录,用.表示根目录即可。
正确的filter-repo命令
执行以下命令可以高效完成你的需求:
git filter-repo --path cmake --path src/module1 --path-rename src/module1:.
这条命令的作用:
--path cmake和--path src/module1:仅保留这两个目录的历史--path-rename src/module1:.:将src/module1下的所有文件和子目录直接迁移到仓库根目录- 自动删除所有未被指定保留的目录(如
ci/、doc/、src/module2等)
每日同步主仓库提交的方法
由于历史被重写,本地仓库与原主仓库的提交历史已不一致,直接拉取会冲突,按以下步骤同步:
- 添加原主仓库为远程源(如果还没加):
git remote add upstream <原主仓库的Git地址> - 拉取主仓库的最新提交:
git fetch upstream - 创建临时分支并处理主仓库的最新历史:
git checkout -b sync_temp upstream/main git filter-repo --path cmake --path src/module1 --path-rename src/module1:. - 将本地主分支同步到处理后的历史:
git checkout main git reset --hard sync_temp git branch -D sync_temp
注意事项
- 执行
git filter-repo前一定要备份原仓库,因为它会永久重写仓库历史,无法撤销 git filter-repo比git filter-branch效率高几个数量级,3450次提交通常几分钟就能完成
内容的提问来源于stack exchange,提问作者PiRK
相关产品推荐
相关产品推荐

