删除git中无用的大文件
2024-09-02 15:45:15
推荐阅读:为什么你的 Git 仓库变得如此臃肿
有时候我们不小心提交了一些大文件上去,后来删除了,但是已经于事无补了,整个git的提及已经蹭蹭上去了。
这个时候怎么办呢?
1. 查看有哪些大文件(top 5)
git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5 | awk '{print$1}')"
2. git filter-branch
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch 文件名' --prune-empty --tag-name-filter cat -- --all
git filter-branch --index-filter 让
每个提交的文件都复制到索引(.git/index)中
然后运行过滤器命令:git rm --cached --ignore-unmatch 文件名 ,让每个提交都删除掉“文件名”文件
然后--prune-empty 把空的提交“修剪”掉
然后--tag-name-filter cat 把每个tag保持原名字,指向修改后的对应提交
最后-- --all 将所有ref(包括branch、tag)都执行上面的重写
3. 删除缓存下来的ref和git操作记录
git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin
git reflog expire --expire=now --all
4. 垃圾回收
上面2步把大文件的索引都切断了,这个时候进行垃圾回收,就可以很明显看到效果了
git gc --prune=now
5. 把.git里面的修改推上去
这个时候普通的push是不行的,需要强推
git push --force
最新文章
- ROS学习(一)—— 环境搭建
- HTML5 Viewport Meta Tag
- grep -w
- Json传递后台数据的问题
- 从头开始学c++,补基础,补踏实
- 更快的方式实现PHP数组去重(转)
- 写代码质量改善java计划151建议——导航开始
- Touch Handling in Cocos2D 3.x(五)
- HTTPS如何保证数据传输的安全性 -- 结合加密
- nginx-1.服务器是什么
- Hadoop专业解决方案-第13章 Hadoop的发展趋势
- linux下redis安装步骤
- 4.Java基础:Java对象的内存管理机制
- Max Sum(经典DP)
- SSM 框架-04-使用maven创建web项目
- BZOJ5091 摘苹果(概率期望)
- 本地测试时修改localhost为自己网站的域名的方法(转载)
- 自定义编写jmeter的Java测试代码
- 13,发布CRM
- Javascript中的原型链、prototype、__proto__的关系
热门文章
- (四)Hibernate的增删改查操作(1)
- PHP常见函数
- 树莓派二:apt-get出错、蓝牙、汉化、输入法
- 在nuxt项目中使用component组件
- curl: (7) couldn't connect to host 解决方法
- 搭建KVM环境——07 带GUI的Linux上安装KVM图形界面管理工具
- [Mac][Python][Virtualenv]安装配置和使用
- 【2017-11-26】Linq表连接查询
- 创建守护进程步骤与setsid()
- contos7下安装redis&;redis的主从复制的配置&;redis 哨兵(sentinel)