14

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

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

4

2 回答 2

5

我建议使用BFG Repo-Cleaner,这是一种更简单、更快的替代方案,git-filter-branch专门用于从 Git 存储库中删除私有数据。

使用说明给出了更详细的步骤,但核心只是:下载BFG 的 jar(需要 Java 6 或更高版本)并运行以下命令:

$ 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

将扫描您的整个存储库历史记录,并且所有非二进制文件(大小小于 1MB)都将执行替换:任何匹配的字符串(不在您的最新提交中)都将被替换。

全面披露:我是 BFG Repo-Cleaner 的作者。

于 2013-03-31T14:54:21.513 回答
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 存储库中删除文件的更多信息,但是使用上面链接中的脚本应该很容易,并且您真正需要的是完成删除该私人信息。

于 2010-02-08T22:59:03.377 回答