Не могу добавить псевдоним git при использовании функции оболочки
Я пытаюсь добавить следующий псевдоним с помощью функции оболочки
scommit = "!f() { git submodule foreach -q --recursive 'git commit -a || :' ; git commit -am \" Update submodule \";}; f"
Но когда я запускаю его в Git Bash (на Windows)
git config --local alias.scommit "!f() { git submodule foreach -q --recursive 'git commit -a || :' ; git commit -am "" Update submodule "";}; f"
Я получил вывод
git config --local alias.scommit "fit fetch upstream() { git submodule foreach -q --recursive 'git commit -a || :' ; git commit -am "" Update submodule "";}; f"
и, конечно, это не работает, потому что
Расширение псевдонима "scommit" не удалось; 'fit' - это не команда git
Также я попытался запустить его в PowerShell, но он показывает использование: git config [] …
Когда я добавляю его в.git/config вручную, он работает.
Как я могу добавить этот псевдоним с помощью git bash/ командной строки / PowerShell? Почему это превращается в fit fetch upstream()
?
1 ответ
Я только что протестировал на Windows 10 с Git 2.18:
git config --local alias.scommit '!f() { git submodule foreach -q --recursive "git commit -a" || : ; git commit -am "Update submodule";}; f'
Идея состоит в том, чтобы инвертировать кавычки: сильные кавычки ('
) на внешней стороне псевдонима, слабые кавычки ("
) внутри.
Это позволяет избежать !
интерпретировать как расширенную команду из истории (как вы можете видеть здесь) (хотя set +o histexpand
прежде чем команда git config могла бы помочь)