Alias ​​Git – Commandes et parameters multiples

J’essaie de créer un alias qui utilise à la fois plusieurs commandes Git et parameters de position. Il y a des pages Stackoverflow pour chacun, et il semblerait évident de faire les deux, mais j’ai des problèmes.

Par exemple, je veux passer à la twig foo et effectuer un statut. Donc, dans mon .gitconfig , j’ai:

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

ce qui ne fonctionne pas Alors que quelque chose comme ça fonctionnera.

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

Toute idée serait appréciée.

    Cela fonctionnera (testé avec zsh et bash):

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

    Vous pouvez définir une fonction shell.

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

    Cela cible Windows batch / msysgit bash; peut ne pas fonctionner sur d’autres environnements.

    Comme l’ont dit Olivier Verdier et Kevin Ballard

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

    fonctionne presque, mais donne une fausse insertion supplémentaire de l’argument …

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

    Mais si vous ajoutez && : à la fin de votre alias, l’argument erroné est consommé dans une balise d’emplacement.

    Alors

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

    donne la sortie correcte … git chs demo -> git checkout demo && git status

    J’ai été capable de créer des alias git multi-lignes et assez complexes. Ils fonctionnent bien sur Windows mais je suppose qu’ils travailleraient aussi ailleurs, par exemple:

     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" 

    J’ai écrit un post et quelques autres exemples ici .

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

    Essaye celui-là:

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

    Appelez ça comme ça: git chs master

    Il est possible d’avoir un alias git multiligne en ajoutant \ à la fin de chaque ligne.

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

    Le problème ici est que les parameters de position semblent être envoyés à la commande shell deux fois (à partir de git 1.9.2). Pour voir ce que je veux dire, essayez ceci:

     [alias] test = !git echo $* 

    Ensuite, faites git test this is my testing ssortingng . Vous devriez observer la sortie suivante (deux dernières lignes éditées ici pour plus de clarté):

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

    Une façon de contourner ce problème serait de

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

    Cela consumra le paramètre positionnel supplémentaire appliqué à la dernière commande d’écho et n’aura aucun effet sur les résultats.