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

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 中添加不应跟踪的文件模式

http://www.xdnf.cn/news/10327.html

相关文章:

  • LangChain-结合GLM+SQL+函数调用实现数据库查询(二)
  • Spring如何实现组件扫描与@Component注解原理
  • vscode 连接远程服务器
  • Json详解
  • Spring Boot,注解,@RestController
  • <5>, Qt系统相关
  • 哈 希 表
  • 快速掌握 GO 之 RabbitMQ 结合 gin+gorm 案例
  • 设计模式——策略设计模式(行为型)
  • GitLab CI、GitHub Actions和Jenkins进行比较
  • DAY 18 推断聚类后簇的类型
  • 核心机制:TCP 断开连接(四次挥手)
  • learn react course
  • TDengine 集群容错与灾备
  • 多自主水下航行器(AUV)协同围捕策略
  • 汽车安全:功能安全FuSa、预期功能安全SOTIF与网络安全Cybersecurity 解析
  • 【前端】成长路线
  • C#语音录制:使用NAudio库实现语音录制功能详解
  • MyBatis、MyBatis-Plus与MyBatis-Flex的区别
  • .net Avalonia应用程序生命周期
  • 经典面试题:一文了解常见的缓存问题
  • 视觉分析明火检测助力山东化工厂火情防控
  • 【前端】Vue中使用CKeditor作为富文本编辑器
  • Python应用for循环临时变量作用域
  • MATLAB中properties函数用法
  • 408《数据结构》——第二章:线性表
  • 【harbor】--配置https
  • 【LLM相关知识点】关于LLM项目实施流程的简单整理(一)
  • 操作系统学习(七)——互斥
  • 深入Java性能调优:原理详解与实战