Jim*_*dra 13 git security git-rewrite-history
我有一个使用Git版本的项目,我想开源,但它有一些私人信息,特定于最初使用它的环境.我将更改有问题的信息,以从未包含在存储库中的配置文件加载.我知道我应该首先做到这一点,但由于私人信息仍然存在于以前的提交中,我怎样才能将其从历史中删除?我是否只需要根据最新提交启动新存储库并丢失所有历史记录,或者是否有办法在删除任何私人信息记录时抢救当前存储库?
编辑:为了澄清,我不想完全删除包含此私人信息的文件,因为它们仍然使用.相反,我想删除/删除/更改其中某些字符串的出现.
我建议使用BFG Repo-Cleaner,这是一种更简单,更快速的替代品,git-filter-branch专门用于从Git repos中删除私人数据.
该使用说明给出更详细的步骤,但核心位就是:下载的BFG的jar(需要Java 6或以上),并运行此命令:
$ java -jar bfg.jar --replace-text replacements.txt my-repo.git
Run Code Online (Sandbox Code Playgroud)
该replacements.txt文件应包含您要执行的所有替换,格式如下(每行一个条目 - 请注意不应包含注释):
PASSWORD1 # Replace literal string 'PASSWORD1' with '***REMOVED***' (default)
PASSWORD2==>examplePass # replace with 'examplePass' instead
PASSWORD3==> # replace with the empty string
regex:password=\w+==>password= # Replace, using a regex
Run Code Online (Sandbox Code Playgroud)
将扫描您的整个存储库历史记录,并且所有非二进制文件(大小不超过1MB)将执行替换:将替换任何匹配的字符串(不在您的最新提交中).
完全披露:我是BFG Repo-Cleaner的作者.
我不久前为此写了一个脚本。您可以在这里找到它:https://gist.github.com/dound/76ea685c05c4a7895247457eb676fe69
(原始文章可从 archive.org 查看:https://web.archive.org/web/20160208235904/http ://dound.com:80/2009/04/git-forever-remove-files-or-folders-from -历史/)
该脚本基于 git 附带的git-filter-branch工具构建。如果您好奇,您可以在此处阅读有关从 git 存储库中删除文件的更多信息,但使用上面链接中的脚本应该很容易,并且您真正需要的就是完成删除该私人信息。