清理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}')"

image

这里看到是“release/report.json”文件占用最大,记录一下,下面用得着;

2、将大文件从git记录中移除

git filter-branch --force --index-filter 'git rm -rf --cached --ignore-unmatch 大文件名' --prune-empty --tag-name-filter cat -- --all

image

3、彻底删除并清理空间

rm -rf .git/refs/original/
git reflog expire --expire=now --all
git gc --prune=now
git gc --aggressive --prune=now

image

4、查看优化效果

查看效果我们可以用du -h -d 1 .git来看当前git大小; image 可以看到,经过处理已经优化到725MB了,最后同步到云端

5、同步到云端并删除本地仓库中已经不存在的远程跟踪分支

git push --force
git remote prune origin

6、再次尝试构建

image 可以看到,再次构建已经成功,下班!!!