1. 运行 gc
,生成 pack
文件
$ git gc --prune=now
2. 找出最大的三个文件
代码语言:javascript复制$ git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -3
# 输出:
4d2ae4c4413740d81019aa65691a2f75f00a5d3b blob 657413784 136436872 5330845
4d2ae4c4413740d81019aa65691a2f75f00a5d3b blob 657413784 136436872 5668892
4d2ae4c4413740d81019aa65691a2f75f00a5d3b blob 657413784 136436872 6313927
3. 查看大文件是什么文件
代码语言:javascript复制$ git rev-list --objects --all | grep 4d2ae4c4
# 4d2ae4c4413740d81019aa65691a2f75f00a5d3b 15504.hprof
4.移除对该文件的引用(也就是 15504.hprof
)
$ git filter-branch --force --index-filter "git rm --cached --ignore-unmatch '15504.hprof'" --prune-empty --tag-name-filter cat -- --all
5.进行 repack
$ git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin
# 这会清除分支变更历史
$ git reflog expire --expire=now --all
$ git repack -A -d
$ git gc --prune=now
$ git gc --aggressive --prune=now
#检查完整性
$ git fsck --full --unreachable
# 最后push到远程仓库
$ git push --force
6.查看 pack
的空间使用情况
$ git count-objects -v