一些时候由于开发初期经验不足和贪图方便, 会把一些不应该提交到 Git 的文件上传到 Github, 带来一系列安全问题, 更有可能是把一些大文件上传到 GitHub 上, 导致项目非常臃肿, 每次 pull、push 都要花费很多时间.

超 100000 个 GitHub 代码库泄露了 API 或加密密钥

关于如何更好的管理大文件, 可以阅读 更好的在 Git 项目中保存大文件(Git LFS 的使用) - 质子 - 博客园.

这时候就可以寻求一些特殊的工具的帮助, BFG Repo-Cleaner by rtyley 就是这样一款工具, 可以从 Git 项目中彻底删除某一个文件的历史记录.

下载及运行

BFG Repo-Cleaner是由 Scala (一种JVM语言) 写成, 所以会被编译成 jar 包, 下载非常方便, 下载地址可在官网或直接点击 bfg 下载地址.

但因此运行 bfg.jar 就需要 Java 环境, 关于 Java 环境的安装, macOS可以参考 macOS 的 JDK 安装问题, 而 Windows 已经有很多人提过, 不做赘述.

让它完全消失

首先需要自行从项目中删除不想要的文件并提交, 这样能最大程度避免误删、误操作.

## 首先需要自行从项目中删除不想要的文件
rm file-to-delete ## 提交改动, 即最新分支是不包含要被删除的文件
git commit -m "删除 file-to-delete"
git push

然后使用 --mirror 命令裸克隆(clone)整个项目.

git clone --mirror git@github.com:username/some-project.git

## 根据经验, 如果是包含大文件的项目, 使用 ssh 将会克隆的非常缓慢, 可以改用 https
git clone --mirror https://github.com/username/some-project.git ## 这个时候, 你的当前目录下就会产生一个名为 some-project.git 的文件夹

接着开始删除文件历史.

## 根据情况的不同, bfg 可选择根据文件大小删除
java -jar bfg.jar --strip-blobs-bigger-than 100M some-project.git ## 根据情况的不同, bfg 可选择直接根据名字删除
java -jar bfg.jar --delete-files name-of-file some-project.git

任选以上命令执行其中一个后, 执行 git gc 真正删除这些文件并提交.

cd some-project.git
git reflog expire --expire=now --all && git gc --prune=now --aggressive
git push

这时候那个文件就会消失了…

彻底删除 Git 项目中的文件(BFG Repo-Cleaner 用法)的更多相关文章

  1. 如何永久删除git仓库中敏感文件的提交记录

    如何永久删除git仓库中敏感文件的提交记录 参考: 1. https://help.github.com/articles/remove-sensitive-data/

  2. git忽略文件并删除git仓库中的文件

    问题描述 不慎在创建.gitignore  文件之前的时候将文件push到了 git仓库,即使之后在.gitignore文件中写入新的过滤规则,这些规则也不会起作用的,git依然会对所有git仓库中的 ...

  3. 如何删除GIT仓库中的敏感信息

    如何删除GIT仓库中的敏感信息 正常Git仓库中应该尽量不包含数据库连接/AWS帐号/巨大二进制文件,否则一旦泄漏到Github,这些非常敏感信息会影响客户的信息安全已经公司的信誉.公司可能其它还有相 ...

  4. (转) eclipse项目中.classpath文件详解

    背景:对于java项目中.classpath文件中的相关定义一直不是很了解,有必要进行深入的学习. 1 前言 在使用eclipse或者myeclipse进行Java项目开发的时候,每个project( ...

  5. 对Android项目中的文件夹进行解释

    对Android项目中的文件夹进行解释: · src:里面存放的是Activity程序,或者是以后的其他组件,在此文件夹之中建立类的时候一定要注意,包名称不能是一级. · gen:此文件夹中的内容是自 ...

  6. 如何查看.Net源代码vs版本号以及C#项目中各文件的含义

    查看.Net源代码vs版本号以及C#项目中各文件的含义 用记事本打开vs项目的.sln文件. 第2行就是这个源代码包的开发软件vs版本号了 注意了,如果是vs2003的sln文件通常没有这行,可以判断 ...

  7. MyEclipse项目中的文件点击右键Team选项中没有提交到SVN中的选项是怎么回事

    MyEclipse项目中的文件点击右键Team选项中没有提交到SVN中的选项是怎么回事 其实你已经可以百度到很多方法: 例如下面博客提供的 http://www.xuebuyuan.com/95285 ...

  8. Vue项目中的文件/文件夹命名规范

    Vue项目中的文件/文件夹命名规范 0.2262018.09.21 16:01:09字数 820阅读 6979 文件或文件夹的命名遵循以下原则: index.js 或者 index.vue,统一使用小 ...

  9. 删除c++项目中的类

    关闭引擎和vs 在工程目录中删除Source文件夹下相应的cpp和h文件 删除工程目录的saved 文件夹和intermediate文件夹 删除工程目录中binaries文件夹内的所有内容 右键工程文 ...

随机推荐

  1. idea-----Idea在不关闭project的情况下进行Import Project

    Idea在不关闭project的情况下进行Import Project 引用:https://blog.csdn.net/qq_28198181/article/details/83069667

  2. 虚拟机上CentOS7 配置NAT模式

    1. 虚拟机网络适配器选择NAT模式 2. 使用vi编辑/etc/sysconfig/network-scripts/ifcfg-ens32 vi /etc/sysconfig/network-scr ...

  3. 【JZOJ3317】管道

    description Hotham市再次被Jester袭击.这一次,Jester攻击的目标是Hotham的供水系统.Hotham的淡水存储在N个水库,由M个管道连接. 任意2个水库之间至少有一条路径 ...

  4. input判断输入值是否合法

    1.判断input输入的值是否合法有很多办法,我这里使用的是在onchange时进行判断,代码如下:[所有主要浏览器都支持] <input type="text" name= ...

  5. ng-zorro-mobile中遇到的问题

    一.Modal(弹出框)使用上的问题 在官方文档中,Modal是这样使用的: 这里需要注意的一点就是,看到上方代码中只用了Modal的全局方式,所以个人认为下面这段注入初始化的东西是没有用的便去掉: ...

  6. Java-MyBatis-MyBatis3-XML映射文件:insert, update 和 delete

    ylbtech-Java-MyBatis-MyBatis3-XML映射文件:insert, update 和 delete 1.返回顶部 1. insert, update 和 delete 数据变更 ...

  7. jun引导1.04可以让N3050支持6.2

    1.03引导用在3050可以安装 但是安装后找不到dsm 需要手动插拔电源才可以解决 偶尔还会死机 1.04可以引导3050安装6.2 23739 安装24922正常,但是moments传照片后会死机 ...

  8. 我学习python没有记住的东西

    格式化 # 格式化 a=123 b='ww' print("%d,%s,%%"%(a,b)) # %d,%s,%f,%c,%f 格式化代码:print('{}{}'.format( ...

  9. vue 引入css及注意事项

    组件中: <style scoped> @import '../../static/css/xx.css'; // “ :”必须有 </style> 注:若用以下方法,全部组件 ...

  10. 跟我一起学习webpack使用配置文件(二)

    接着跟我一起学习webpack(一)中的项目来,我们接下来使用配置文件 使用npx webpack -h 我们可以查看webpack的配置参数 从我们在package.json中添加的命令来看,当项目 ...