从旧的Git提交中删除私人信息

Jim*_*dra 13 git security git-rewrite-history

我有一个使用Git版本的项目,我想开源,但它有一些私人信息,特定于最初使用它的环境.我将更改有问题的信息,以从未包含在存储库中的配置文件加载.我知道我应该首先做到这一点,但由于私人信息仍然存在于以前的提交中,我怎样才能将其从历史中删除?我是否只需要根据最新提交启动新存储库并丢失所有历史记录,或者是否有办法在删除任何私人信息记录时抢救当前存储库?

编辑:为了澄清,我不想完全删除包含此私人信息的文件,因为它们仍然使用.相反,我想删除/删除/更改其中某些字符串的出现.

Rob*_*ley 5

我建议使用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的作者.


Dav*_*ill 2

我不久前为此写了一个脚本。您可以在这里找到它: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 存储库中删除文件的更多信息,但使用上面链接中的脚本应该很容易,并且您真正需要的就是完成删除该私人信息。