寻找并删除Git记录中的大文件

https://rtyley.github.io/bfg-repo-cleaner/

在删除了项目中的大文件后,git 仓库的大小并没有改变,因为被删除的文件还保存在 git 历史中。

可以通过 git clone --depth=1 的方式,只克隆 git 仓库最近一次的提交。

如果想要彻底清理掉仓库的大文件可以使用下面的方法:

第一种方法

查找大文件

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

重写提交历史

1
git filter-branch -f --prune-empty --index-filter 'git rm -rf --cached --ignore-unmatch your-file-name' --tag-name-filter cat -- --all

推送到远程仓库

1
git push origin --force --all

第二种方法

使用已有工具 https://rtyley.github.io/bfg-repo-cleaner/

1
2
3
4
java -jar bfg.jar --strip-blobs-bigger-than 100M some-big-repo.git
cd some-big-repo.git
git reflog expire --expire=now --all && git gc --prune=now --aggressive
git push