github push失败,删除git历史中的大文件

转移repo的时候,直接push会报错文件大小受到限制,但是这个文件只存在于commit history, 并不在实际文件中。解决步骤如下。

  1. 使用如下的命令找出history的大文件.

https://stackoverflow.com/questions/10622179/how-to-find-identify-large-commits-in-git-history

1
2
3
4
5
6
git rev-list --objects --all |
git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' |
sed -n 's/^blob //p' |
sort --numeric-sort --key=2 |
cut -c 1-12,41- |
$(command -v gnumfmt || echo numfmt) --field=2 --to=iec-i --suffix=B --padding=7 --round=nearest
  1. 使用bfg -D <文件名>, 直接删除。

https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/removing-sensitive-data-from-a-repository

  1. 清理缓存。
1
git reflog expire --expire-now --all && git gc --prune-now --aggressive
  1. 强制推上Github。
1
git push -f
Notice: 正常情况下,这里会有一个基于utteranc.es的留言系统,如果看不到,可能需要科学上网方式。