Как включить параметры оболочки в git? - PullRequest
3 голосов
/ 08 ноября 2011

Я хочу использовать расширенное глобирование в «индексном фильтре», например,

git filter-branch --index-filter "git rm --cached --ignore-unmatched Modules/!(ModuleA|ModuleB)"

, но получаю ошибку:

eval: строка 336: синтаксическая ошибка рядомнеожиданный токен `('

Я уже пробовал:

git filter-branch --index-filter "shopt -s extglob && git rm --cached
--ignore-unmatched Modules/!(ModuleA|ModuleB)"

Итак, общий вопрос: как включить определенные параметры оболочки для оболочки, используемой для вычисления этих выражений?

1 Ответ

2 голосов
/ 10 ноября 2011

Вы можете обойти проблему, заставив вашу оболочку вызвать git filter-branch оценить глобус для вас (при условии, что вы включили extglob там):

git filter-branch --index-filter "git rm --cached --ignore-unmatch $(ls -xd Modules/!(ModuleA|ModuleB))"

Обновление: Необходимо указать параметры для ls: -x для разделения записей по пробелам вместо новой строки и -d для печати имени каталога вместо его содержимого.Для более чем нескольких файлов вам также может понадобиться добавить -w 1000 (или такое же большое число), чтобы ls принял очень широкий терминал и поместил все в одну строку.

...