概述
如果我们在使用的过程中不小心将较大的二进制文件加入到仓库中,那么随着我们提交次数的增多仓库的体积将会不断的膨胀,例如我在项目中每次都会编译出一些so库文件,但是我并没有忽略这些文件,每次都会提交,随着时间的推移仓库体积不断膨胀,将不能再推送到远程仓库中
我使用的是gitee远程仓库,由于仓库体积的不断膨胀,超出了最大限制,推送失败
1. 安装git-filter-repo
官方库地址和安装说明
- 手动安装 我们把git-filter-repo克隆岛=到本地,然后把git-filter-repo文件复制到/usr/local/bin 目录下即可,git-filter-repo实际上就是一个python文件git-filter-repo.py
- 通过pip安装
pip install git-filter-repo
2.列出仓库中的大文件
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}')"
3.强制彻底删除历史大文件
注意: 删除之前一定要先备份仓库
badfile是文件路径,比如 output/lib/a1.so
git filter-repo --path badfile --invert-paths --force
也可以批量删除
git filter-repo --path output/lib/*.so --invert-paths --force
批量删除某个文件的所有提交历史
git filter-repo --path output/lib/liba.so* --invert-paths --force
删除目录 output/lib/service
git filter-repo --path output/lib/service --invert-paths --force
删除完后filter-repo会自动执行git gc功能,不需要我们手动执行
4.强制推送到远端
git push -f origin master
5.额外说明
删除之后最好把一些二进制文件添加到.gitignore中不再提交,不然仓库还会不断增大
推送的过程中由于库太大推送到远端失败处理方式
HTTP 413 curl 22 The requested URL returned error: 413
可以尝试设置http buffer来解决
git config http.postBuffer 524288000
解决不了的话需要改成ssh的方式推送
查看当前的远端仓库地址设置
git remote -v
可以看到当前使用的是http地址,设置成ssh地址
git remote set-url origin ssh地址
ssh地址可以在gitee上查看
6.参考文章
仓库体积过大,如何减小(filter-branch方式)
仓库体积过大,如何减小?
用 git filter-repo 彻底删除Git中的大文件
git-filter-repo仓库地址
版权归原作者 小熊@XiaoXiong 所有, 如有侵权,请联系我们删除。