彻底删除 Git 项目中的文件(BFG Repo-Cleaner 用法)

一些时候由于开发初期经验不足和贪图方便, 会把一些不应该提交到 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 已经有很多人提过, 不做赘述.

让它完全消失#

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

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

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

Copy
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 的文件夹

接着开始删除文件历史.

Copy
## 根据情况的不同, 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 真正删除这些文件并提交.

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

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

posted @   质子  阅读(5570)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
点击右上角即可分享
微信分享提示
CONTENTS