BFG - 移除Git Repository 中的敏感信息
整理了下自己最近的项目,全推到Gitee上了。顺便把上次Gitee整改导致“伪开源”的项目处理了下,加上了README.md
(不加readme公开不了)。
然后忽然意识到自己之前上传的项目中,都是毫无保留的上传。比如:写的大部分都是SpringBoot框架的代码,数据库连接池配置都是写在application.properties/ application.yml
中,由于涉及配置,所以这些文件一般不会加入到git.ignore
中,也就导致了配置的数据库密码也是被上传到gitee上了。
还好这些代码大部分都没公开,公开了的也是很早之前的,密码也已经换了。但留着也不是办法啊。
所以上网搜了搜,发现了在GitHub Docs中就有提及移除隐私信息的一项,提供了好几种方法。最简单的就是采用BFG Repo-Cleaner。
BFG
刚开始好奇这名字,原来是
git-filter-branch
首字母反一下?
移除文本
-
下载 BFG (
bfg-1.14.0.jar
) -
创建一个
password.txt
filter content of files, replacing matched text. Match expressions should be listed in the file, one expression per line - by default, each expression is treated as a literal, but ‘regex:’ & ‘glob:’ prefixes are supported, with ‘==>’ to specify a replacement string other than the default of
***REMOVED***
.也就是说直接将要替换的文本作为一行写入,或者
regex:
&glob:
作为前缀表示去匹配文本,然后使用==>
将需要替换掉的文本放在后面,不配置就是默认替换为***REMOVED***
-
进入需要修改的项目中运行
java -jar bfg-1.14.0.jar --replace-text password.txt
-
此时原项目中是看不出修改变化的,改动的是
.git
中的各个repo,需要替换的文本均被换为***REMOVED***
,每个commit的名字也会被替换。 -
操作结果可以在项目的上级目录中生成的
project_name.bfg-report
文件夹中查看更改情况,包括Ref的id变更、Object内容的修改位置等等 -
强制推送(后面的参数不确定是不是这么写)
git push --force
记第一次尝试
以本人的一次错误操作演示,可能看的还更透彻
项目名:bootdemo
配置文件名:application.yml
刚开始不太理解password.txt
的配置,所以就加了个个password试一试,反正这是个老年项目了。
passwod
运行java -jar bfg-1.14.0.jar --replace-text password.txt
(这里没有配置需要改的文件)完成后,直接看项目的当前版本是没有变化的,需要看git的Repo。
(左侧为当前版本,相当于未提交的)
可以看出来,密码没被改,改的是password
文本。
所以,我项目中全部的password
文本也都被替换了。
比如:我的User类中属性就被改了
将password中改为"000000"
后再运行一次
但也有个问题,你不会知道在你引入的其他第三方库中是不是会有相同的文本。。
比如
对于如何指定要替换的文件名,需要配置--filter-content-including , -fi
或--filter-content-excluding, -fe
执行命令
java -jar /Users/angzhijin/Downloads/bfg-1.14.0.jar --replace-text password.txt --filter-content-including '*.yaml'
注意
yml
和yaml
啊,wwww
小记
关于BFG,还有不少其他功能,比如说删除文件、删除文件夹、删除Blob等等,使用方法基本差不多,看看官网再拿些项目试试就基本会了。
参考
- Removing sensitive data from a repository - GitHub Docs
- BFG Repo-Cleaner by rtyley
- [不小心把密码上传到 GitHub 了,怎么办 土豆不好吃](
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!