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

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.lryc.cn/news/2380359.html

相关文章:

  • MySQL安装实战指南:Mac、Windows与Docker全平台详解
  • Rocky Linux 远程服务器画面GUI传输到本地显示教程——Xming
  • 出现 org.apache.catalina.starup.HostConfig.deployDirectory 把web 应用程序部署到目录 解决方法
  • 游戏引擎学习第283天:“让‘Standing-on’成为一个更严谨的概念
  • React集成百度【JSAPI Three】教程(001):快速入门
  • python学习day2
  • VAPO:视觉-语言对齐预训练(对象级语义)详解
  • C语言学习笔记之函数
  • 集合进阶2
  • 2025云上人工智能安全发展研究
  • 【C++】模版(1)
  • 基于开源AI智能名片链动2+1模式S2B2C商城小程序源码的去中心化商业扩散研究
  • 5月19日day30打卡
  • 白杨SEO:不到7天,白杨SEO博客网站百度搜索显示和排名恢复正常!顺带说说上海线下GEO聚会分享和播客红利
  • Windows软件插件-音视频捕获
  • go 与面向对象编程(OOP)
  • Mergekit——任务向量合并算法Ties解析
  • Java 应用中的身份认证与授权:OAuth2.0 实现安全的身份管理
  • 【氮化镓】偏置对GaN HEMT 单粒子效应的影响
  • Mysql 索引概述
  • HttpServletRequest常用功能简介-笔记
  • 解决RAGFlow部署中镜像源拉取的问题
  • uniapp打包H5,输入网址空白情况
  • wsl2中Ubuntu22.04配置静态IP地址
  • C++(21):fstream的读取和写入
  • NAT/代理服务器/内网穿透
  • Unity 多时间源Timer定时器实战分享:健壮性、高效性、多线程安全与稳定性能全面解析
  • 深入解析Spring Boot与Spring Security的集成实践
  • 【iOS】探索消息流程
  • 用户账号及权限管理:企业安全的基石与艺术