当前位置: 首页 > news >正文

Git仓库大文件清理指南

前言

当大文件被提交到 Git 仓库后又删除,但仓库体积仍然很大时,这是因为 Git 保留了这些文件的历史记录。要彻底清理这些文件并减小仓库体积,你需要重写 Git 历史。

注意事项

  1. 这会重写历史 - 所有协作者都需要重新克隆仓库

  2. 备份你的仓库 - 操作前先备份

  3. 通知团队成员 - 因为需要强制推送,会影响所有使用者

  4. 后续提交 - 确保不再提交大文件,考虑添加 .gitignore 规则

使用 git filter-branch

接下来我们使用git filter-branch从Git的整个历史记录中彻底删除某个文件,如下图,在我的gitee中有上传了一些模型文件,占用了大量的内存。

然后我们打开终端,执行游戏git命令,看看是否还有其他大文件。

此命令会显示前10个大文件,并显示文件大小,如 100MB data/large-file.zip

git rev-list --objects --all \| git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' \| awk '/^blob/ {print $3, $4}' \| sort -n -k1 \| tail -10 \| numfmt --field=1 --to=iec --suffix=B

因为我的是macOS,numfmt 命令在 macOS 上默认不可用,我的命令是用 awk 转换单位。

git rev-list --objects --all \| git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' \| awk '/^blob/ {print $3, $4}' \| sort -n -k1 \| tail -10 \| awk '{size = $1;if (size >= 1024*1024*1024) printf "%.2fGB %s\n", size/(1024*1024*1024), $2;else if (size >= 1024*1024) printf "%.2fMB %s\n", size/(1024*1024), $2;else if (size >= 1024) printf "%.2fKB %s\n", size/1024, $2;else printf "%dB %s\n", size, $2;}'

从输出情况来看,只有我想删除的文件有超过10MB,因此我可以直接使用限制大小来删除文件。

# 删除所有超过 10M 的文件
git filter-branch --tree-filter 'find . -size +10M -type f -delete' --prune-empty HEAD

然后gie会遍历你所有的历史提交,命令执行完成后接着执行以下命令

# 清理
rm -rf .git/refs/original/
git reflog expire --expire=now --all
git gc --prune=now
git gc --aggressive --prune=now# 强制推送
git push origin --force --all
git push origin --force --tags

预防措施

为避免将来出现此问题:

  • 使用 git-lfs (Git Large File Storage) 管理大文件

  • 设置预提交钩子检查文件大小

  • 在 .gitignore 中添加不应跟踪的文件模式

相关文章:

  • C++测开,自动化测试,业务(第一段实习)
  • 【PyQt5】PyQt5初探 - 一个简单的例程
  • 数据结构-排序-排序的七种算法(2)
  • Google Android 14设备和应用通知 受限制的设置 出于安全考虑......
  • Office办公文档软件安装包2024版
  • Java复习Day25
  • 性能优化 - 案例篇:缓冲区
  • Vue-1-前端框架Vue基础入门之一
  • Redis 缓存穿透、缓存击穿、缓存雪崩详解与解决方案
  • c++学习值---模版
  • Java设计模式详解:策略模式(Strategy Pattern)
  • [蓝桥杯]缩位求和
  • Odoo 中SCSS的使用指南
  • Vue框架2(vue搭建方式2:利用脚手架,ElementUI)
  • Python Day39 学习(复习日志Day4)
  • 鸿蒙OSUniApp PWA开发实践:打造跨平台渐进式应用#三方框架 #Uniapp
  • 用户资产化视角下开源AI智能名片链动2+1模式S2B2C商城小程序的应用研究
  • (9)-Fiddler抓包-Fiddler如何设置捕获Https会话
  • ACL基础配置
  • python爬虫:RoboBrowser 的详细使用
  • 网站关键词收录查询/企业网页制作
  • 衢州网站建设公司/成人用品推广网页
  • wordpress搭建知识库/seo专业培训seo专业培训
  • 经典重庆网站/seo诊断工具
  • 江门官网建站公司/网站推广引流最快方法
  • 企业网站制作 厦门/合肥网站seo费用