从Git中删除敏感数据。 “致命:含糊不清的争论'rm'”

时间:2014-01-28 00:23:26

标签: linux git ambiguous-grammar

我正在尝试运行此命令:

git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch filename.js' --prune-empty --tag-name-filter cat -- --all

但我一直收到这个错误:

fatal: ambiguous argument 'rm': unknown revision or path not in the working tree
.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

1 个答案:

答案 0 :(得分:19)

这取决于您使用的外壳 在Windows上,例如使用msysgit,请参阅issue 477

  

单引号与CMD没有特殊含义。不要指望他们有效   与POSIX shell相同。像这样调用filter-branch:

git filter-branch --commit-filter "GIT_COMMITTER_NAME=void GIT_AUTHOR_NAME=void GIT_COMMITTER_EMAIL=just.a.test@kernel.org GIT_AUTHOR_EMAIL=just.a.test@kernel.org; git commit-tree \"$@\"" HEAD

多行:

git filter-branch --commit-filter "GIT_COMMITTER_NAME=void \
                                   GIT_AUTHOR_NAME=void \
                                   GIT_COMMITTER_EMAIL=just.a.test@kernel.org \
                                   GIT_AUTHOR_EMAIL=just.a.test@kernel.org; \
                                   git commit-tree \"$@\"" HEAD

如“How to pass a programmatically generated list of files to git filter-branch?

中所述
  

各种...-filters的每个参数都需要是一个字符串。该字符串保存为shell变量。

因此请确保'git rm --cached --ignore-unmatch filename.js'被视为您所在的shell中的字符串 由于Constantine Ketskalo指出in the comments

  

Windows 10,PyCharm,GitPython,与问题相同的命令   只需在字符串中将'更改为",就可以了!