我正在尝试从我的 Git 历史记录中删除敏感数据,例如密码。而不是删除整个文件,我只想用removedSensitiveInfo
. 这是我在浏览了许多 StackOverflow 主题和其他网站后得出的结论。
git filter-branch --tree-filter "find . -type f -exec sed -Ei '' -e 's/(aSecretPassword1|aSecretPassword2|aSecretPassword3)/removedSensitiveInfo/g' {} \;"
当我运行这个命令时,它似乎正在重写历史记录(它显示了它正在重写的提交并且需要几分钟)。但是,当我检查所有敏感数据是否确实已被删除时,结果发现它仍然存在。
作为参考,这是我进行检查的方式
git grep aSecretPassword1 $(git rev-list --all)
这向我显示了与搜索查询匹配的所有数百个提交。什么都没有被替代。
知道这里发生了什么吗?
我仔细检查了我正在使用的正则表达式,这似乎是正确的。我不确定还要检查什么或如何正确调试它,因为我的 Git 知识非常初级。例如,我不知道如何测试 1) 我的正则表达式是否不匹配任何内容,2) sed 没有在所有文件上运行,3) 文件更改没有被保存,或者 4) 其他东西。
很感谢任何形式的帮助。
PS 我知道关于这个主题的几个 StackOverflow 线程。但是,我找不到关于在所有(ASCII)文件(而不是指定特定文件或文件类型)中替换单词(而不是删除文件)的方法。不确定这是否应该有所作为,但所有建议的解决方案都对我不起作用。