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

git仓库中.git 文件很大,怎么清理掉一部分

查询 .git 文件大小,在 git-bash 里执行(后面有些命令不能执行,也请在 git-bash 里执行)

windows11 安装好后右键没有 git bash 命令-CSDN博客

du -sh .git

// 592m  .git

操作前最好先备份一份,避免推送到远程时出错

直接用第 5 个方法,前 4 个方法没什么用,只做记录

1、直接删除根目录下的.git文件夹:但这样会丢失git历史记录,不建议使用

‌2、清理松散对象(作用不大):

最好别用,用了后下面删除全部 tag 时报找不到文件的错了。 

git gc --prune=now

强制立即删除未被引用的对象。减小了 3m 作用不大。

3、使用git branch和git tag命令清除本地的分支和标签(对 .git 文件作用不在)

查看分支

git branch

删除分支

git branch -d <branch-name>

删除远程分支,谨慎使用

git push origin --delete <branch-name>

查询本地 tag

git tag
删除本地 tag

git tag -d v1.0
删除远程 tag,谨慎使用

git push --delete origin v1.0
删除所有本地 tag

git tag -d $(git tag -l)
删除所有远程 tag,尽量别用

git push origin --delete $(git tag -l)

删除所有本地 tag 时遇到下面错误

error: could not delete references: cannot lock ref 'refs/tags/v2.0.12-hotfix.0': Unable to create 'D:/保存/test/web/.git/refs/tags/v2.0.12-hotfix.0.lock': File exists.

Another git process seems to be running in this repository, e.g.
an editor opened by 'git commit'. Please make sure all processes
are terminated then try again. If it still fails, a git process
may have crashed in this repository earlier:
remove the file manually to continue.

 单独删除这个 tag

git tag -d v2.0.12-hotfix.0

使用下面命令释放删除的 分支 和 tag 空间

git gc --prune=now --aggressive

 577m 减小了 8m,不痛不痒呀

4、使用git filter-branch命令:

删除仓库中的大文件或误添加的文件,很慢而且作用也不大

查找 .git 文件发现只有 .git\objects\pack 中的文件比较大,但不可直接删除。

删除了发现不能查看提交履历,赶紧退回。

可以使用以下命令来查找并删除这些大文件:

# 查找最大的文件
git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5 | awk '{print$1}')"# 删除大文件
git filter-branch --force --index-filter "git rm -r --cached --ignore-unmatch path/to/big/file" --prune-empty --tag-name-filter cat -- --all
git for-each-ref --format='delete %(refname)' refs/original/ | git update-ref --stdin
git reflog expire --expire=now --all
git gc --prune=now --aggressive

也没减小多少。 

上面这些不好使可能 没更改远程,可以fork 一下公司项目,然后在自己项目上调试,毕竟公司程序不让更改

5、使用BFG

BFG是一个非常有用的工具,可以帮助你移除大文件或敏感数据,而不需要完全重写历史记录。使用BFG的步骤如下:(电脑需要配置 java 环境)

下载BFG工具

https://repo1.maven.org/maven2/com/madgag/bfg/1.9.0/bfg-1.9.0.jar

支持 java8 的版本:https://repo1.maven.org/maven2/com/madgag/bfg/1.14.0/bfg-1.14.0.jar

使用方法一:

查找大文件:

git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5 | awk '{print$1}')"

逐一删除大文件记录:

注意:--delete-files 后面只能跟文件名,不能带路径,这样写是错误的

java -jar bfg-1.14.0.jar --delete-files /src/assets/font/SourceHanSansCN-Medium.otf /d/保存/test/web

解决办法:
cd src/assets/font/
java -jar ../../../bfg-1.14.0.jar --delete-files SourceHanSansCN-Medium.otf /d/保存/test/web

如果在 cmd 下执行这个命令,工程地址要写成 D:\保存\test\web 

 

git reflog expire --expire=now --all && git gc --prune=now --aggressive

使用方法二:

bfg 推荐的优化(删除大于50M的文件):

java -jar bfg-1.14.0.jar --strip-blobs-bigger-than 50M /d/保存/test/web

git reflog expire --expire=now --all && git gc --prune=now --aggressive

commit记录还在,但是已经打不开文件了,很好 

du -sh .git

// 123m  .git

减小了 400 m,很好 

然后,将更改推送到远程仓库:

git push origin --force --all
git push origin --force --tags

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

相关文章:

  • 国标GB28181视频平台EasyGBS校园监控方案:多场景应用筑牢安全防线,提升管理效能
  • 【学习笔记】机器学习(Machine Learning) | 第七章|神经网络(2)
  • Rust 学习笔记:错误处理
  • Web 技术与 Nginx 网站环境部署
  • Pycharm 选择Python Interpreter
  • 酒水饮料批发零售商城小程序开发
  • 深入浅出程序设计竞赛(洛谷基础篇) 第十三章 二分查找与二分答案
  • 小米MUJIA智能音频眼镜来袭
  • 如何查看 Ubuntu开机是否需要密码
  • 一键启动多个 Chrome 实例并自动清理的 Bash 脚本分享!
  • 视图+触发器+临时表+派生表
  • 使用Docker部署React应用与Nginx
  • 分组背包问题:如何最大化背包价值?
  • 基于Java在高德地图面查询检索中使用WGS84坐标的一种方法-以某商场的POI数据检索为例
  • 常见提示词攻击方法和防御手段——提示词越狱
  • 专题五:floodfill算法(太平洋大西洋水流问题)
  • 前端加载超大图片(100M以上)实现秒开解决方案
  • 【分治】快速排序
  • lowcoder数据库操作4:显示查询数据表格
  • 加载渲染geojson数据
  • list.forEach(s -> countService.refreshArticleStatisticInfo(s.getId())); 讲解一下语法
  • Blender cycles烘焙贴图笔记
  • Linux 文件(2)
  • JavaScript 中的五种继承方式进行深入对比
  • vue3 vite 项目中自动导入图片
  • Axure疑难杂症:垂直菜单展开与收回(4大核心问题与专家级解决方案)
  • 新能源汽车充电桩管理平台如何利用智慧技术优化资源配置问题?
  • Triton介绍和各平台支持情况分析
  • Spring 代理与 Redis 分布式锁冲突:一次锁释放异常的分析与解决
  • 每日c/c++题 备战蓝桥杯(洛谷P4715 【深基16.例1】淘汰赛 题解)