介绍

官网: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 方式。

原文:https://stackoverflow.com/questions/3959924/whats-the-difference-between-git-clone-mirror-and-git-clone-bare

下载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全部重新提交一遍的情况,所以重新拉取项目

删除大文件

未实际操作过,本文无法详细介绍,后续有操作后再补充上。

最后修改:2022 年 12 月 08 日
如果觉得我的文章对你有用,奖励一杯咖啡吧!