【发布时间】:2011-05-05 20:52:13
【问题描述】:
我一直使用基于界面的 git 客户端 (smartGit),因此对 git 控制台没有太多经验。
但是,我现在需要在历史记录中的所有 .txt 文件中替换一个字符串(因此,不是擦除整个文件,而只是替换一个字符串)。我找到了以下命令:
git filter-branch --tree-filter 'git ls-files -z "*.php" |xargs -0 perl -p -i -e "s#(PASSWORD1|PASSWORD2|PASSWORD3)#xXxXxXxXxXx#g"' -- --all
我试过了,但不幸的是,虽然密码确实被更改了,但所有二进制文件都已损坏。图片等都会损坏。
有没有更好的方法来做到这一点,不会损坏我的二进制文件?
谢谢。
编辑:
我弄混了一些东西。导致二进制文件损坏的实际代码是:
$ git filter-branch --tree-filter "find . -type f -exec sed -i -e 's/originalpassword/newpassword/g' {} \;"
顶部的代码实际上删除了所有带有我的密码的文件。
【问题讨论】:
-
不能解决您的问题,但这类似于我不久前提出的问题:stackoverflow.com/questions/2225454/…
-
确实,关于如何删除文件有很多答案。不过我需要替换一个字符串。
-
@Jimmy Cuadra,请看我的编辑,我实际上使用了不同的脚本,搞混了。也许它可以帮助您获得正确的命令。
标签: git substitution git-filter-branch git-rewrite-history bfg-repo-cleaner