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

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

相关文章:

  • Git 使用全攻略:从入门到精通
  • buuctf RSA之旅
  • Linux中的DNS的安装与配置
  • 羽毛球订场小程序源码介绍
  • Spring Boot 的高级特性与经典的设计模式应用
  • 排序复习/上(C语言版)
  • C++--内存管理
  • (已解决:基于WSL2技术)Windows11家庭中文版(win11家庭版)如何配置和使用Docker Desktop
  • 新能源充电桩智慧管理系统:未来新能源汽车移动充电服务发展前景怎样?
  • 网络Tips20-007
  • 深入探讨Java中的上下文传递与ThreadLocal的局限性及Scoped Values的兴起
  • Comsol如何确定合适的研究输出时步?
  • 高校快递物流管理系统设计与实现(SpringBoot+MySQL)
  • 网络协议之一根网线就能连接两台电脑?
  • 软件架构风格系列(7):闭环控制架构
  • 如何使用GIT管理项目代码
  • 【LeetCode】大厂面试算法真题回忆(93)--优雅数组
  • MacOS安装软件后无法启动报错:“已损坏,无法打开,你应该将它移到废纸篓“
  • w~自动驾驶合集1
  • JDK 21新特性详解
  • 再囤三个月库存!美国客户抢付尾款,外贸企业发货订单排到7月
  • 网约车司机猝死,平台和保险公司均拒绝赔偿,法院判了
  • 台陆委会将欧阳娜娜等20多名艺人列入重要查核对象,国台办回应
  • 前4个月全国新建商品房销售面积降幅收窄,房地产库存和新开工有所改善
  • 国家统计局:4月社会消费品零售总额同比增长5.1%
  • 家国万里·时光故事会|构筑中国船舰钢筋铁骨,她在焊花里展现工匠风范