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


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


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

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.


ł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ę!!


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

Terminal → Edytuj → Preferencje profilu → Polecenie


0

zastąpić

parse_git_branch

z

parse_git_branch 2>/dev/null

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


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\]\$ '
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.