Чтобы запускать команды внутри псевдонима git и, в частности, передавать аргументы этим командам, вам, вероятно, придется создать временную функцию, которую вы затем немедленно вызовете:
$ vim ~/.gitconfig
...
[alias]
foo = "! echo begin arg=$1/$2/end"
foo2 = "!f() { echo "begin arg=$1/$2/end"; }; f"
В этом примере функция, вероятно, то, что вам нужно (и она более гибкая в отношении того, что вы можете сделать в одном «операторе»); и вы, вероятно, можете сказать, что для обоих вариантов оставшиеся аргументы команды git просто передаются как аргументы псевдониму, независимо от того, является ли он «echo» или «f»; вызов функции просто использует аргументы, игнорируя то, что явно не используется:
$ git foo a b c
begin arg=a/b/end a b c
$ git foo2 a b c
begin arg=a/b/end
Другой пример (перечисляет все псевдонимы на основе совпадающего шаблона) (примечание: вы можете повторно использовать одно и то же имя функции «f ()» во всем .gitconfig):
[alias]
alias = "!f() { git config --get-regexp "^alias.${1}$" ; }; f"
Первый возвращает псевдоним только для «foo $», второй для «foo. *»:
$ git alias foo
alias.foo ! echo begin arg=$1/$2/end
$ git alias 'foo.*'
alias.foo ! echo begin arg=$1/$2/end
alias.foo2 !f() { echo begin arg=$1/$2/end; }; f
(Примечание: фактические результаты могут отличаться в зависимости от оболочки; я использую это с bash в Linux, Unix и Cygwin (Windows).)