我有一个使用Git版本的项目,我想开源,但它有一些私人信息,特定于最初使用它的环境。我将更改有问题的信息,以从未包含在存储库中的配置文件加载。我知道我应该首先做到这一点,但由于私人信息仍然存在于以前的提交中,我怎样才能将其从历史中删除?我是否只需要根据最新提交启动新存储库并丢失所有历史记录,或者是否有办法在删除任何私人信息记录时抢救当前存储库?
编辑:为了澄清,我不想完全删除包含此私人信息的文件,因为它们仍然被使用。相反,我想删除/删除/更改其中某些字符串的出现。
答案 0 :(得分:5)
我建议使用BFG Repo-Cleaner,这是git-filter-branch
的一种更简单,更快的替代方案,专门用于从Git repos中删除私人数据。
usage instructions更详细地介绍了步骤,但核心位只是:下载BFG's 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的作者。
答案 1 :(得分: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-history/)
该脚本基于git附带的git-filter-branch工具。如果你很好奇,你可以阅读更多关于从git repo here中删除文件的内容,但是使用上面链接中的脚本应该很容易,而且你真正需要完成删除私人信息的所有内容。