清理git中的大文件objects/pack
一、问题源:
经过排序是.git下pack文件过大了,足足2.5个G,也难怪会不让过。
所以…pack文件是啥?
在Git中,pack文件是Git用来存储和传输对象的一种方式。当Git仓库中的对象(如提交、树、文件等)数量增加时,Git会将这些对象打包成一个或多个pack文件,以减少存储空间和提高网络传输效率。 看了下,项目的提交记录和维护人员确实人多,好吧,那就从pack文件入手;
二、解决方案:
1、找到当前项目前五个最大的文件
git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5 | awk '{print$1}')"
这里看到是“release/report.json”文件占用最大,记录一下,下面用得着;
2、将大文件从git记录中移除
git filter-branch --force --index-filter 'git rm -rf --cached --ignore-unmatch 大文件名' --prune-empty --tag-name-filter cat -- --all
3、彻底删除并清理空间
rm -rf .git/refs/original/
git reflog expire --expire=now --all
git gc --prune=now
git gc --aggressive --prune=now
4、查看优化效果
查看效果我们可以用du -h -d 1 .git
来看当前git大小;
可以看到,经过处理已经优化到725MB了,最后同步到云端
5、同步到云端并删除本地仓库中已经不存在的远程跟踪分支
git push --force
git remote prune origin
6、再次尝试构建
可以看到,再次构建已经成功,下班!!!