Wie zeige ich den Git-Zweig mit Farben in der Bash-Eingabeaufforderung an?

109

Ich verwende diese Anleitung , um den Zweignamen in gnome terminal (Ubuntu 15.10) anzuzeigen, wenn ich in einem Git-Repository arbeite. Basierend auf dem obigen habe ich jetzt das Folgende in meiner ~ / .bashrc-Datei:

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes 

...

# Add git branch if its present to PS1
parse_git_branch() {
 git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}
if [ "$color_prompt" = yes ]; then
 PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[01;31m\]$(parse_git_branch)\[\033[00m\]\$ '
else
 PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w$(parse_git_branch)\$ '
fi
unset color_prompt force_color_prompt

Als Ergebnis bekomme ich jetzt:

Bildbeschreibung hier eingeben

so dass es funktioniert . Aber warum wurde die Farbe meines user @ host entfernt? Und ich würde auch erwarten, dass der Filialname farbig sein sollte. Vorher sah es so aus:

Bildbeschreibung hier eingeben

UPDATE: Ich habe jetzt stattdessen diese Anleitung ausprobiert:

https://coderwall.com/p/fasnya/add-git-branch-name-to-bash-prompt

Dies zu .bashrc hinzufügen:

parse_git_branch() {
     git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
export PS1="\u@\h \[\033[32m\]\w\[\033[33m\]\$(parse_git_branch)\[\033[00m\] $ "

und das funktioniert:

Bildbeschreibung hier eingeben

Hinweis in .bashrc Ich habe auch diese (Standard):

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes

Ich habe noch keinen Grund gefunden, warum dieses Snippet das richtige Ergebnis liefert und die andere Version nicht. Irgendwelche Eingaben dazu?

Hier ist die Version von .bashrc, für die das alte Snippet aktiviert ist und die nicht funktioniert:

http://pastebin.com/M8kjEiH3

u123
quelle
War force_color_promptvorher unkommentiert?
muru
Ja, ich habe es mit dem gleichen unkommentierten und kommentierten Ergebnis versucht. Der oben veröffentlichte Leitfaden besagt, dass er auskommentiert werden sollte.
u123
Kannst du dein komplettes posten .bashrc? IIRC aktiviert standardmäßig .bashrckeine Farbaufforderungen , daher müssen Sie diese ändern, um Farben anzuzeigen . Es hängt davon ab, was Sie geändert haben.
muru
1
Schauen Sie sich Zeile 64 an, die Ihnen sagen sollte, warum das Auskommentieren force_color_promptnicht geholfen hat.
muru
2
@ u123 mach dir keine Sorgen über die Standardeinstellung .bashrczu viel. Wenn Sie es vermasseln, können Sie immer das Original von bekommen /etc/skel/.bashrc.
muru

Antworten:

122

Dieser Ausschnitt:

# Add git branch if its present to PS1

parse_git_branch() {
 git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}
if [ "$color_prompt" = yes ]; then
 PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[01;31m\]$(parse_git_branch)\[\033[00m\]\$ '
else
 PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w$(parse_git_branch)\$ '
fi

Soll die Standard-Eingabeaufforderungsdefinition ersetzen :

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi

Was endet mit:

unset color_prompt force_color_prompt

Das, was .bashrcSie gepostet haben, zeigt, dass Sie es nach der Standard-Eingabeaufforderungsdefinition und unset color_prompt force_color_prompt(Zeile # 64) hinzufügen .

Ersetzen Sie entweder die Standard-Eingabeaufforderungsdefinition durch das Snippet oder lassen Sie ~/.bashrcsie unverändert und kommentieren Sie die Standard-Eingabeaufforderungsdefinition zusammen mit unset color_prompt force_color_promptin Zeile 64:


So könnte ein Teil Ihres .bashrc aussehen

parse_git_branch() {
 git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}
if [ "$color_prompt" = yes ]; then
 PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[01;31m\] $(parse_git_branch)\[\033[00m\]\$ '
else
 PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w$(parse_git_branch)\$ '
fi
# THE SIX LINES BELOW are the default prompt and the unset (which were in the original .bashrc)
#if [ "$color_prompt" = yes ]; then
#    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
#else
#    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
#fi
#unset color_prompt force_color_prompt

Bildschirmfoto

kos
quelle
Verifiziert das oben und Sie sind korrekt. Ich bleibe bei der neuen Version von Snippet, da dies funktioniert, ohne die Standardteile der bashrc-Datei ändern zu müssen.
u123
1
Der Filialname kann nicht gefärbt werden.
Avinash Raj
@AvinashRaj Teste es mit einer Kopie der Standardeinstellung ~/.bashrcin /etc/skel/.bashrc, möglicherweise hast du etwas, das dich stört ~/.bashrc.
Kos
un-comment force_color_prompt = yes (Zeile 48), wenn die Farben nicht sichtbar sind.
Adil Abbasi
1
Um Ihren Zweig gemäß seinem Status einzufärben, können Sie das native git-prompt-Skript verwenden, das von git selbst bereitgestellt wird.
Niket Pathak
60

Ubuntu: Zeigen Sie Ihren Filialnamen auf Ihrem Terminal an

Fügen Sie diese Zeilen in Ihre ~ / .bashrc-Datei ein

# Show git branch name
force_color_prompt=yes
color_prompt=yes
parse_git_branch() {
 git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}
if [ "$color_prompt" = yes ]; then
 PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[01;31m\]$(parse_git_branch)\[\033[00m\]\$ '
else
 PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w$(parse_git_branch)\$ '
fi
unset color_prompt force_color_prompt

Laden Sie die .bashrc-Datei mit dem folgenden Befehl neu:

$ source ~/.bashrc
Sam
quelle
5
Das hat bei mir am 18.04 geklappt!
cbloss793
1
Vielen Dank. Verwenden: Ubuntu 18.04.1 LTS
Bishwas Mishra
Es funktionierte auch für mich auf elementaryOS 0.4 Loki. Öffnen Sie einfach my ~ / .bashrc mit dem Befehl sudo nano ~/.bashrc, kopieren Sie Ihren Code am Ende der Datei, speichern Sie ihn, beenden Sie ~ / .bashrc und laden Sie ihn mit dem oben eingefügten Code neu. Vielen Dank;)
Juan Gómez Carrillo
Funktioniert mit Redhat 6.8!
BeeGee
1
Das hat funktioniert und die Farben behalten! (Ubuntu 18.04)
warkentien2
10

Im Moment bin ich dieser https://gist.github.com/eliotsykes/47516b877f5a4f7cd52f gefolgt und habe sie bisher gemocht, obwohl ich vorhabe, sie weiter anzupassen.

Im Terminal

mkdir ~/.bash

Kopieren Sie die Rohdatei git-prompt.shvon git contrib in das ~/.bash Verzeichnis: https://github.com/git/git/blob/master/contrib/completion/git-prompt.sh

Fügen Sie in ~/.bashrcoder ~/.bash_profile(wählen Sie die Datei aus, in der Sie normalerweise die Bash-Anpassungen / Einstellungen vornehmen) die folgenden Zeilen hinzu:

source ~/.bash/git-prompt.sh # Show git branch name at command prompt
export GIT_PS1_SHOWCOLORHINTS=true # Option for git-prompt.sh to show branch name in color

# Terminal Prompt:
# Include git branch, use PROMPT_COMMAND (not PS1) to get color output (see git-prompt.sh for more)
export PROMPT_COMMAND='__git_ps1 "\w" "\n\\\$ "' # Git branch (relies on git-prompt.sh)

Solange Sie sich in einem Git-Repo befinden, sollte Ihre Bash-Eingabeaufforderung jetzt den aktuellen Git-Zweig in Farbe anzeigen, um anzuzeigen, ob nicht festgeschriebene Änderungen vorgenommen wurden.

typelogisch
quelle
einfach und funktionierend!
Dani,
Dies sollte die akzeptierte Antwort sein, da sie klar und präzise ist und die Aufgabe erfüllt und auch auf anderen Plattformen funktioniert.
Miguelmorin
2

Gehe zum Home-Ordner

Klicken Sie auf Ctrl+ h, um versteckte Dateien anzuzeigen.

Öffnen. bashrcfeile und füge am Ende den nächsten ein:

parse_git_branch() {
     git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
export PS1="\u@\h \[\033[32m\]\w\[\033[33m\]\$(parse_git_branch)\[\033[00m\] $ "

Wenn Sie Ihr Terminal geöffnet haben, schließen Sie es und öffnen Sie es erneut. Genießen!!

webtechnelson
quelle
Hallo, ich habe es versucht und es funktioniert nur dort, wo ich den Superuser wechsle. Kannst du mir sagen, wie ich es immer aktivieren soll?
Denis Stephanov
0

Mein Problem war, dass ich die Option nicht aktiviert hatte

Führen Sie den Befehl als Anmeldeshell in aus

TerminalBearbeitenProfileinstellungenBefehl

Joker
quelle
0

ersetzen

parse_git_branch

mit

parse_git_branch 2>/dev/null

in deiner PS1-Definition und lebe glücklich bis ans Ende.

andrej
quelle
0

Fügen Sie die folgenden Zeilen an ~/.bashrc:

export GIT_PS1_SHOWDIRTYSTATE=true
export GIT_PS1_SHOWUNTRACKEDFILES=true

export PS1='\[\033[32m\]\u@\h\[\033[00m\]:\[\033[34m\]\w\[\033[31m\]$(__git_ps1)\[\033[00m\]\$ '
Nardele Salomon
quelle