【BUG】删除git本地仓库/远程仓库历史版本中的大文件以减少仓库大小

目录

前言

  1. 某天像往常一样提交代码到gitee仓库,出现代码提交卡住不到的情况
    2. 我百思不得姐,坚信bug会自己修复自己的原则等待了5分钟,终于出现了如下提示
    原来是我的git提交的文件过大,触犯到了gitee的付费边缘。

排查过程

  1. 为什么会出现超过100M的大文件呢? 明明我连图片都没有几张,我这小项目也不可能有那么大的依赖
  2. 按照如下提示输入命令查询,是哪个小可爱(大文件)在阻止我上传
    3. 发现我居然之前的版本上传了jar包,还上传了几次!!!
    4. ok问题找到

解决过程

  1. 问题很明确: 历史提交的git版本有大文件存在,触发到了gitee免费权限的范围
  2. 所有需要整理git的历史版本记录,将本地的历史大文件全部去除
  3. 鉴于是我自己的项目,所有我直接把远程分支直接删除,把本地版本的大文件去除,再提交远程分支(多人项目当然不可取,此处为我自己项目就无所谓了)

通过如下命令查找历史大文件

在git bash Hear 中输入以下命令

java 复制代码
#  列出 10 个大文件
git rev-list --all | xargs -rL1 git ls-tree -r --long | sort -uk3 | sort -rnk4 | head -10

删除大文件,重构历史版本

java 复制代码
# 删除文件
git filter-branch -f --tree-filter "rm -f 要删除的文件路径(以当前目录为相对路径起点)" -- --all

提交

java 复制代码
git filter-branch -f --tree-filter "rm -f 要删除的文件路径" -- --all
# 推送
git push -f --all
# 重新检出克隆,查看文件是否已被删除
----------------------------------------------------------以下看需要操作
# 清理服务器文件、提交记录
# 以下命令在服务器 git 仓库储存目录下执行
# gitlab 默认所有仓库储存总文件夹 /var/opt/gitlab/git-data/repositories/@hashed,执行 gitlab-rake gitlab:backup:create 备份数据后,备份日志可以分析出具体项目储存的文件夹

# 标记所有引用中过期的记录,并将它们设为立即过期。引用包括分支(branch)、标签(tag)等。
git reflog expire --expire=now --all
# 通过垃圾回收(garbage collection)清理掉已经过期的引用以及与之关联的无效对象。--prune=now 表示立即清理过期的引用,--aggressive 则表示使用更激进的方式进行垃圾回收。
git gc --prune=now --aggressive

添加.ignore文件

复制代码
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

# Compiled class file
*.class

# Log file
*.log

# BlueJ files
*.ctxt

# Mobile Tools for Java (J2ME)
.mtj.tmp/

# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
*.mvn

*.gitignore
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*


# IntelliJ
/out/
.idea/

### Maven template
/**/target/**
target/
pom.xml.tag
pom.xml.releaseBackup
pom.xml.versionsBackup
pom.xml.next
release.properties
dependency-reduced-pom.xml
buildNumber.properties
.mvn/timing.properties
**/.mvn/
## File-based project format:
*.iws
*.iml
*.ipr
/**/target/

总结

完结撒花------只是提供解决思路,更多需要需自己检索更好的方法

相关推荐
Sayai17 小时前
Elasticsearch 日志检索 DSL 实战:时间范围查询、字段去重、分钟级统计与最新日志获取
大数据·运维·elasticsearch·搜索引擎·日志分析
老李IT笔记20 小时前
激活锁状态怎么检测:三个入口,四种返回值,一份排查顺序
git·智能手机·github
Joecien21 小时前
【2026实测】百炼 CLI 托管 Agent 教程:bl managed-agent 配置校验、版本回滚与变更预演(附完整命令)
人工智能·git·阿里云·知识图谱·agi
阿狗童鞋1 天前
Elasticsearch实战指南
大数据·elasticsearch·搜索引擎
IT大白鼠1 天前
搜索系列 · 第 04 篇——部署实操:内网集群落地
运维·elasticsearch·nosql
Elastic 中国社区官方博客1 天前
使用 Jev 作为 search reranker:基准测试与实现方法
大数据·运维·elasticsearch·全文检索
Elasticsearch1 天前
签名、密封、交付:使用 Vault 和 cert-manager 进行 ECK 证书管理
elasticsearch
行者-全栈开发1 天前
【码动四季·秋】从 commit 到发版全自动:Conventional Commits + semantic-release 发布流水线实战
git·ci/cd·自动化发布·atomgit·semantic-releas·语义化版本自动化·git 提交规范落地
看浪的路人1 天前
第5讲:Prompt 管理与版本追踪
大数据·数据库·elasticsearch
Elastic 中国社区官方博客2 天前
Kubernetes attributes processor v1:它对 EDOT Collector 意味着什么
java·大数据·elasticsearch·搜索引擎·贪心算法·kubernetes·全文检索