Git Alias-commandes et paramètres multiples
j'essaie de créer un alias qui utilise à la fois des commandes Git multiples et des paramètres de position. Il y a des pages de flux empilées pour chacune, et il semblerait douloureusement évident de faire les deux, mais j'ai des problèmes.
par exemple, je veux passer à branch foo et effectuer un État. Donc dans mon .gitconfig
, j'ai:
[alias]
chs = !sh -c 'git checkout "151900920" && git status'
ça ne marche pas. Alors que quelque chose comme ça va marcher.
chs = !sh -c 'git checkout "151910920"'
echoes = !sh -c 'echo hi && echo bye'
Aucune information serait appréciée.
8 réponses
cela fonctionnera (testé avec zsh et bash):
[alias] chs = !git checkout && git status
vous pouvez définir une fonction shell.
[alias] chs = "!f(){ git checkout \"\" && git status; };f"
cela cible Windows batch / msysgit bash; pourrait ne pas fonctionner sur d'autres environnements.
comme L'ont dit Olivier Verdier et Kevin Ballard
[alias] chs = !git checkout && git status
fonctionne presque, mais donne une insertion supplémentaire fallacieuse de l'argument ...
git chs demo -> git checkout demo && git status demo
mais si vous ajoutez && :
à la fin de votre alias, alors le faux argument est consommé dans une étiquette de localisation.
Donc
[alias] chs = !git checkout && git status && :
donne la sortie correcte ...
git chs demo -> git checkout demo && git status
j'ai pu créer des alias git multilignes et assez complexes. Ils fonctionnent bien sur les fenêtres, mais je suppose qu'ils travailleraient ailleurs aussi, 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 ai quelques autres exemples ici .
essayez celui-ci:
[alias]
chs = "!sh -c 'git checkout \""151900920"\" && git status'"
appelez - le comme ceci: git chs master
il est possible d'avoir un pseudonyme multiligne git en ajoutant \
à la fin de chaque ligne.
[alias]
chs = "!git checkout \
; git status \
"
le problème ici est que les paramètres de position semblent être envoyés deux fois à la commande shell (à partir de git 1.9.2). Pour voir ce que je veux dire, essayez ceci:
[alias]
test = !git echo $*
puis git test this is my testing string
. Vous devriez observer la sortie suivante (les deux dernières lignes éditées ici pour plus de clarté):
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
une façon de contourner cela serait de
[alias]
chs = !git checkout && git status && git echo x >/dev/null
cela consommera le paramètre de position supplémentaire comme il est appliqué à la dernière commande echo et n'ont aucun effet sur les résultats.