Jak wyświetlić gałąź git z kolorami w monicie Bash?

107

Korzystam z tego przewodnika, aby wyświetlić nazwę gałęzi w terminalu gnome (Ubuntu 15.10) podczas pracy w repozytorium git. Na podstawie powyższego mam teraz w moim pliku ~ / .bashrc poniżej:

# 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

W rezultacie otrzymuję teraz:

wprowadź opis zdjęcia tutaj

więc to działa . Ale dlaczego usunięto kolorowanie mojego użytkownika @ host? Spodziewałbym się również, że nazwa oddziału powinna być pokolorowana. Wcześniej wyglądało to tak:

wprowadź opis zdjęcia tutaj

AKTUALIZACJA: Wypróbowałem teraz ten przewodnik:

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

dodając to do .bashrc:

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\] $ "

i to działa:

wprowadź opis zdjęcia tutaj

Uwaga w .bashrc Mam również (domyślnie):

# 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

Muszę jeszcze znaleźć powód, dla którego ten fragment kodu daje poprawny wynik, a inna wersja nie. Wszelkie uwagi na ten temat?

Oto wersja mojego .bashrc z włączonym starym fragmentem, który nie działa:

http://pastebin.com/M8kjEiH3

u123
źródło
Nie było force_color_promptwcześniej komentowane?
muru
Tak, próbowałem z tym samym komentarzem i bez komentarza. Przewodnik zamieszczony powyżej mówi, że należy go skomentować.
u123
Czy możesz opublikować swój kompletny .bashrc? IIRC domyślnie .bashrcnie włącza podpowiedzi kolorów, więc musisz to zmienić, aby pokazać kolory. To zależy od tego, co zmieniłeś.
muru
1
Spójrz na linię 64, która powinna ci powiedzieć, dlaczego cofanie komentarzy force_color_promptnie pomogło.
muru
2
@ u123 nie przejmuj się .bashrczbytnio ustawieniem domyślnym . Jeśli się zepsujesz, zawsze możesz dostać oryginał /etc/skel/.bashrc.
muru

Odpowiedzi:

120

Ten fragment kodu:

# 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

Ma zastąpić domyślną definicję pytania:

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

Który kończy się na:

unset color_prompt force_color_prompt

.bashrcTy pisał pokazuje dodajemy go po definicji domyślna szybka i unset color_prompt force_color_prompt(linia nr 64).

Albo zastąpić definicję domyślnego wiersza z fragmentu lub zostawić ~/.bashrcjak jest i komentować definicję domyślnego wiersza wraz z unset color_prompt force_color_promptlinia nr 64:


Tak może wyglądać część twojego .bashrc

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

zrzut ekranu

kos
źródło
Zweryfikowałem powyższe i masz rację. Pozostanę przy nowej wersji fragmentu, ponieważ działa on bez konieczności modyfikowania domyślnych części pliku bashrc.
u123
1
nie dodaje koloru do nazwy oddziału.
Avinash Raj,
@AvinashRaj Przetestuj to z kopią domyślnego ~/.bashrcw /etc/skel/.bashrc, możesz mieć coś przeszkadzającego w twoim ~/.bashrc.
Kos
un-comment force_color_prompt = yes (linia nr 48), jeśli kolory nie są widoczne.
Adil Abbasi,
1
Aby pokolorować gałąź według jej statusu, możesz użyć natywnego skryptu git-prompt dostarczonego przez sam git.
Niket Pathak
60

Ubuntu: pokaż nazwę swojego oddziału na swoim terminalu

Dodaj te linie do pliku ~ / .bashrc

# 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

Ponownie załaduj plik .bashrc za pomocą tego polecenia:

$ source ~/.bashrc
Sam
źródło
5
To zadziałało dla mnie 18.04!
cbloss793
1
Dzięki. Korzystanie: Ubuntu 18.04.1 LTS
Bishwas Mishra
Działa również dla mnie na elementarnym iOS 0.4 Loki. Wystarczy, że otworzysz moje ~ / .bashrc za pomocą polecenia sudo nano ~/.bashrc, skopiuj kod na końcu pliku, zapisz go, wyjdź i ponownie załaduj ~ / .bashrc z kodem, który wkleiłeś powyżej. Wielkie dzięki;)
Juan Gómez Carrillo
Działa na Redhat 6.8!
BeeGee
1
To działało i zachowało kolory! (Ubuntu 18.04)
warkentien2
10

Na razie podążam za tym https://gist.github.com/eliotsykes/47516b877f5a4f7cd52f i pracuję, do tej pory mi się podobało, choć planuję go jeszcze bardziej dostosować.

W terminalu

mkdir ~/.bash

Skopiuj surowy git-prompt.shplik z git contrib do ~/.bash katalogu: https://github.com/git/git/blob/master/contrib/completion/git-prompt.sh

Wewnątrz ~/.bashrclub ~/.bash_profile(wybierz plik, w którym zwykle umieszczasz wszelkie dostosowania / ustawienia bash), dodaj linie:

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)

Tak długo, jak jesteś w repozytorium git, Twój monit Bash powinien teraz wyświetlać bieżącą gałąź git w kolorze, wskazując, czy nastąpiła nieprzypisana zmiana.

typelogiczny
źródło
łatwy i działający!
Dani
To powinna być zaakceptowana odpowiedź, ponieważ jest jasna, zwięzła i spełnia swoje zadanie, i działa również na innych platformach.
miguelmorin
2

Przejdź do folderu domowego

kliknij Ctrl+, haby wyświetlić ukryte pliki.

Otwarty . bashrcplik i na koniec wklej następny:

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\] $ "

Jeśli masz otwarty terminal, zamknij go i otwórz ponownie. Cieszyć się!!

webtechnelson
źródło
Witaj, próbowałem i działa tylko wtedy, gdy przełączam superużytkownika, czy możesz mi powiedzieć, jak włączyć zawsze?
Denis Stephanov
0

Mój problem polegał na tym, że nie włączyłem tej opcji

Uruchom polecenie jako powłokę logowania w

TerminalEdytujPreferencje profiluPolecenie

Żartowniś
źródło
0

zastąpić

parse_git_branch

z

parse_git_branch 2>/dev/null

w swojej definicji PS1 i żyj długo i szczęśliwie.

andrej
źródło
0

Dołącz poniższe wiersze do ~/.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
źródło