从 Git 仓库的 Commit 历史中移除敏感文件
< 返回列表时间: 2020-07-14来源:OSCHINA
在很多情况,我们由于疏忽会将一些敏感信息误传到 Git 仓库上面去。 尽管我们可以使用 git rm 将包含敏感信息文件删除掉,然后重新提交上传,文件就不会在仓库文件列表显示。 但是这并不能完全将敏感信息文件从仓库中完全删除, commit history 仍然会有敏感信息的文件的残留,我们仍然可以从仓库中的 commit history 中访问到文件。
如果想要将敏感信息文件完全删除。不仅需要将文件从 github 中的文件列表中删除,同时还需要将文件从 github 的 commit history 中的 文件相关信息删除。删除 commit history 文件相关信息,主要有两种方法: filter-branch BFG
一、filter-branch
1.1 移除数据
filter-branch 是 git 自带的命令: git filter-branch --force --index-filter \ 'git rm --cached --ignore-unmatch PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA' \ --prune-empty --tag-name-filter cat -- --all
请将上面命令中的 PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA 替换为你要删除的文件名路径(相对路径、绝对路径均可)。
如果你想删除文件夹的话,只需要添加一个 -r 参数即可,形如: git filter-branch --force --index-filter \ 'git rm -r --cached --ignore-unmatch PATH-TO-YOUR-DIR-WITH-SENSITIVE-DATA' \ --prune-empty --tag-name-filter cat -- --all
1.2 避免再次提交
为了防止敏感文件再次被提交,可以将其加入到 .gitignore 文件中。
1.3 提交仓库
执行以下命令将其强制推送到仓库中: git push origin --force --all
-all 参数将修改作用于远程的所有分支。
1.4 提交 tags
以上命令不会对 tag 生效,如需修改,执行命令: git push origin --force --tags
二、BFG
除了使用 git 自带的 filter-barch 命令,还有一个更加方便的命令工具, 可以帮助我们删除 commit history 中的敏感信息。 这就是 BFG 。
首先下载 BFG 工具: wget http://repo1.maven.org/maven2/com/madgag/bfg/1.12.16/bfg-1.12.16.jar
执行命令: javar -jar bfg-1.12.16.jar --delete-files YOUR-FILE-WITH-SENSITIVE-DATA
和使用 filter-branch 一样,将 YOUR-FILE-WITH-SENSITIVE-DATA 替换为你要删除的文件路径,然后执行命令提交到仓库中: git push origin --force --all
三、参考文章 Git移除敏感数据 从Github中的Commit历史移除敏感文件
热门排行