给 Git 仓库瘦身,删除大文件的版本控制
Git仓库用久后;或者
.gitignore
文件一开始没有设置好,没有忽略掉大文件(比如:zip
,sql
,dll
… 等二进制文件),会把git仓库体积撑的很大,可达好几个G。这些大文件有些是没必要放进来的, 完全可以删除掉来精简仓库体积。
下面是解决方法步骤:
1. 查看存储库中的大文件
git rev-list --objects --all | grep -E `git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -10 | awk '{print$1}' | sed ':a;N;$!ba;s/\n/|/g'`
或者
git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -15 | awk '{print$1}')"
2. 改写历史,去除大文件
进入项目根目录(.git 文件夹所在的目录)
$ cd project
从提交历史中删除所有的zip
文件
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch *.zip' --prune-empty --tag-name-filter cat -- --all
从提交历史中删除uploads
文件夹中的所有文件
git filter-branch --force --index-filter 'git rm -r --cached --ignore-unmatch uploads/' --prune-empty --tag-name-filter cat -- --all
清除残余的 objects
并通过GC
回收空间
$ rm -rf .git/refs/original/
$ git reflog expire --expire=now --all
$ git gc --prune=now
$ git gc --aggressive --prune=now
强制推送覆盖远端仓库
git push origin --tags --force
git push origin --all --force
查看瘦身后的体积
$ du .git -lsh