前言
- 有些历史目录并没有保留回退的必要,反而占了很多的资源,需要清理
- 搜到到两个主流工具:BFG Repo-Cleaner 和 git filter-repo
- git filter-repo 被 git 官方推荐,下文用
git filter-repo
举例
清理过程
安装
git filter-repo
pipx install git-filter-repo
- 命令行进入本地 git 仓库目录
查看当前仓库的远程 URL
git remote -v
移除
lib20241231
目录# --invert-paths 相当于 delete 参数 # 默认无 invert-paths 是保留路径 # 加 invert-paths 反转为删除路径 git filter-repo --path lib20241231 --invert-paths
- 注意:git-filter-repo 会移除掉 git 配置文件中的 origin,防止误删除远程仓库
还原远程仓库地址
git remote add origin <repo-url-here>
推送
git push --all --force && git push --tags --force # OR git push origin --force --all git push origin --force --tags
检查清理是否生效
使用
git log
查看提交历史# 如果没有任何输出,说明该路径下的文件或目录已不再存在于任何提交中。 # 如果有输出,则表示还有提交包含该路径。 # 双短横 -- 是用来分隔命令选项和路径参数的 git log -- lib20241231
使用
git filter-repo --analyze
命令分析这会在 .git/filter-repo/analysis 目录下生成一些分析文件 所有目录,包括普通删除的目录,会出现在 directories-all-sizes.txt 文件里面 所有普通删除的目录,会出现在 directories-deleted-sizes.txt 文件里面 通过 git filter-repo 删除的目录,不会出现在上面两个文件里面
后记
- 在 git 服务端查找仓库目录时,注意所有字母要小写,比如仓库名为
AbcDef
,仓库目录名会是abcdef.git
本文出自 qbit snap
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。