Liste des alias Git

444

Comment imprimer une liste de mes alias git, c'est-à-dire quelque chose d'analogue à la aliascommande bash ?

ma11hew28
la source
2
Voir aussi: git-alias, de git-extras
driftcatcher
7
@MattDiPasquale - Je pense que la meilleure réponse ci-dessous fonctionne, peut-être devriez-vous l'accepter?
domoarigato
@domoarigato Merci. Je suis désolé de ne pas avoir accepté de réponse. Je viens de le faire.
ma11hew28
Ce pourrait être un candidat pour la question utile, qui est restée sans réponse acceptée le plus longtemps :): P
domoarigato
@domoarigato Hah. Bien merci. :-)
ma11hew28

Réponses:

125

Cette réponse s'appuie sur la réponse de Johnny . Cela s'applique si vous n'utilisez pas git-aliasdegit-extras .

Sous Linux, exécutez une fois:

git config --global alias.alias "! git config --get-regexp ^alias\. | sed -e s/^alias\.// -e s/\ /\ =\ /"

Cela créera un alias git permanent nommé aliasqui sera stocké dans votre ~/.gitconfigfichier. Son utilisation listera tous vos alias git, dans presque le même format que dans le ~/.gitconfigfichier. Pour l'utiliser, tapez:

$ git alias
loga = log --graph --decorate --name-status --all
alias = ! git config --get-regexp ^alias\. | sed -e s/^alias\.// -e s/\ /\ =\ /

Les considérations suivantes s'appliquent:

  • Pour empêcher l'alias aliasd'être répertorié comme ci-dessus, ajoutez-le | grep -v ^'alias 'juste avant le guillemet double de fermeture. Je ne recommande pas cela afin que les utilisateurs n'oublient pas que la commande aliasn'est qu'un alias et n'est pas une fonctionnalité de git.

  • Pour trier les alias répertoriés, ajoutez | sortjuste avant le guillemet double de fermeture. Vous pouvez également conserver les alias ~/.gitconfigtriés.

  • Pour ajouter l'alias en tant qu'alias à l'échelle du système, remplacez --global(pour l'utilisateur actuel) par --system(pour tous les utilisateurs). Cela va généralement dans le /etc/gitconfigfichier.

Acumenus
la source
3
J'aime celui-ci parce qu'il se débarrasse du alias.début de chaque ligne
Brian J
3
Je ne sais pas pourquoi, mais cette réponse ne fonctionne pas pour moi. Je continue fatal: bad config. La solution de Git-extra fonctionne pour moi cependant: github.com/tj/git-extras/blob/master/bin/git-alias
Ashitaka
1
@Ashitaka, essayez une version limitée, par exemple git config --global alias.alias "! git config --get-regexp ^alias\.". Alternativement, assurez git version-vous d'avoir une version actuelle de git.
Acumenus
C'est vraiment un excellent travail et tout est réuni d'une manière extrêmement utilisable!
UpAndAdam
Je crois que vous pouvez vous débarrasser de la partie "! Git", qui se défait essentiellement. Voir la section de clôture de Git Aliases
Daniel Stevens
489
$ git config --get-regexp alias
William Pursell
la source
39
Pour être pédant, cela devrait être'^alias\.'
Josh Lee
27
Ou tout simplement git config -e, puis utilisez vos yeux pour trouver la [alias]section. Mais les fans de git semblent toujours
apporter
39
git config -emodifie le .git/configfichier uniquement. Mais la plupart de mes alias sont définis dans le monde ~/.gitconfig.
Boldewyn
21
Pour être pratique, cela devrait être git config --global alias.aliases config --get-regexp '^alias\.'"... et ensuitegit aliases
Derek Greer
6
@DerekGreer vous manque un "quelque part
Jake Berger
147

J'ai créé un alias git appelé (assez étrangement) aliasdans ce but précis ... pratique de temps en temps si vous utilisez suffisamment l'aliasing ...

$ git config --global alias.alias "config --get-regexp ^alias\."

Notez que l'expression régulière s'assure que la ligne commence par alias..

johnny
la source
J'ai ajouté une réponse qui s'appuie légèrement sur cette réponse.
Acumenus
1
Je suggère --systemplutôt --globalque quelque chose comme ça soit plus utile au niveau du système, pas au niveau de l'utilisateur.
ADTC
1
Aime ça. You da You da best
Charles Watson
2
Et si vous voulez ajouter directement à votre gitconfig il doit ressembler à ceci: alias = config --get-regexp ^alias\\..
marczych
Que diriez-vousgit config --global alias.alias "!git config --get-regexp ^alias\. | grep -Po '(?<=alias\.)\S*' | sort"
Keith Robertson
84

Une autre alternative (purement quelque chose que je trouve facile à retenir):

git config --list | grep alias

Rimian
la source
8
En parlant de facile à retenir, vous pourriez aussi bien créer l' aliasalias une fois, puis oublier que vous l'avez même créé.
Acumenus
3
Vous pouvez utiliser -lcomme raccourci pratique pour --listmais j'aime l'idée de créer un alias pour répertorier les alias.
ADTC
1
Bonne solution, mais il vaut mieux utiliser grep avec une expression régulière pour produire des lignes commençant par un alias au cas où certaines configurations contiennent en quelque sorte un alias de mot-clé:git config --list | grep -E '^alias'
MasterMind
28

Les éléments suivants fonctionnent sous Linux, MacOSX et Windows (avec msysgit).

Utilisez git la pour afficher les alias dans .gitconfig

Ai-je entendu «bash scripting»? ;)

À propos de la partie `` non nécessaire '' dans un commentaire ci-dessus, j'ai essentiellement créé une page de manuel comme aperçu pour mes alias. Pourquoi tout ce tapage? N'est-ce pas exagéré?

Continuer à lire...

J'ai mis les commandes comme ceci dans mon .gitconfig, séparées comme TAB=TAB:

[alias]
        alias1            =            foo -x -y --z-option
        alias2            =            bar -y --z-option --set-something

et simplement défini un autre alias pour grep la TAB=partie des alias définis. (Toutes les autres options n'ont pas d'onglets avant et après le '=' dans leur définition, juste des espaces.)

Les commentaires non ajoutés à un alias ont également une TAB=====annexe, ils sont donc affichés après la grepping.

Pour une meilleure visualisation, je redirige la sortie grep vers moins, comme ceci:

version de base: (noir / blanc)

  #.gitconfig
  [alias]
        # use 'git h <command>' for help, use 'git la' to list aliases  =====
        h     =     help #... <git-command-in-question>
        la    =     "!grep '\t=' ~/.gitconfig | less" 

La \t=partie ' ' correspond TAB=.

Pour avoir une meilleure vue d'ensemble de mes alias et depuis que j'utilise la console bash, j'ai coloré la sortie avec les couleurs des terminaux:

  • tous les '=' sont imprimés en rouge
  • tous les «#» sont imprimés en vert

version avancée: (colorée)

       la      =       "!grep '\t=' ~/.gitconfig | sed -e 's/=/^[[0;31m=^[[0m/g' | sed -e 's/#.*/^[[0;32m&^[[0m/g' | less -R"

Fondamentalement, la même chose que ci-dessus, seule l' utilisation de sed est ajoutée pour obtenir les codes de couleur dans la sortie.

le -R drapeau de moins est nécessaire pour obtenir les couleurs affichées en moins.

(J'ai récemment découvert que les longues commandes avec une barre de défilement sous leur fenêtre ne s'affichent pas correctement sur les appareils mobiles: leur texte est coupé et la barre de défilement est simplement manquante. Cela pourrait être le cas avec le dernier extrait de code ici, conservez-le dans l'esprit lorsque vous regardez des extraits de code ici lors de vos déplacements.)


Pourquoi faire fonctionner une telle magie?

J'ai un demi-mille d'alias, adaptés à mes besoins.
Certains d’entre eux changent aussi avec le temps , donc après tout, la meilleure idée d'avoir une liste à jour à portée de main est d'analyser le .gitconfig.

Un **** court **** extrait de mes alias .gitconfig:

    #  choose       =====
    a       =       add #...
    aa      =       add .
    ai      =       add -i
    #  unchoose     =====
    rm      =       rm -r #... unversion and delete
    rmc     =       rm -r --cached #... unversion, but leave in working copy
    #  do   =====
    c       =       commit -m #...
    fc      =       commit -am "fastcommit"
    ca      =       commit -am #...
    mc      =       commit # think 'message-commit'
    mca     =       commit -a
    cam     =       commit --amend -C HEAD # update last commit
    #  undo =====
    r       =       reset --hard HEAD
    rv      =       revert HEAD

Dans mes postes de travail Linux ou Mac, il existe également d'autres alias dans les .bashrc, un peu comme:

#.bashrc
alias g="git"
alias gh="git h"
alias gla="git la"
function gc { git c "$*" } # this is handy, just type 'gc this is my commitmessage' at prompt

De cette façon, pas besoin de taper git help submodule, pas besoin git h submodule, justegh submodule c'est tout ce qui est nécessaire pour obtenir l'aide. Ce ne sont que quelques caractères, mais à quelle fréquence les tapez-vous?

J'utilise tous les éléments suivants, bien sûr uniquement avec des raccourcis ...

  • ajouter
  • commettre
  • commit --amend
  • reset --hard HEAD
  • pousser
  • aller chercher
  • rebaser
  • check-out
  • branche
  • show-branch (dans de nombreuses variantes)
  • shortlog
  • reflog
  • diff (en variations)
  • journal (dans de nombreuses variantes)
  • statut
  • spectacle
  • Remarques
  • ...

C'était juste du haut de ma tête.

Je dois souvent utiliser git sans gui, car la plupart des commandes git ne sont pas implémentées correctement dans aucune des interfaces graphiques. Mais chaque fois que je les mets en service, c'est surtout de la même manière.

Sur la partie `` non implémentée '' mentionnée dans le dernier paragraphe:
Je n'ai pas encore trouvé quelque chose qui se compare à cela dans une interface graphique:
sba = show-branch --color=always -a --more=10 --no-name- affiche toutes les branches locales et distantes ainsi que les
ccm = "!git reset --soft HEAD~ && git commit"validations qu'elles contiennent - change le dernier message de validation

D'un point de vue plus simple: à
quelle fréquence tapez-vous git add .ou git commit -am "..."? Sans compter même le reste ...
Faire fonctionner les choses comme git aaou git ca "..."dans Windows,
ou avec des alias bash gaa/ g aaou gca "..."/ g ca "..."sous Linux et sur Mac ...

Pour mes besoins, cela semblait une chose intelligente à faire, d'adapter des commandes git comme celle-ci ...
... et pour une utilisation plus facile, je me suis juste aidé pour les commandes moins utilisées, donc je n'ai pas à consulter les pages de manuel à chaque fois. Les commandes sont prédéfinies et les rechercher est aussi simple que possible.

Je veux dire, nous sommes des programmeurs après tout? Faire fonctionner les choses comme nous en avons besoin est notre travail.

Voici une capture d'écran supplémentaire, cela fonctionne sous Windows:

script fonctionnant avec cmd.exe

BONUS: Si vous êtes sous linux ou mac, les pages de manuel colorisées peuvent vous aider un peu:

pages de manuel colorisées

sjas
la source
1
Je n'arrive pas à faire fonctionner cela avec Windows. Les sorties sont vierges pour par exemplela = "!grep '\t=' ~/.gitconfig | less"
chwi
1
@Wilhelmsen: Avez-vous peut-être copié et collé des éléments de la liste ci-dessus? Avez-vous vraiment un TABprécédent à chaque fois =? Avec des espaces, cela ne fonctionnera pas. J'avais moi-même des espaces dans mes fenêtres .gitconfig, une fois que je les ai remplacées par un seul tabstop, cmd.exe se comporte comme prévu.
sjas
2
overengineering
Weapon X
dépend de la fréquence à laquelle vous utilisez quelque chose
sjas
16

Utiliser git varet filtrer uniquement ceux qui commencent par alias:

git var -l | grep -e "^alias"
mkobit
la source
14

Comme d'autres réponses l'ont mentionné, git config -lrépertorie tous les détails de votre configuration à partir de votre fichier de configuration. Voici un exemple partiel de cette sortie pour ma configuration:

...
alias.force=push -f
alias.wd=diff --color-words
alias.shove=push -f
alias.gitignore=!git ls-files -i --exclude-from=.gitignore | xargs git rm --cached
alias.branches=!git remote show origin | grep \w*\s*(new^|tracked) -E
core.repositoryformatversion=0
core.filemode=false
core.bare=false
...

Nous pouvons donc extraire les lignes d'alias en utilisant git config -l | grep alias:

alias.force=push -f
alias.wd=diff --color-words
alias.shove=push -f
alias.gitignore=!git ls-files -i --exclude-from=.gitignore | xargs git rm --cached
alias.branches=!git remote show origin | grep \w*\s*(new^|tracked) -E

Nous pouvons rendre cela plus joli en effaçant simplement cutla alias.partie de chaque ligne, nous laissant avec cette commande:

git config -l | grep alias | cut -c 7-

Qui imprime:

force=push -f
wd=diff --color-words
shove=push -f
gitignore=!git ls-files -i --exclude-from=.gitignore | xargs git rm --cached
branches=!git remote show origin | grep \w*\s*(new^|tracked) -E

Enfin, n'oubliez pas d'ajouter ceci comme alias:

git config --global alias.la "!git config -l | grep alias | cut -c 7-"

Prendre plaisir!

Anubian Noob
la source
13

Pour les fenêtres:

git config --list | findstr "alias"
176 codage
la source
12

J'ai mentionné en juin 2018 avec " list list - les commandes git les plus utilisées " le Git 2.18 "use --list-cmds=alias( commit 3301d36 )", que carej rapporte dans sa réponse .

 git --list-cmds=alias

En plus de cela ou de git config --get-regexp alias, vous pouvez combiner sa sortie avec git help, dont la sortie changera avec Git 2.14.x / 2.15:

" git help co" dit maintenant " co is aliased to ...", pas " git co is".

Voir commit b3a8076 (12 sept. 2017) par Kaartic Sivaraam ( sivaraam) .
(Fusionné par Junio ​​C Hamano - gitster- dans commit 5079cc8 , 25 sept. 2017)

help: changer un message pour être plus précis

Lorsque l'utilisateur essaie d'utiliser l' --helpoption ' ' sur une commande aliasée, les informations sur l'alias sont imprimées comme indiqué ci-dessous:

$ git co --help
`git co' is aliased to `checkout'

Cela ne semble pas correct, car l'utilisateur a uniquement un alias ' co' et non ' git co'.
Cela peut même être incorrect dans les cas où l'utilisateur a utilisé un alias comme ' tgit'.

$ tgit co --help
`git co' is aliased to `checkout'
VonC
la source
9

Rechercher ou afficher tous les alias

Ajoutez à votre .gitconfigsous [alias]:

aliases = !git config --list | grep ^alias\\. | cut -c 7- | grep -Ei --color \"$1\" "#"

Ensuite, vous pouvez faire

  • git aliases - afficher TOUS les alias
  • git aliases commit - uniquement les alias contenant "commit"
Tom Hale
la source
9

J'utilise cet alias dans mon global~/.gitconfig

# ~/.gitconfig

[alias]
    aliases = !git config --get-regexp ^alias\\. | sed -e s/^alias.// -e s/\\ /\\ $(printf \"\\043\")--\\>\\ / | column -t -s $(printf \"\\043\") | sort -k 1

pour produire la sortie suivante

$ git aliases
aliases   --> !git config --get-regexp ^alias\. | sed -e s/^alias.// -e s/\ /\ $(printf "\043")--\>\ / | column -t -s $(printf "\043") | sort -k 1
ci        --> commit -v
cim       --> commit -m
co        --> checkout
logg      --> log --graph --decorate --oneline
pl        --> pull
st        --> status
...       --> ...

( Remarque: cela fonctionne pour moi dans git bash sous Windows . Pour d'autres terminaux, vous devrez peut-être adapter l'échappement. )


Explication

  1. !git config --get-regexp ^alias\\. imprime toutes les lignes de git config commençant par alias.
  2. sed -e s/^alias.//supprime alias.de la ligne
  3. sed -e s/\\ /\\ $(printf \"\\043\")--\\>\\ /remplace la première occurrence d'un espace par \\ $(printf \"\\043\")--\\>(qui correspond à #-->).
  4. column -t -s $(printf \"\\043\")formate toutes les lignes dans un tableau à colonnes régulièrement espacées. Le caractère $(printf \"\\043\")évalué #est utilisé comme séparateur.
  5. sort -k 1 trie toutes les lignes en fonction de la valeur de la première colonne

$ (printf \ "\ 043 \")

Cela imprime simplement le caractère #(hex 043) qui est utilisé pour la séparation des colonnes. J'utilise ce petit hack pour que l' aliases alias lui-même ne contienne pas littéralement le #personnage. Sinon, il remplacerait ces #caractères lors de l'impression. Remarque : remplacez-le par un autre caractère si vous avez besoin d'alias avec des #signes littéraux .

Thomas
la source
fatal: alias récursif: alias
Urasquirrel
fatal: bad config line 15 in file C: / Users / ____ /. gitconfig
Urasquirrel
@Urasquirrel: Sur quel système d'exploitation rencontrez-vous des problèmes? Cela fonctionne pour moi dans git bash sur Windows et dans bash sur Mac OS X (Apple Git).
Thomas
C'était certainement des fenêtres, mais un an ou plus plus tard, je ne suis pas sûr à 100%.
Urasquirrel
2

Il y a une fonction intégrée ... essayez

$ __git_aliases

liste tous les alias :)

vigo
la source
3
Pouvez-vous montrer un exemple de ligne de commande sur la façon de l'utiliser, avec un exemple de sortie?
Acumenus
Intégré à quoi? Je ne trouve rien de ce genre dans msysgit. Où avez-vous trouvé cela exactement?
ADTC
2
Ni l'appeler directement depuis le terminal ni comme argument pour git ne produit de sortie de valeur. À quoi exactement cela est-il intégré?
agréablement ascyphous le
4
A travaillé pour moi dans git bash. $ __git_aliases renvoie une liste d'alias, bien qu'elle ne montre pas à quoi ils sont aliasés.
jaypb
1
@ADTC la ligne de code dans cette réponse est un exemple de ligne de commande. Le $ indique l'invite de terminal Linux typique. Tapez le reste de cette ligne dans un tel terminal et appuyez ENTERet sortez une liste de vos alias. Fonctionne à la fois sur Linux et Windows (git bash), car il est intégré à git. (C'est probablement une fonction que git utilise en interne pour résoudre les alias lorsqu'ils sont utilisés sur la ligne de commande.)
Superole
1

Si vous connaissez le nom de l'alias, vous pouvez utiliser l' --helpoption pour le décrire. Par exemple:

$ git sa --help
`git sa' is aliased to `stash'

$ git a --help
`git a' is aliased to `add'
cmcginty
la source
1

Depuis git 2.18, vous pouvez utiliser git --list-cmds=alias

carej
la source
Ils ne renvoient que l'alias cmd, pas son contenu. Y a-t-il une option pour l'obtenir?
Carles Alcolea
0

Encore un autre gitalias (appelé alias) qui affiche les alias git: ajoutez ce qui suit à votre [alias]section gitconfig :

[alias]
    # lists aliases matching a regular expression
    alias = "!f() { git config --get-regexp "^alias.${1}$" ; }; f"

Exemple d'utilisation, donnant le nom d'alias complet (correspond exactement au nom d'alias: ie, ^foobar$), et affiche simplement la valeur:

$ git alias st
alias.st status -s

$ git alias dif
alias.dif diff

Ou, donnez regexp, qui affiche tous les alias et valeurs correspondants:

$ git alias 'dif.*'
alias.dif diff
alias.difs diff --staged
alias.difh diff HEAD
alias.difr diff @{u}
alias.difl diff --name-only

$ git alias '.*ing'
alias.incoming !git remote update -p; git log ..@{u}
alias.outgoing log @{u}..

Avertissements: citez l'expression rationnelle pour empêcher l'expansion du shell en tant que glob, bien que ce ne soit pas techniquement nécessaire si / quand aucun fichier ne correspond au modèle. Aussi: toute expression rationnelle est très bien, sauf que ^(début de modèle) et $(fin de modèle) ne peuvent pas être utilisés; ils sont implicites. Suppose que vous n'utilisez pas git-aliasdegit-extras .

De plus, évidemment, vos alias seront différents; ce ne sont que quelques-uns que j'ai configurés. (Vous les trouverez peut-être aussi utiles.)

Michael
la source