git 查找大文件、删除大文件详细步骤

如在使用Git过程中不小心将较大的二进制文件加入仓库,那么仓库大小很快就会超过规定的配额,在Push的时候会报下面的错误:

remote: Powered by GITEE.COM [GNK-6.4]
remote: error: File: c91e5de4f55bedd0669db01036fc131ea8e516ce 380.66 MB, exceeds 100.00 MB.
remote: Use command below to see the filename:
remote: git rev-list --objects --all | grep c91e5de4f55bedd0669db01036fc131ea8e516ce
remote: Please remove the file from history and try again. (https://gitee.com/help/articles/4232)

好面代码中以给出了 c91e5de4f55bedd0669db01036fc131ea8e516ce ,可以通过以下命名知道是哪个文件超过限制大小

git rev-list --objects --all | grep c91e5de4f55bedd0669db01036fc131ea8e516ce

执行命令后会获取到文件名,也可以通过下面的步骤2通一查看已经知道的大文件。

0cc3dfbe8eec2fa11e941c9001f3f062ec66cf3c goviewxw/鄂尔多斯市.zip

然后就可以执行删除,强行远程推送,清除缓存就ok了,下面是详细的步骤

1. 压缩历史记录 删除无用的对象 优化存储结构 清理无效的引用  清除过期的临时文件
git gc
2. 查找大文件,"tail -20"中的20表示条数 git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -20 | awk '{print$1}')" 3. 删除大文件,”xxx.framework“是上一步中列出的大文件路径,遍历所有的commit,删除指定的文件,重写历史commit git filter-branch --force --index-filter 'git rm -rf --cached --ignore-unmatch xxx.framework' --prune-empty --tag-name-filter cat -- --all 4. 强行远程推送 git push origin --force --all 5. 清除缓存 rm -rf .git/refs/original/ git reflog expire --expire=now --all git gc --prune=now // 查看项目仓库大小 git count-objects -v