Git 1.9.3 oder höher: verwenden __git_ps1
Git bietet ein Shell-Skript namens git-prompt.sh
, das eine Funktion enthält __git_ps1
, die
druckt Text, der zur Bash-PS1-Eingabeaufforderung hinzugefügt werden soll (einschließlich Filialname)
Die grundlegendste Verwendung ist:
$ __git_ps1
(master)
Es wird auch eine optionale Formatzeichenfolge benötigt:
$ __git_ps1 'git:[%s]'
git:[master]
Wie man es bekommt
Kopieren Sie zuerst die Datei an einen Ort (z ~/.git-prompt.sh
. B. ).
Option 1: Verwenden Sie eine vorhandene Kopie in Ihrem Dateisystem. Beispiel (Mac OS X 10.15):
$ find / -name 'git-prompt.sh' -type f -print -quit 2>/dev/null
/Library/Developer/CommandLineTools/usr/share/git-core/git-prompt.sh
Option 2: Ziehen Sie das Skript von GitHub .
Fügen Sie als Nächstes die folgende Zeile zu Ihrer hinzu .bashrc/.zshrc
:
source ~/.git-prompt.sh
Ändern Sie schließlich Ihren PS1
Aufruf __git_ps1
als Befehlsersetzung:
Bash:
PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '
Zsh:
setopt PROMPT_SUBST ; PS1='[%n@%m %c$(__git_ps1 " (%s)")]\$ '
git <1.9.3
Aber beachten Sie, dass nur git 1.9.3 (Mai 2014) oder später Sie können sicher , dass die Zweignamen angezeigt werden (!)
Siehe Commit 8976500 von Richard Hansen ( richardhansen
) :
Sowohl bash als auch zsh unterziehen den Wert von PS1 einer Parametererweiterung , einer Befehlssubstitution und einer arithmetischen Erweiterung.
PS1
Konstruieren Sie so PS1
, dass auf eine Variable verwiesen wird, die den Verzweigungsnamen enthält , anstatt den rohen, nicht entkoppelten Zweignamen in den Modus mit zwei oder drei Argumenten aufzunehmen .
Da sich die Shells nicht rekursiv erweitern, wird die Ausführung von willkürlichem Code durch speziell gestaltete Zweignamen wie z
'$(IFS=_;cmd=sudo_rm_-rf_/;$cmd)'.
Welcher hinterhältige Verstand würde einen solchen Zweig nennen? ;) ( Neben einer Mutter wie in xkcd )
Mehr Beispiele
still_dreaming_1 berichtet in den Kommentaren :
Dies scheint großartig zu funktionieren, wenn Sie eine Farbaufforderung mit xterm
(in meinem .bashrc
) möchten :
PS1='\[\e]0;\u@\h: \w\a\]\n${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]$(__git_ps1)\$ '
Alles hat eine andere Farbe, einschließlich des Zweigs.
In Linux Mint 17.3 Cinnamon 64-Bit:
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] \w\[\033[00m\]$(__git_ps1) \$ '