热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

git删除远程文件_利用bfg(取代gitfilterbranch)来删除你git中的大文件的方式

当你想要从你的gitrepo中删除大量文件做过滤的时候,你第一个会想到的是gitfilter-branch,但是这个使用不方便加上速度不快,幸好我们迎来

当你想要从你的git repo中删除大量文件做过滤的时候,你第一个会想到的是git filter-branch,但是这个使用不方便加上速度不快,幸好我们迎来了killer工具 - bfg. 他不会真正的把这些文件从最新的commit中删除。下面是具体步骤:

首先你需要以--mirror的方式来git clone你的仓库

git clone --mirror git://example.com/your-repo.git

447c77c34b85ee3c2937fab85fce33b8.png

删除超过大于10MB的文件

bfg --strip-blobs-bigger-than 10M your-repo.git

删除最大的文件(N个)

bfg --strip-biggest-blobs 100 your-repo.git

这个命令会删除你仓库最大的100个文件

如果你指定给定文件的blob IDs你可以直接这些ID放在文本中让他删除

bfg --strip-blobs-with-ids blobs.txt your-repo.git

bfg的原理不是通过修改你head files来实现,而是调整你的历史,当然如果你不想破坏对应的分支,你可以使用--protect-blobs-from选项,比如

bfg --protect-blobs-from master,dev,stage --strip-biggest-blobs 100 your-repo.git

这个选项表示我虽然删除100MB的文件,但是不去破坏master,dev,stage这三个分支

这里之所以推荐bfg,除了他速度快之外,另外一个就是他的语法简单,考虑上面的场景,如果你要用git filter-branch的话,你需要写

git filter-branch --index-filter 'git rm --cached --ignore-unmatch dumpfile.sql' merge-point..HEAD

这个一对比就看出来哪个对程序员更加友好了

删除完对应的文件之后,需要去清理你的gc以及reflog:

cd your-repo.git git reflog expire --expire=now --all && git gc --prune=now --aggressive

PS:

他不会破坏你的last commit,比如你在last commit中加入了大文件,他的-b是不会起作用的,这个时候你可以考虑使用--amend等

743cf73dd564a59e790eae9f16c46813.png



推荐阅读
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • Scala 实现 UTF-8 编码属性文件读取与克隆
    本文介绍如何使用 Scala 以 UTF-8 编码方式读取属性文件,并实现属性文件的克隆功能。通过这种方式,可以确保配置文件在多线程环境下的一致性和高效性。 ... [详细]
  • 微软Exchange服务器遭遇2022年版“千年虫”漏洞
    微软Exchange服务器在新年伊始遭遇了一个类似于‘千年虫’的日期处理漏洞,导致邮件传输受阻。该问题主要影响配置了FIP-FS恶意软件引擎的Exchange 2016和2019版本。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • PHP 过滤器详解
    本文深入探讨了 PHP 中的过滤器机制,包括常见的 $_SERVER 变量、filter_has_var() 函数、filter_id() 函数、filter_input() 函数及其数组形式、filter_list() 函数以及 filter_var() 和其数组形式。同时,详细介绍了各种过滤器的用途和用法。 ... [详细]
  • Git管理工具SourceTree安装与使用指南
    本文详细介绍了Git管理工具SourceTree的安装、配置及团队协作方案,旨在帮助开发者更高效地进行版本控制和项目管理。 ... [详细]
  • This pull request introduces the ability to provide comprehensive paragraph configurations directly within the Create Note and Create Paragraph REST endpoints, reducing the need for additional configuration calls. ... [详细]
  • 深入解析Java枚举及其高级特性
    本文详细介绍了Java枚举的概念、语法、使用规则和应用场景,并探讨了其在实际编程中的高级应用。所有相关内容已收录于GitHub仓库[JavaLearningmanual](https://github.com/Ziphtracks/JavaLearningmanual),欢迎Star并持续关注。 ... [详细]
  • 1.执行sqlsever存储过程,消息:SQLServer阻止了对组件“AdHocDistributedQueries”的STATEMENT“OpenRowsetOpenDatas ... [详细]
  • 深入解析Spring启动过程
    本文详细介绍了Spring框架的启动流程,帮助开发者理解其内部机制。通过具体示例和代码片段,解释了Bean定义、工厂类、读取器以及条件评估等关键概念,使读者能够更全面地掌握Spring的初始化过程。 ... [详细]
author-avatar
少爷自控_592
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有