介绍
官网:https://rtyley.github.io/bfg-repo-cleaner
git-filter-branch用于从 Git 存储库历史记录中清除不良数据,BFG 是一种更简单、更快速的替代方法。
- 删除大文件
- 删除密码、凭据和其他私人数据
备份项目
下面的操作都是有风险的,请一定先备份好自己的仓库。
删除密码、凭据和其他私人数据
本人当时用到主要是删除密钥,将私有项目转为开源项目。
注意,需要先执行这一步
在要清除/替换密钥之前,需要先提交一次代码,将原有的密钥删除或者替换为,并提交Git
这样做的目的是防止替换完成之后,又将最后一次带有密钥的记录push上去
复制项目
$ git clone --mirror git://example.com/some-big-repo.git
为什么使用--mirror(机翻)
- 不同之处在于,在使用时--mirror,所有引用都按原样复制。这意味着一切:远程跟踪分支、注释、refs/originals/*(来自过滤器分支的备份)。克隆的仓库拥有一切。它还进行了设置,以便远程更新将从原点重新获取所有内容(覆盖复制的引用)。这个想法实际上是镜像存储库,拥有一个完整的副本,这样你就可以在多个地方托管你的中央存储库,或者备份它。想想直接复制 repo,除了以更优雅的 git 方式。
下载bfg
下完完成后,重新命名为bgf.jar
创建passwords.txt
项目中的密钥==>替换后的内容,比如下面这种格式
123456789==>**********************
- 注意
==>
前后无空格
使用替换命令
java -jar bfg.jar --replace-text passwords.txt 你的克隆项目名
去除脏数据
$ cd 你的拷贝项目
$ git reflog expire --expire=now --all && git gc --prune=now --aggressive
检查内容
修改内容可能很多,但是也要大致检查一下修改的内容
git log -p
准备提交
确保完成之后,提交记录
(请注意,因为您的克隆命令使用了--mirror标志,此推送将更新远程服务器上的所有引用)
git push
重新拉取项目
如果使用旧项目继续开发,会有将之前的commit全部重新提交一遍的情况,所以重新拉取项目
删除大文件
未实际操作过,本文无法详细介绍,后续有操作后再补充上。