Удаление конфиденциальных данных из 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'
считается строкой в оболочке, в которой вы находитесь.
В окнах вы должны использовать двойную кавычку
"
вместо одного
'