.git目录文件过大
最近clone一个仓库发现文件夹巨大,查看具体文件体积并不大
后来发现是.git目录占用过多空间
显示pack内容
Git 往磁盘保存对象时默认使用的格式叫松散对象 (loose object) 格式
Git 时不时地将这些对象打包至一个叫 packfile 的二进制文件以节省空间并提高效率
而git verify-pack 命令就是用于显示已打包的内容
git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -3
sort命令中 -k 指定排序参照列, -n 依照数值的大小排序
tail命令 指定输出项数
输出具体对象内容
git rev-list 按照默认反向时间顺序,输出命令指定的commit objects
--objects 列出的提交引用的任何对象的对象ID
--all 全部匹配结果
git rev-list --objects --all | grep b098d1c7
上述两个命令可以合并成一个
这样的输出效果更明显,方便
awk 命令是处理文本文件强大分析工具,{print$1} 表示每行按空格或TAB分割,输出文本中第一项
git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5 | awk '{print$1}')"
重写历史(此后内容极具危险)
git重写历史中,以前常用到的就是
修改上一次提交
git commit --amend
而我们这一次所需要用到的内容是,“核弹级选项” git filter-branch
它可以修改大量的提交
--force 拒绝从现有的临时目录开始,强制执行改写操作
--index-filter 与tree-filter相比,不检查树,和git rm搭配使用,更快的生成版本
--ignore-unmatch 如果你想“完全忘记”一个文件,在输入历史记录时无关紧要
--prune-empty 表示如果修改后的提交为空则扔掉不要。实际可能虽然文件被删除了,但是还剩下个空的提交
--tag-name-filter cat 来简单地更新标签
--all 是针对所有的分支,注意前面多了一个 -- 这个是为了让分隔开git filter-branch 和 --all
crnn/trained_models_crnn_Rec_done_155_1084.pth 为你要删除的文件名
git filter-branch --force --index-filter "git rm --cached --ignore-unmatch 'crnn/trained_models_crnn_Rec_done_155_1084.pth'" --prune-empty --tag-name-filter cat -- --all
如果你想删除整个文件夹历史
git filter-branch --force --index-filter "git rm --cached --ignore-unmatch 'img/*'" --prune-empty --tag-name-filter cat ----all
更行清理优化
git for-each-ref 输出指定位置所有reflog条目,--format 指定带有特定字符的Object
git update-ref update reflog条目
git reflog expire 删除掉--expire时间早的reflog条目
git gc --prune= 对指定日期之前的未被关联的松散对象进行清理
git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin
git reflog expire --expire=now --all
git gc --prune=now
这时候查看磁盘占用空间
du -d 1 -h
更新到远程仓库
--verbose 详细输出运行log
--dry-run 做"真的update远程"以外所有工作
git push --force --verbose --dry-run
"真的update"
git push --force
最好的方法:不要把大文件放在git仓库
参考文章:
如何解决 GitHub 提交次数过多 .git 文件过大的问题? - 郑宇的回答 - 知乎
寻找并删除Git记录中的大文件
Pro Git
初次使用 git 的“核弹级选项”:filter-branch
转载于:https://www.cnblogs.com/bay1/p/10982254.html
.git目录文件过大相关推荐
- Git 之二 架构、工作流程、.git 目录文件
写在前面 Git 的官网上有很详细的使用教程(当然有翻译版本),具体地址是 https://git-scm.com/book/zh/v2.唯一不足就是,很多讲解并没有实机演示.但是,毫无疑问,官网 ...
- Git 提交报错,账户和密码错误 和 git add/git commit 文件太大太多
问题1: Git 提交报错,账户和密码错误 重新使用git进行作业提交 问题2: 源码太大文件太多,失败 git add . git commit idea push操作 问题3:git push 报 ...
- git pack文件过大
作者:Intopass 链接:https://www.zhihu.com/question/29769130/answer/45546231 来源:知乎 一:常规办法 1.删除无用的分支 gitbra ...
- 解决 .git 目录过大问题
点击下方"IT牧场",选择"设为星标" 来源:www.escapelife.site/posts/b400b7f8.html 01.问题描述 02.原因解释 0 ...
- Git清理过大的git目录objects文件
Git清理过大的git目录objects文件 Git清理过大的git目录objects文件 1. git rev-list --objects --all | grep "$(git ver ...
- git push 推送大文件失败的处理办法
不小心把数据库备份文件放到git目录里了,导致无法上传代码. 首先参考了 这篇文章 http://www.cnblogs.com/qmmq/p/4604862.html. 按照文中一开始说的去做,可还 ...
- git无法上传大文件
环境先描述一下,公司办公网自己在centos上搭建了gitlab,同时办公网的域名是从ST环境通过nginx解析过来的,这样一样就是文件经过两个nginx,按照网上的文章修改了两个nginx配置文件里 ...
- Git提交单个文件过大,git error: remote unpack failed:error Object too large
Table of Contents 一. 上传git出错 二. git基本概念 三. 解决 参考链接 一. 上传git出错 error: remote unpack failed: error Obj ...
- git 文件太大,清空历史commit
文章目录 提交历史太多之后会造成 .git object 文件体积过大 进行删除并强制提交 git checkout --orphan latest_branch git add -A git com ...
最新文章
- 4.10日一直报错application未注入的问题解决
- 来宾可以删除服务器文件怎么设置密码,服务器来宾用用户设置密码
- sqlplus怎样将名次显示在表的后面_一分一段表怎么用?2019年辽宁高考一分一段表...
- python struct pack解析_python struct pack
- 《Android开发从零开始》——25.数据存储(4)
- windows。forms.timer设置第一次不等待_适用于初学者的中线交易策略——金叉的三种设置条件...
- SpringMVC中使用@ResponseBody注解标注业务方法
- Java CAS无锁技术深度解析
- tablepc是什么平板电脑_tablepc平板电脑怎么截图
- 基于MVC4+EasyUI的Web开发框架经验总结(5)--使用HTML编辑控件CKEditor和CKFinder
- 【机器学习基础】正规方程法(Normal equation)(正则化和非正则化)——吴恩达课程笔记
- 多重中介效应的示例数据(内附STATA代码)
- 常见的web网站攻击类型
- C语言笑谈:C语言超级搞笑的代码,冷笑话我们程序员也会讲的啊!
- IT大学生成长周报 | 第 8 期
- 赵小楼《天道》《遥远的救世主》深度解析(45)肖亚文为什么最后能成为最大的受益者?
- Power BI中计算同比、环比
- MYSQL中,in、limt、升降序、count的用法
- 如何一步步打造完美的成绩查询系统平台?
- 【实例学模式】一针见血装饰器模式
热门文章
- python paramiko并发_Python之paramiko
- android中seekbar 常用属性列表,随笔–android中修改SeekBar控件默认显示-Fun言
- linux系统如何禁用网卡,Linux 中如何启用和禁用网卡?
- linux关机_3.5 开关机命令及7个运行级别《LINUX-centos7-操作系统入门到精通》
- php只获取来源域名不需要参数,在php中获取域名(不是子域)
- netty半包粘包 处理_老王:Netty到底是个什么鬼?有没有简单的理解方式?
- php ==gt;,谈谈PHP中的 -gt;、=gt; 和 :: 符号 - 易采站长站
- psql屏幕输出全部结果_CommandBuffer实现Distort屏幕扭曲效果
- 只有ajax会跨域吗_为什么跨域Ajax是安全问题?
- html5技术英文论文参考文献,英文论文的参考文献范例(精选8篇)