如何清理git敏感数据
参考:
https://docs.github.com/cn/github/authenticating-to-github/removing-sensitive-data-from-a-repository
https://www.cnblogs.com/lovelyli/p/13359421.html
https://www.cnblogs.com/huipengly/p/8424096.html
当我们在开发项目时,经常使用到配置文件,一些配置文件会包含敏感数据,但是如果要开源的话,这些包含密码的敏感数据时非常致命的。如果只是将这个文件删除后提交,那么其他人任然可以clone你的仓库,并会滚,得到删除的敏感文件。
使用BFG清理删除敏感文件的所有提交历史
-
下载BFG,并将文件名改为
bfg.jar
,移动到git根目录(项目根目录)去官网下载BFGhttps://rtyley.github.io/bfg-repo-cleaner/
-
将敏感文件编辑为模版文件,即一些账号密码等,替换为提示,如
AccessKeyId=Your_AccessKeyId
,并提交更改 -
命令行进入项目根目录,执行删除敏感文件的命令
java -jar bfg.jar --delete-files alioss.properties
这里的alioss.properties就是我的一个敏感配置文件,请换成你需要清理的文件
-
真正清理删除的文件
在上一步,虽然已经将最后提交记录前的所有提交记录中的此敏感文件以及删除了,但是其实还没有真正删除,依旧占据着空间,可以使用下面命令查看项目占用的大小
git count-objects -vH
使用git gc指令来清除这些无效的文件
git reflog expire --expire=now --all && git gc --prune=now --aggressive
这时候可以再次使用
git count-objects -vH
查看大小,明显变小了 -
强制提交到远端仓库
git push --force
这是后就已经解决了敏感文件的问题了,即使别人clone你的仓库并回滚,是无法得到历史提交中的敏感文件的,这些历史提交中已经完全删除了这个敏感文件。
但是本地开发,还是需要配置一些账户密码的,这时候可以将敏感文件模版修改会原来的样子,并将这个文件添加到.gitignore
忽略文件中,并执行下面的忽略命令,来忽略这个文件,即使编辑,也不会被提交了
git update-index --assume-unchanged ${文件路径} #git关闭跟踪文件修改提交
如果哪天想再次跟踪这个文件,可以先在.gitignore
忽略文件中删除这个文件路径,然后使用下面命令来进行跟踪
git update-index --no-assume-unchanged ${文件路径} #git打开跟踪文件修改提交
注意:如果使用 git rm --cached ${文件路径}
来进行取消跟踪,并将文件加入.gitignore
中的话,你会发现在提交的时候,会显示这个文件已经被删除,如果推送到远端仓库的话,仓库的此文件也会被删除