Удаление конфиденциальных данных из Git. "роковой: двусмысленный аргумент" гм "

Я пытаюсь запустить эту команду:

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>...]'

2 ответа

Решение

Это зависит от используемой вами оболочки.
В Windows, например с msysgit, см. Проблему 477:

Одиночные кавычки не имеют особого значения для CMD. Не ожидайте, что они работают так же, как с оболочкой POSIX. Вызовите ветку filter следующим образом:

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

Как уже упоминалось в разделе " Как передать программно сгенерированный список файлов в git filter-branch ? "

Каждый аргумент к различным ...-filters должна быть одна строка. Эта строка сохраняется как переменная оболочки.

Так что убедитесь 'git rm --cached --ignore-unmatch filename.js' считается строкой в ​​оболочке, в которой вы находитесь.

В окнах вы должны использовать двойную кавычку "вместо одного '

Другие вопросы по тегам