Wie drucke ich eine Liste meiner Git-Aliase, dh etwas analog zum alias
Befehl bash ?
Wie drucke ich eine Liste meiner Git-Aliase, dh etwas analog zum alias
Befehl bash ?
Antworten:
Diese Antwort baut auf der Antwort von Johnny auf . Dies gilt, wenn Sie nicht git-alias
von 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, alias
der in Ihrer ~/.gitconfig
Datei gespeichert wird. Wenn Sie es verwenden, werden alle Ihre Git-Aliase in fast demselben Format aufgelistet, wie sie in der ~/.gitconfig
Datei 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 alias
wie 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 alias
nur ein Alias ist und keine Funktion von git ist.
Fügen Sie zum Sortieren der aufgelisteten Aliase | sort
kurz vor dem abschließenden doppelten Anführungszeichen hinzu. Alternativ können Sie die Aliase ~/.gitconfig
sortiert 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/gitconfig
Datei.
alias.
am Anfang jeder Zeile los wird
fatal: bad config
. Die Lösung von Git-extra funktioniert jedoch für mich: github.com/tj/git-extras/blob/master/bin/git-alias
git config --global alias.alias "! git config --get-regexp ^alias\."
. Stellen git version
Sie alternativ sicher, dass Sie eine aktuelle Version von git haben.
$ git config --get-regexp alias
'^alias\.'
git config -e
Ihre 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 :)
git config -e
bearbeitet nur die .git/config
Datei. Aber die meisten meiner Aliase sind global definiert ~/.gitconfig
.
git config --global alias.aliases config --get-regexp '^alias\.'"
... und danngit aliases
"
irgendwo
Ich habe einen Git-Alias namens (seltsamerweise) alias
fü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.
.
--system
stattdessen ist --global
so etwas auf Systemebene nützlicher, nicht auf Benutzerebene.
alias = config --get-regexp ^alias\\.
.
git config --global alias.alias "!git config --get-regexp ^alias\. | grep -Po '(?<=alias\.)\S*' | sort"
Eine andere Alternative (etwas, an das ich mich leicht erinnern kann):
git config --list | grep alias
alias
Alias auch einmal erstellen und dann vergessen, dass Sie ihn sogar erstellt haben.
-l
als praktische Verknüpfung für verwenden, --list
aber ich mag die Idee, einen Alias zum Auflisten der Aliase zu erstellen.
git config --list | grep -E '^alias'
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:
#.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:
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 -R
Flagge 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.)
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 submodule
alles, 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 ...
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 aa
oder git ca "..."
in Windows
oder mit Bash-Aliasen gaa
/ g aa
oder 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:
la = "!grep '\t=' ~/.gitconfig | less"
TAB
Vorgä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.
Wie in anderen Antworten erwähnt, werden git config -l
alle 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 cut
den 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!
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 alias
kö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 seinWenn der Benutzer versucht, die
--help
Option ' ' 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'
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. )
!git config --get-regexp ^alias\\.
druckt alle Zeilen aus der Git-Konfiguration, die mit beginnen alias.
sed -e s/^alias.//
wird alias.
aus der Zeile entferntsed -e s/\\ /\\ $(printf \"\\043\")--\\>\\ /
ersetzt das erste Vorkommen eines Leerzeichens durch \\ $(printf \"\\043\")--\\>
(das zu ausgewertet wird #-->
).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.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 #
.
Es gibt eine eingebaute Funktion ... versuchen
$ __git_aliases
listet alle Aliase auf :)
$
bezeichnet die typische Linux-Terminal-Eingabeaufforderung. Geben Sie den Rest dieser Zeile in ein solches Terminal ein und klicken Sie auf ENTER
und 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.)
Ab Git 2.18 können Sie verwenden git --list-cmds=alias
Noch ein git
Alias (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-alias
von 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.)