推荐阅读:为什么你的 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

最新文章

  1. ROS学习(一)—— 环境搭建
  2. HTML5 Viewport Meta Tag
  3. grep -w
  4. Json传递后台数据的问题
  5. 从头开始学c++,补基础,补踏实
  6. 更快的方式实现PHP数组去重(转)
  7. 写代码质量改善java计划151建议——导航开始
  8. Touch Handling in Cocos2D 3.x(五)
  9. HTTPS如何保证数据传输的安全性 -- 结合加密
  10. nginx-1.服务器是什么
  11. Hadoop专业解决方案-第13章 Hadoop的发展趋势
  12. linux下redis安装步骤
  13. 4.Java基础:Java对象的内存管理机制
  14. Max Sum(经典DP)
  15. SSM 框架-04-使用maven创建web项目
  16. BZOJ5091 摘苹果(概率期望)
  17. 本地测试时修改localhost为自己网站的域名的方法(转载)
  18. 自定义编写jmeter的Java测试代码
  19. 13,发布CRM
  20. Javascript中的原型链、prototype、__proto__的关系

热门文章

  1. (四)Hibernate的增删改查操作(1)
  2. PHP常见函数
  3. 树莓派二:apt-get出错、蓝牙、汉化、输入法
  4. 在nuxt项目中使用component组件
  5. curl: (7) couldn't connect to host 解决方法
  6. 搭建KVM环境——07 带GUI的Linux上安装KVM图形界面管理工具
  7. [Mac][Python][Virtualenv]安装配置和使用
  8. 【2017-11-26】Linq表连接查询
  9. 创建守护进程步骤与setsid()
  10. contos7下安装redis&redis的主从复制的配置&redis 哨兵(sentinel)