Git alias agrega parameters para finalizar

Estoy usando Git Bash v1.8.1, con algunos alias (para probar):

[alias] ekko = !echo $1 && echo $1 ekko2 = !sh -c 'echo $1 && echo $1' 

Pero cuando los ejecuto, veo:

 > git ekko master master master master 

Y:

 > git ekko2 master (blank line) (blank line) 

Mi comportamiento previsto es:

 > git ekko master master master 

Soy bastante nuevo para los alias: estoy buscando una forma de garantizar que mis arguments se consumn por completo y no se agreguen al final del alias. Algunos detectives indican que este comportamiento cambió en algún lugar alnetworkingedor de Git v1.7.x, y aún no he determinado exactamente cómo lograr esto:

Git Alias ​​- Múltiples commands y parameters

Tu alias ekko2 está muy cerca … Lo que realmente quieres es esto:

 [alias] ekko2 = !sh -c 'echo $1 && echo $1' - 

Los alias de Git que ejecutan commands de shell sustituyen las variables $n , pero también añaden los arguments que pasen al final del command. Por lo tanto, en su primer ejemplo, el git ekko master es equivalente al echo master && echo master master , que explica su salida.

Su segundo ejemplo está más cerca, pero está pasando "maestro" al command sh , que es simplemente ignorar el argumento adicional. Al agregar - al final del alias, está diciendo que los arguments que siguen están destinados a que se ejecute el script sh , y no para el sh sí.

ekko2 falta un solo guión al final:

 [alias] ekko2 = !sh -c 'echo $1 && echo $1' - 

Ver la Wiki de Git en Alias ​​avanzados con arguments :

 [alias] example = !sh -c 'ls $2 $1' - 

Puede agregar un command Bash noop ":" al final:

 git config --global alias.hello-world '!echo "$1"; :' 

Huellas dactilares:

 $ git hello-world hello world hello world