Puis-je intégrer le code shell bash suivant:
for name in $(git diff --name-only $1); do git difftool $1 $name & done
directement dans la création d’un alias git:
git config --global alias.diffall ***my-bash-code-here***
Cela m’amène à ma question / réponse précédente sur SO, où je mets le code dans un fichier .sh, puis crée un alias du fichier:
git config --global alias.diffall '!sh diffall.sh'
Mais dans la quête sans fin de la simplicité, il doit y avoir un moyen de sauter le fichier et d’insérer du code directement dans l’alias? Je n’arrive pas à comprendre le format …
git config --global alias.diffall '!sh diffall.sh'
C’est redondant dans un sens. Si vous voulez append “diffall.sh” dans votre $ PATH, pourquoi ne pas l’enregistrer en tant que “git-diffall” et éviter de déclarer un alias. Oui, “git diffall” l’exécutera.
Pour exécuter des commandes à l’intérieur d’un alias git, et en particulier pour transmettre des arguments à ces commandes, vous devrez probablement créer une fonction temporaire que vous appelez immédiatement:
$ vim ~/.gitconfig ... [alias] # compare: foo = "! echo begin arg=$1/$2/end" foo2 = "!f() { echo "begin arg=$1/$2/end"; }; f"
Dans cet exemple, la fonction est probablement ce dont vous avez besoin (et est également plus flexible quant à ce que vous pouvez faire dans une seule “déclaration”); et vous pouvez probablement dire que pour les deux options, les arguments restants de la commande git sont simplement transmis sous forme d’arguments à l’alias, que ce soit “echo” ou “f”; invoquer la fonction consum simplement les arguments, en ignorant ce qui n’est pas explicitement utilisé:
$ git foo abc begin arg=a/b/end abc $ git foo2 abc begin arg=a/b/end
Un autre exemple (liste tous les alias, en fonction du motif correspondant) (note: vous pouvez continuer à réutiliser le même nom de fonction “f ()” dans le fichier .gitconfig):
[alias] alias = "!f() { git config --get-regexp "^alias.${1}$" ; }; f"
Le premier renvoie l’alias pour juste “foo $”, le second pour “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: les résultats réels peuvent varier en fonction du shell; je l’utilise avec bash sur Linux, Unix et Cygwin (Windows).)
Je n’ai pas pu trouver dans la documentation, mais si vous créez un script “git-
Voir:
$ cd ~/bin $ echo "echo I love this log: >pwd >git log --graph --summary --decorate --all" > git-logg $ chmod +x git-logg $ cd /path/to/your/repo $ git logg I love this log: /path/to/your/repo * commit 3c94be44e4119228cc681fc7e11e553c4e77ad04 (whatever-branch) | Author: myself | Date: Fri Apr 1 16:47:20 2011 +0200 | | would have been better not to do it at all | ... $
Ainsi, vous pouvez écrire tout alias que vous aimez avec cette méthode (plutôt obscure).
Encore plus, vous pouvez append l’auto-complétion à cette nouvelle commande définissant une fonction. Info ici
$ _git_logg () { # you can return anything here for the autocompletion for example all the twigs __gitcomp_nl "$(__git_refs)" }
Ajouter ces 2 lignes à votre fichier .git / config devrait faire l’affaire.
[alias] diffall = '!for name in $(git diff --name-only $1); do git difftool $1 $name & done'
Edit: sans doute la version de git-config fonctionne aussi, mais j’aime garder mes alias dans le fichier de configuration pour faciliter la gestion.
Il y a une belle page sur le wiki git qui explique très clairement les alias: http://git.or.cz/gitwiki/Aliases En particulier, lisez les «alias avancés avec des arguments».
(De la documentation ProGit: http://progit.org/book/ch7-3.html )
Avez-vous essayé d’append un script en .git / hooks?
Par exemple, si vous créez un script .git / hooks / post-checkout:
#!/bin/bash echo "This is run after a 'git checkout'"
puis exécutez la commande:
$ git checkout master Switched to branch 'master' This is run after a 'git checkout'