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 conduit à partir de mon question/réponse précédente sur SO, où je mets le code dans un fichier .sh puis aliasé dans le 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 d'ignorer 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 quand même ajouter 'diffall.sh' dans votre $ PATH, pourquoi ne pas l'enregistrer en tant que 'git-diffall', et évitez 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 passer des arguments à ces commandes, vous devrez probablement créer une fonction temporaire que vous invoquerez ensuite 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 "instruction"); et vous pouvez probablement dire que pour les deux options, les arguments restants à la commande git sont simplement passés comme arguments à l'alias, peu importe si c'est "echo" ou "f"; appeler la fonction consomme simplement les arguments, ignorant ce qui n'est pas explicitement utilisé:
$ git foo a b c
begin arg=a/b/end a b c
$ git foo2 a b c
begin arg=a/b/end
Un autre exemple (répertorie tous les alias, en fonction du modèle de correspondance) (remarque: vous pouvez continuer à réutiliser le même nom de fonction "f ()" tout au long du .gitconfig):
[alias]
alias = "!f() { git config --get-regexp "^alias.${1}$" ; }; f"
Le premier retourne l'alias juste pour "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 de Shell; je l'utilise avec bash sur Linux, Unix & Cygwin (Windows).)
Je ne pouvais pas trouver dans la documentation, mais si vous créez un script "git- <name>" dans le chemin, vous pouvez l'appeler avec "git name" dans votre dépôt.
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 <my@Laptop.(none)>
| Date: Fri Apr 1 16:47:20 2011 +0200
|
| would have been better not to do it at all
|
...
$
Ainsi, vous pouvez également écrire n'importe quel alias que vous aimez de cette manière (plutôt obscure).
Encore plus, vous pouvez ajouter la saisie semi-automatique à cette nouvelle commande définissant une fonction. Info ici
$ _git_logg ()
{
# you can return anything here for the autocompletion for example all the branches
__gitcomp_nl "$(__git_refs)"
}
L'ajout de 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 git-config fonctionne aussi, mais j'aime garder mes alias dans le fichier de configuration pour une facilité de 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 'alias avancés avec arguments'