工具介绍 {#工具介绍}
BFG Repo-Cleaner是一个使用scal语言编写的开源工具,它提供更快更简单的方式操作git提交记录,它是git filter-repo
一个有效替代工具,能够更轻松的完成任务。
你可以用它来做什么? {#你可以用它来做什么}
- 可以删除提交记录中的不再使用的一些大文件,帮助减少提交记录占用体积。
- 轻松移除密码、凭证和其他一些敏感的数据。
什么时候用到它? {#什么时候用到它}
- 当项目需要开源,但是开发过程中提交的代码含有一些敏感信息需要删除,如密码、ip、授权码等敏感信息。
- git提交历史记录很多,占用空间大,需要删除过往记录中一些不在使用的文件,或者需要删除一些大文件,减少历史记录体积。
如何使用? {#如何使用}
PS:BFG Repo-Cleaner是一个可运行的jar包,所以要确保您的开发环境已经配置好了Java,否则无法使用该工具。如果您没有配置Java,请您先配置Java环境后使用。
下面说明在Windows操作系统下使用,Linux其他同理,只是进入文件夹的命令不同,执行的BFG命令是相同的
。
删除提交记录中的某些敏感文件 {#删除提交记录中的某些敏感文件}
假设您的提交记录中含有敏感文件或者文件中有敏感信息,现在需要从历史记录中删除它们。
去BFG官网下载最先的工具Jar包。
下载完成后将这个jar包复制到您到项目根目录下与.git目录同级
以管理员的身份打开cmd,进入项目目录,执行命令
比如我要删除敏感文件SecretUtil,里面含有里面含有appid和secret。
java -jar bfg.jar --delete-files WxUtils.java
提交修改后的历史记录
这里需要注意,如果不止一个人修改过删除的文件,那么其他人的修改记录也会被覆盖。
git push --force
替换提交记录中的文本 {#替换提交记录中的文本}
java -jar bfg.jar --replace-text replace.txt
在replace.txt文件中指定要替换的规则。
--replace-text后面的参数是规则文件的位置,我这里是直接放置于jar包同级目录下。
举一个例子说明替换的规则:
可以直接替换或者使用正则替换。
www.xiaojingge.com==>ip
regex:password: .*==>password: your password
regex:username: .*==>username: your username
第一行将所有记录中的www.xiaojingge.com
字符替换为ip
第三和第四行表示使用正则,password: .*
正则表示开头为password:
的所有字符串,将该字符串替换为password: your password
删除掉指定大小的文件 {#删除掉指定大小的文件}
java -jar bfg.jar --strip-blobs-bigger-than 50M
该条命令表示删除文件大小大于50m的文件,当然删除的文件是指删除提交记录中的历史文件记录。
注意需要git push --force
将记录提交到远程仓库中,否则只是在本地仓库中生效。
总结 {#总结}
如果你想要修改项目中的一些含有敏感信息的提交记录,抑或是要删除某些文件,修改某些内容,BFG Repo-Cleaner都是一个不错的选择。