给 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 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM