git仓库体积过大,如何减小?git仓库体积压缩,使用git-filter-repo删除历史大文件

概述

如果我们在使用的过程中不小心将较大的二进制文件加入到仓库中,那么随着我们提交次数的增多仓库的体积将会不断的膨胀,例如我在项目中每次都会编译出一些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仓库地址

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值