我不小心在其中一个文件中提交了密码,所以现在我试图摆脱它。
我正在运行的命令是:
git filter-branch --tree-filter "find . -type f -exec sed -i -e 's/password/REDACTED/g' {} \;"
它成功完成了我需要做的事情,但是它复制了所有带有.rb-e
扩展名的文件,还复制了我的所有提交。如何清除文件并防止重复提交?
在sed
附带的MacOS X是BSD sed的,不是GNU sed和到位而不制作备份它不能改变文件-其-i
标志总是需要一个参数,即后缀备份文件都会有。在您的通话中,-i -e
被解析为一个标志,告诉sed在适当位置编辑文件并在中放置备份filename-e
。这就是您获得大量.rb-e
文件的原因。
我认为,最实用的解决方案是稍后删除备份文件。那是,
git filter-branch --tree-filter "find . -type f -exec sed -i.bak 's/password/REDACTED/g' {} \; -exec rm '{}'.bak \;"
我随意-e
使用更明智的文件扩展名(.bak
)进行替换。确保使用不与要保留的文件冲突的后缀。您可以根据需要将其-e
放回原处,但在这种情况下则没有必要。
编辑:@torek指出,如果BSD sed的-i
标志给出一个空字符串作为参数(即''
),则sed可以在适当位置编辑文件;我主要不与GNU sed一起工作。不过,我觉得允许sed生成备份文件比使用更好-i ''
。在上述find
调用中,-exec
仅当第一个命令报告成功完成(因为-exec
也是一个过滤器)时,才会执行第二个命令,因此,如果sed返回错误,则仍然有备份文件。而且当事情变得糟透了时,备份就很好了。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句