用 git filter-repo 彻底删除Git中的大文件

0. Intro

网上能搜到的资料大部分都是 git filter-branch,不仅速度慢,还容易出问题,而且官方都在使用git filter-branch时推荐git filter-repo,因此尝试一下官方推荐的方法

1. 安装git-filter-repo

官方Git库有很详细的说明

这里选择通过pip安装,windows需要手动安装python或者conda

pip install git-filter-repo

2. 找出要删除的大文件

按照文件大小升序排列并取最后40个文件

git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -40 | awk '{print$1}')"

注意嵌套语句会导致排序错乱,可以拆开逐个寻找文件

git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -40
git rev-list --objects --all | grep 文件对应的id

3. 彻底删除大文件

官方文档列出了各种功能,在此就不一一展示了

由于本人不小心上传了大量csv文件,因此使用正则匹配将所有csv文件删除

git filter-repo --force --invert-paths --path-regex .+\.csv

4. 强制推送到远端

由于修改了历史的commit,因此仓库无法正常推送到远端,需要进行强制推送

git push -f origin master

5. 额外说明

以上命令都是在linux下,如果使用windows系统的话,可以先通过 conda 安装 git-filter-repo,再通过git自带的MINGW运行带有|这种cmd不兼容的命令,最后通过 conda 运行git filter-repo

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容