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

wf82jlnq  于 2023-06-04  发布在  Git
关注(0)|答案(2)|浏览(258)

我有一个Git版本的项目,我想开源,但它有一些私人信息,这些信息是特定于最初使用它的环境的。我将更改有问题的信息,以便从存储库中不包含的配置文件中加载。我意识到我应该在一开始就这样做,但是由于私人信息仍然存在于以前的提交中,我如何才能从历史中删除它呢?我是否必须根据最新的提交启动一个新的存储库并丢失所有的历史记录,或者有没有一种方法可以在删除任何私有信息记录的同时挽救当前的存储库?
编辑:澄清一下,我不想完全删除包含这些私人信息的文件,因为它们仍然在使用。相反,我想删除/清空/更改其中某些字符串的出现。

webghufk

webghufk1#

我推荐使用BFG Repo-Cleaner,它是git-filter-branch的更简单、更快速的替代方案,专门用于从Git存储库中删除私有数据。
使用说明中给予了更详细的步骤,但核心部分只是:下载BFG的jar(需要Java 8或更高版本)并运行以下命令:

$ java -jar bfg.jar  --replace-text replacements.txt  my-repo.git

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

您的整个存储库历史将被扫描,所有非二进制文件(大小小于1 MB)将执行替换:任何匹配的字符串(不在你的 latest commit中)将被替换。

  • 完全披露:我是BFG Repo-Cleaner的作者。*
t98cgbkg

t98cgbkg2#

不久前我写了一个剧本。你可以在这里找到它: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-history/
该脚本构建在git附带的git-filter-branch工具上。如果你很好奇,你可以阅读更多关于从git repo here中删除文件的信息,但是使用上面链接中的脚本应该很容易,你真正需要完成的就是删除这些私人信息。

相关问题