Для запуска команд внутри псевдонима git и, в частности, для передачи аргументов этим командам, вам, вероятно, потребуется создать временную функцию, которую вы затем немедленно вызовете:
$ vim ~/.gitconfig
...
[alias]
# compare:
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).)