给 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 
posted @ 2021-01-04 10:45  Run2948  阅读(1520)  评论(0编辑  收藏  举报