Listen Sie Git-Aliase auf

444

Wie drucke ich eine Liste meiner Git-Aliase, dh etwas analog zum aliasBefehl bash ?

ma11hew28
quelle
2
Siehe auch: Git-Alias, von Git-Extras
Driftcatcher
7
@MattDiPasquale - Ich denke, die Top-Antwort unten funktioniert, vielleicht sollten Sie sie akzeptieren?
Domoarigato
@domoarigato Danke. Es tut mir leid, dass ich keine Antwort akzeptiert habe. Ich habe es einfach getan.
ma11hew28
Es könnte ein Kandidat für die nützliche Frage sein, die am längsten ohne akzeptierte Antwort gegangen ist :): P
domoarigato
@domoarigato Hah. Nun, danke. :-)
ma11hew28

Antworten:

124

Diese Antwort baut auf der Antwort von Johnny auf . Dies gilt, wenn Sie nicht git-aliasvon verwenden git-extras.

Führen Sie unter Linux einmal Folgendes aus:

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

Dadurch wird ein permanenter Git-Alias ​​mit dem Namen erstellt, aliasder in Ihrer ~/.gitconfigDatei gespeichert wird. Wenn Sie es verwenden, werden alle Ihre Git-Aliase in fast demselben Format aufgelistet, wie sie in der ~/.gitconfigDatei enthalten sind. Geben Sie dazu Folgendes ein:

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

Es gelten folgende Überlegungen:

  • Um zu verhindern, dass der Alias aliaswie oben aufgeführt wird, fügen Sie ihn | grep -v ^'alias 'kurz vor dem abschließenden doppelten Anführungszeichen hinzu. Ich empfehle dies nicht, damit Benutzer nicht vergessen, dass der Befehl aliasnur ein Alias ​​ist und keine Funktion von git ist.

  • Fügen Sie zum Sortieren der aufgelisteten Aliase | sortkurz vor dem abschließenden doppelten Anführungszeichen hinzu. Alternativ können Sie die Aliase ~/.gitconfigsortiert halten.

  • Um den Alias ​​als systemweiten Alias ​​hinzuzufügen, ersetzen Sie --global(für den aktuellen Benutzer) durch --system(für alle Benutzer). Dies geht normalerweise in die /etc/gitconfigDatei.

Scharfsinn
quelle
3
Ich mag dieses, weil es das alias.am Anfang jeder Zeile los wird
Brian J
3
Ich weiß nicht warum, aber diese Antwort funktioniert bei mir nicht. Ich bekomme immer fatal: bad config. Die Lösung von Git-extra funktioniert jedoch für mich: github.com/tj/git-extras/blob/master/bin/git-alias
Ashitaka
1
@ Ashitaka, versuchen Sie eine limitierte Version, z git config --global alias.alias "! git config --get-regexp ^alias\.". Stellen git versionSie alternativ sicher, dass Sie eine aktuelle Version von git haben.
Acumenus
Das ist wirklich eine großartige Arbeit und fügt alles auf äußerst benutzerfreundliche Weise zusammen!
UpAndAdam
Ich glaube, Sie können den Teil "! Git" loswerden, der sich im Grunde gegenseitig auflöst. Siehe den abschließenden Abschnitt von Git Aliases
Daniel Stevens
489
$ git config --get-regexp alias
William Pursell
quelle
39
Um pedantisch zu sein, sollte das sein'^alias\.'
Josh Lee
27
Oder verwenden Sie einfach git config -eIhre Augen, um den [alias]Abschnitt zu finden . Aber Git-Fans scheinen immer ein bisschen Bash-Scripting oder Matching mit regulären Ausdrücken zu verwenden, um ihre Probleme zu lösen, auch wenn es nicht notwendig ist :)
MatrixFrog
39
git config -ebearbeitet nur die .git/configDatei. Aber die meisten meiner Aliase sind global definiert ~/.gitconfig.
Boldewyn
21
Um praktisch zu sein, sollte das sein git config --global alias.aliases config --get-regexp '^alias\.'"... und danngit aliases
Derek Greer
6
@DerekGreer Sie vermissen "irgendwo
Jake Berger
147

Ich habe einen Git-Alias ​​namens (seltsamerweise) aliasfür genau diesen Zweck erstellt ... praktisch von Zeit zu Zeit, wenn Sie genug Aliasing verwenden ...

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

Beachten Sie, dass der reguläre Ausdruck sicherstellt, dass die Zeile mit beginnt alias..

Johnny
quelle
Ich habe eine Antwort hinzugefügt , die leicht auf dieser Antwort aufbaut.
Acumenus
1
Ich schlage vor, --systemstattdessen ist --globalso etwas auf Systemebene nützlicher, nicht auf Benutzerebene.
ADTC
1
Ich liebe das. You da You da best
Charles Watson
2
Und wenn Sie es direkt zu Ihrer gitconfig hinzufügen möchten, muss es folgendermaßen aussehen : alias = config --get-regexp ^alias\\..
Marczych
Wie wäre es mitgit config --global alias.alias "!git config --get-regexp ^alias\. | grep -Po '(?<=alias\.)\S*' | sort"
Keith Robertson
84

Eine andere Alternative (etwas, an das ich mich leicht erinnern kann):

git config --list | grep alias

Rimian
quelle
8
Apropos leicht zu merken: Sie können den aliasAlias ​​auch einmal erstellen und dann vergessen, dass Sie ihn sogar erstellt haben.
Acumenus
3
Sie können -lals praktische Verknüpfung für verwenden, --listaber ich mag die Idee, einen Alias ​​zum Auflisten der Aliase zu erstellen.
ADTC
1
Gute Lösung, aber besser mit grep mit einem git config --list | grep -E '^alias'
regulären Ausdruck
28

Das Folgende funktioniert unter Linux, MacOSX und Windows (mit msysgit).

Verwenden Sie git la , um Aliase in .gitconfig anzuzeigen

Habe ich 'Bash Scripting' gehört? ;)

Über den 'nicht benötigten' Teil in einem Kommentar oben habe ich im Grunde eine Manpage-ähnliche Übersicht für meine Aliase erstellt. Warum so viel Aufhebens? Ist das nicht völliger Overkill?

Weiter lesen...

Ich habe die Befehle wie folgt in meiner .gitconfig festgelegt, getrennt wie TAB=TAB:

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

und einfach einen anderen Alias ​​definiert, um den TAB=Teil der definierten Aliase zu erfassen. (Alle anderen Optionen haben keine Tabulatoren vor und nach dem '=' in ihrer Definition, sondern nur Leerzeichen.)

Kommentare, die nicht an einen Alias TAB=====angehängt sind, sind ebenfalls angehängt, sodass sie nach dem Greppen angezeigt werden.

Zur besseren Anzeige leite ich die grep-Ausgabe wie folgt in weniger um:

Basisversion: (schwarz / weiß)

  #.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" 

Der ' \t=' Teil stimmt überein TAB=.

Um einen noch besseren Überblick über meine Aliase zu erhalten und die Bash-Konsole zu verwenden, habe ich die Ausgabe mit Terminalfarben gefärbt:

  • Alle '=' sind rot gedruckt
  • Alle '#' sind grün gedruckt

erweiterte Version: (farbig)

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

Grundsätzlich wird wie oben nur die sed- Verwendung hinzugefügt, um die Farbcodes in die Ausgabe zu übertragen.

Die -RFlagge von weniger wird benötigt, um die Farben in weniger anzuzeigen.

(Ich habe kürzlich herausgefunden, dass lange Befehle mit einer Bildlaufleiste unter dem Fenster auf Mobilgeräten nicht korrekt angezeigt werden: Der Text wird abgeschnitten und die Bildlaufleiste fehlt einfach. Dies kann beim letzten Code-Snippet hier der Fall sein. Behalten Sie dies bei Beachten Sie, wenn Sie sich hier unterwegs Code-Schnipsel ansehen.)


Warum so viel Magie wirken lassen?

Ich habe ungefähr eine halbe Meile Aliase, die auf meine Bedürfnisse zugeschnitten sind.
Einige von ihnen ändern sich auch im Laufe der Zeit . Die beste Idee, eine aktuelle Liste zur Hand zu haben, ist das Parsen der .gitconfig.

Ein **** kurzer **** Auszug aus meinen .gitconfig-Aliasen:

    #  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

In meinen Linux- oder Mac-Workstations gibt es auch weitere Aliase in den .bashrc's, ähnlich wie:

#.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

Auf diese Weise müssen Sie nicht tippen git help submodule, müssen nicht git h submodule, es ist nur gh submodulealles, was Sie benötigen, um Hilfe zu erhalten. Es sind nur einige Zeichen, aber wie oft tippst du sie ein?

Ich benutze alle folgenden, natürlich nur mit Verknüpfungen ...

  • hinzufügen
  • verpflichten
  • Commit - Amend
  • zurücksetzen --hard HEAD
  • drücken
  • holen
  • Rebase
  • Auschecken
  • Ast
  • Show-Zweig (in vielen Variationen)
  • Shortlog
  • reflog
  • diff (in Variationen)
  • log (in vielen Variationen)
  • Status
  • Show
  • Anmerkungen
  • ...

Das war nur von oben.

Ich muss oft Git ohne GUI verwenden, da viele der Git-Befehle in keinem der grafischen Frontends richtig implementiert sind. Aber jedes Mal, wenn ich sie benutze, ist es meistens auf die gleiche Weise.

Zum im letzten Absatz erwähnten Teil "nicht implementiert":
Ich habe noch nichts Vergleichbares in einer GUI gefunden:
sba = show-branch --color=always -a --more=10 --no-name- Alle lokalen und Remote-Zweige sowie die darin enthaltenen Commits anzeigen
ccm = "!git reset --soft HEAD~ && git commit"- Letzte Commit-Nachricht ändern

Aus einer einfacheren Sicht:
Wie oft tippen Sie git add .oder git commit -am "..."? Nicht einmal den Rest zählen ...
Dinge zum Laufen bringen wie git aaoder git ca "..."in Windows
oder mit Bash-Aliasen gaa/ g aaoder gca "..."/ g ca "..."unter Linux und auf Macs ...

Für meine Bedürfnisse schien es eine kluge Sache zu sein, Git-Befehle wie diesen anzupassen ...
... und zur einfacheren Verwendung habe ich mir nur bei weniger verwendeten Befehlen geholfen, sodass ich nicht jedes Mal die Manpages konsultieren muss. Befehle sind vordefiniert und das Nachschlagen ist so einfach wie möglich.

Ich meine, wir sind doch Programmierer? Es ist unsere Aufgabe, Dinge so zum Laufen zu bringen, wie wir sie brauchen.

Hier ist ein zusätzlicher Screenshot, der unter Windows funktioniert:

Skript, das mit cmd.exe arbeitet

BONUS: Wenn Sie unter Linux oder Mac arbeiten, können farbige Manpages Ihnen einiges helfen:

kolorierte Manpages

sjas
quelle
1
Ich kann dies nicht mit Windows zum Laufen bringen. Die Ausgänge sind leer für zBla = "!grep '\t=' ~/.gitconfig | less"
chwi
1
@ Wilhelmsen: Hast du vielleicht Dinge aus der obigen Liste kopiert und eingefügt? Haben Sie wirklich einen TABVorgänger =? Mit Leerzeichen wird es nicht funktionieren. Ich hatte selbst Leerzeichen in meinen Fenstern .gitconfig. Sobald ich sie durch einen einzelnen Tabstop ersetzt habe, verhält sich cmd.exe wie erwartet.
Sjas
2
Überentwicklung
Waffe X
hängt davon ab, wie oft du etwas benutzt
sjas
16

Verwenden git varund filtern Sie nur diejenigen, die beginnen mit alias:

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

Wie in anderen Antworten erwähnt, werden git config -lalle Ihre Konfigurationsdetails aus Ihrer Konfigurationsdatei aufgelistet. Hier ist ein Teilbeispiel dieser Ausgabe für meine Konfiguration:

...
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
...

So können wir die Aliaszeilen auslesen, indem wir 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

Wir können dies schöner machen , indem wir nur cutden alias.Teil jeder Zeile herausfiltern und uns diesen Befehl überlassen:

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

Welche Drucke:

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

Vergessen Sie nicht, dies als Alias ​​hinzuzufügen:

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

Genießen!

Anubian Noob
quelle
13

für Windows:

git config --list | findstr "alias"
Codierung
quelle
12

Ich erwähnte im Juni 2018 mit " Übersichtsliste - am häufigsten verwendete Git-Befehle " den Git 2.18 "use --list-cmds=alias( commit 3301d36 )", den carej in seiner Antwort meldet .

 git --list-cmds=alias

Darüber hinaus git config --get-regexp aliaskönnen Sie die Ausgabe mit kombinieren git help, deren Ausgabe sich mit Git 2.14.x / 2.15 ändert:

" git help co" sagt jetzt " co is aliased to ...", nicht " git co is".

Siehe Commit b3a8076 (12. September 2017) von Kaartic Sivaraam ( sivaraam) .
(Zusammengeführt von Junio ​​C Hamano - gitster- in Commit 5079cc8 , 25. September 2017)

help: Ändern Sie eine Nachricht, um genauer zu sein

Wenn der Benutzer versucht, die --helpOption ' ' für einen Alias-Befehl zu verwenden, werden Informationen zum Alias ​​wie folgt gedruckt:

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

Dies scheint nicht korrekt zu sein, da der Benutzer nur ' co' und nicht ' git co' aliasiert hat .
Dies kann sogar in Fällen falsch sein, in denen der Benutzer einen Alias ​​wie ' tgit' verwendet hat.

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

Suche oder zeige alle Aliase

Fügen Sie Ihrem .gitconfigUnter hinzu [alias]:

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

Dann können Sie tun

  • git aliases - ALLE Aliase anzeigen
  • git aliases commit - nur Aliase mit "commit"
Tom Hale
quelle
9

Ich verwende diesen Alias in meinem globalen~/.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

um die folgende Ausgabe zu erzeugen

$ 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
...       --> ...

( Hinweis: Dies funktioniert bei mir in Git Bash unter Windows . Bei anderen Terminals müssen Sie möglicherweise die Escape-Funktion anpassen. )


Erläuterung

  1. !git config --get-regexp ^alias\\. druckt alle Zeilen aus der Git-Konfiguration, die mit beginnen alias.
  2. sed -e s/^alias.//wird alias.aus der Zeile entfernt
  3. sed -e s/\\ /\\ $(printf \"\\043\")--\\>\\ /ersetzt das erste Vorkommen eines Leerzeichens durch \\ $(printf \"\\043\")--\\>(das zu ausgewertet wird #-->).
  4. column -t -s $(printf \"\\043\")formatiert alle Zeilen in eine gleichmäßig verteilte Spaltentabelle. Das Zeichen, $(printf \"\\043\")das ausgewertet #wird, wird als Trennzeichen verwendet.
  5. sort -k 1 sortiert alle Zeilen basierend auf dem Wert in der ersten Spalte

$ (printf \ "\ 043 \")

Dies gibt nur das Zeichen #(hex 043) aus, das für die Spaltentrennung verwendet wird. Ich benutze diesen kleinen Hack, damit der aliases Alias selbst den #Charakter nicht buchstäblich enthält . Andernfalls würden diese #Zeichen beim Drucken ersetzt. Hinweis : Ändern Sie dies in ein anderes Zeichen, wenn Sie Aliase mit Literalzeichen benötigen #.

Thomas
quelle
fatal: rekursiver Alias: Aliase
Urasquirrel
fatal: schlechte Konfigurationszeile 15 in Datei C: / Users / ____ /. gitconfig
Urasquirrel
@Urasquirrel: Auf welchem ​​Betriebssystem treten Probleme auf? Dies funktioniert für mich in Git Bash unter Windows und in Bash unter Mac OS X (Apple Git).
Thomas
Es waren definitiv Fenster, aber ein Jahr oder länger später bin ich mir nicht 100% sicher.
Urasquirrel
2

Es gibt eine eingebaute Funktion ... versuchen

$ __git_aliases

listet alle Aliase auf :)

Vigo
quelle
3
Können Sie ein Befehlszeilenbeispiel für die Verwendung zusammen mit der Beispielausgabe zeigen?
Acumenus
Eingebaut in was? Ich kann nichts dergleichen in msysgit finden. Wo genau hast du das gefunden?
ADTC
2
Weder beim direkten Aufruf vom Terminal noch als Argument für git wird eine Wertausgabe erzeugt. Wofür genau ist das eingebaut?
Einverstanden-ascyphous
4
Arbeitete für mich in Git Bash. $ __git_aliases gibt eine Liste von Aliasen zurück, obwohl nicht angezeigt wird, wofür sie aliasisiert sind.
Jaypb
1
@ADTC Die Codezeile in dieser Antwort ist ein Befehlszeilenbeispiel. Das $ bezeichnet die typische Linux-Terminal-Eingabeaufforderung. Geben Sie den Rest dieser Zeile in ein solches Terminal ein und klicken Sie auf ENTERund es wird eine Liste Ihrer Aliase angezeigt. Funktioniert sowohl unter Linux als auch unter Windows (Git Bash), da es in Git integriert ist. (Es ist wahrscheinlich eine Funktion, die Git intern verwendet, um Aliase aufzulösen, wenn sie in der Befehlszeile verwendet werden.)
Superole
1

Wenn Sie den Namen des Alias ​​kennen, können Sie ihn mit der --helpOption beschreiben. Zum Beispiel:

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

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

Ab Git 2.18 können Sie verwenden git --list-cmds=alias

carej
quelle
Sie geben nur den Alias ​​cmd zurück, nicht dessen Inhalt. Gibt es eine Option, um das zu bekommen?
Carles Alcolea
0

Noch ein gitAlias ​​(genannt alias), der Git-Aliase druckt: Fügen Sie Ihrem [alias]Abschnitt gitconfig Folgendes hinzu :

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

Beispiel für eine Verwendung, bei der der vollständige Aliasname angegeben wird (entspricht genau dem Aliasnamen: dh ^foobar$) und einfach der Wert angezeigt wird:

$ git alias st
alias.st status -s

$ git alias dif
alias.dif diff

Oder geben Sie regexp an, das alle übereinstimmenden Aliase und Werte anzeigt:

$ 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}..

Vorsichtsmaßnahmen: Geben Sie den regulären Ausdruck an, um die Shell-Erweiterung als Glob zu verhindern. Dies ist jedoch technisch nicht erforderlich, wenn keine Dateien mit dem Muster übereinstimmen. Außerdem ist jeder reguläre Ausdruck in Ordnung, außer ^(Musteranfang) und $(Musterende) können nicht verwendet werden. sie sind impliziert. Angenommen, Sie verwenden nicht git-aliasvon git-extras.

Natürlich werden Ihre Aliase auch anders sein; Dies sind nur einige, die ich konfiguriert habe. (Vielleicht finden Sie sie auch nützlich.)

Michael
quelle