GIT历史存在大文件的解决办法
问题触发
在今天迁移项目的时候,触发了一个报错无法推送 refs 到远端。您可以试着运行“拉取”功能,整合您的更改
。看了看报错日志发现问题在这里:remote: Find the desired index: b4fc9cd2860327f09ae017bb50ecdadc9fc7d76a, size: 134.975MB, exceeds quota 100MB
可以看出是因为历史大文件导致的无法成功推送。
问题解决
1.找到这个大文件是什么
首先我们使用如下命令去找到这个大文件是什么:
git rev-list --objects --all | git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' | awk '/^blob/ {if ($3 > 100000000) print substr($0,53)}'
一般会返回如下的值
415 XXX.jar
在这个数据里面 415
代表的是大小 415M
,
后面就是代表着他的文件名称。
2.在历史中删除该文件
现在考虑使用git filter-repo
工具
2.1.安装 filter-repo
安装git-filter-repo
(如果尚未安装):
pip install git-filter-repo
2.2 根据大小删除文件
这个是根据大小来删除文件的办法
可以删除 100M
以上的文件
git filter-repo --strip-blobs-bigger-than 100M
3.清理本地仓库
这一步是为了防止有缓存等影响之后的数据:
git reflog expire --expire=now --all
git gc --prune=now --aggressive
git count-objects -vH # 检查仓库大小
4.强制推送清理后的历史
git push origin master --force
结束
补充说明
如果上述没有办法解决, 也可以试试 备选方案:手动创建新仓库。