Как включить параметры оболочки в git?

Я хочу использовать расширенное globbing в "индексном фильтре", например.

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

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

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

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