para ejecutar comandos en el interior de un alias de Git, y en particular para pasar argumentos a los comandos, es probable que tiene que crear una función temporal que luego se invoca inmediatamente:
$ vim ~/.gitconfig
...
[alias]
# compare:
foo = "! echo begin arg=$1/$2/end"
foo2 = "!f() { echo "begin arg=$1/$2/end"; }; f"
en este ejemplo, la función es probablemente lo que necesita (y también es más flexible en cuanto a lo que puede hacer en un solo stat" ement "); y probablemente puedas decir que para ambas opciones, las args restantes del comando git simplemente se pasan como args al alias, independientemente de si es "echo" o "f"; invocando la función simplemente consume los argumentos, haciendo caso omiso de lo que no se utiliza de forma explícita:
$ git foo a b c
begin arg=a/b/end a b c
$ git foo2 a b c
begin arg=a/b/end
Otro ejemplo (enumera todos los alias, basado en la coincidencia de patrones) (nota: se puede mantener reutilizar el mismo nombre de función "f()" a lo largo la .gitconfig):
[alias]
alias = "!f() { git config --get-regexp "^alias.${1}$" ; }; f"
los primeros retornos el alias para simplemente "foo $", el segundo para "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
(nb: los resultados reales pueden variar en función de la cáscara ; Estoy usando esto con bash en Linux, Unix & Cygwin (Windows).)
Eso. Es genial. Al principio me preocupé por ejecutar accidentalmente algo, ya que he escrito algunos guiones de shell para hacer git cosas, y les he dado el prefijo 'git-', Pero mi shell (zsh) no los autocompleta, entonces tendría que escribirlos explícitamente. Y si quiero el comportamiento de autocompletar, puedo declarar un alias git a su propio subcomando, que también es un requisito para hacer explícito el enlace del script al subcomando. –
Sí, y es un binario que solo necesita la explosión: '! binario' –