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