tipos tag repositorio remove origin etiquetas crear cambiar git sh alias git-alias

tag - origin git



Git Alias-Múltiples comandos y parámetros (8)

El problema aquí es que los parámetros posicionales parecen estar siendo enviados al comando de shell dos veces (a partir de git 1.9.2). Para ver lo que quiero decir, prueba esto:

[alias] test = !git echo $*

Entonces, git test this is my testing string . Debe observar la siguiente salida (las dos últimas líneas editadas aquí para mayor claridad):

03:41:24 (release) ~/Projects/iOS$ git test this is my testing string this is my testing string this is my testing string ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ #1 #2

Una forma de evitar esto sería

[alias] chs = !git checkout $1 && git status && git echo x >/dev/null

Esto consumirá el parámetro posicional adicional cuando se aplique a ese último comando de eco y no tendrá efecto en los resultados.

Intento crear un alias que use tanto comandos múltiples de Git como parámetros posicionales. Hay páginas de Stackoverflow para cada una, y parecería dolorosamente obvio hacer ambas cosas, pero estoy teniendo problemas.

Como ejemplo, quiero cambiar a branch foo y realizar un estado. Entonces en mi .gitconfig , tengo:

[alias] chs = !sh -c ''git checkout $0 && git status''

que no funciona Mientras que algo como esto funcionará.

chs = !sh -c ''git checkout $0'' echoes = !sh -c ''echo hi && echo bye''

Cualquier idea sería apreciada.


Es posible tener alias de git de líneas múltiples añadiendo / al final de cada línea.

[alias] chs = "!git checkout $1 / ; git status / "


Esto funcionará (probado con zsh y bash):

[alias] chs = !git checkout $1 && git status


Esto se dirige a Windows batch / msysgit bash; podría no funcionar en otros entornos.

Como Olivier Verdier y Kevin Ballard han dicho

[alias] chs = !git checkout $1 && git status

casi funciona, pero da una inserción adicional espuria del argumento ...

git chs demo -> git checkout demo && git status demo

Pero si agrega && : al final de su alias, entonces el argumento espúreo se consume en una etiqueta de ubicación.

Asi que

[alias] chs = !git checkout $1 && git status && :

da la salida correcta ... git chs demo -> git checkout demo && git status


Prueba este:

[alias] chs = "!sh -c ''git checkout /"$0/" && git status''"

Llámalo así: git chs master


Pude crear alias de git de varias líneas y bastante complejas. Funcionan bien en Windows, pero supongo que también funcionarían en otros lugares, por ejemplo:

safereset = "!f() { / trap ''echo ERROR: Operation failed; return'' ERR; / echo Making sure there are no changes...; / last_status=$(git status --porcelain);/ if [[ $last_status != /"/" ]]; then/ echo There are dirty files:;/ echo /"$last_status/";/ echo;/ echo -n /"Enter Y if you would like to DISCARD these changes or W to commit them as WIP: /";/ read dirty_operation;/ if [ /"$dirty_operation/" == /"Y/" ]; then / echo Resetting...;/ git reset --hard;/ elif [ /"$dirty_operation/" == /"W/" ]; then/ echo Comitting WIP...;/ git commit -a --message=''WIP'' > /dev/null && echo WIP Comitted;/ else/ echo Operation cancelled;/ exit 1;/ fi;/ fi;/ }; / f"

Escribí una publicación y tengo algunos ejemplos más here .


Puede definir una función de shell.

[alias] chs = "!f(){ git checkout /"$1/" && git status; };f"


[alias] chs = !git branch && git status