Come faccio a mostrare il ramo git con i colori nel prompt di Bash?


109

Sto usando questa guida per mostrare il nome del ramo nel terminale gnome (Ubuntu 15.10) quando si lavora in un repository git. Sulla base di quanto sopra ho ora il seguente nel mio file ~ / .bashrc:

# 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

Di conseguenza ora ottengo:

inserisci qui la descrizione dell'immagine

quindi funziona . Ma perché la colorazione del mio utente @ host è stata rimossa? E mi aspetto anche che il nome del ramo dovrebbe essere colorato. Prima sembrava così:

inserisci qui la descrizione dell'immagine

AGGIORNAMENTO: ora ho provato questa guida invece:

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

aggiungendo questo a .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\] $ "

e funziona:

inserisci qui la descrizione dell'immagine

Nota in .bashrc Ho anche questo (impostazione predefinita):

# 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

Devo ancora trovare il motivo per cui quello snippet dà il risultato corretto e l'altra versione no. Qualche input su questo?

Ecco la versione del mio .bashrc con il vecchio frammento abilitato che non funziona:

http://pastebin.com/M8kjEiH3


È stato force_color_promptcommentato prima?
Muru,

Sì, ho provato con lo stesso risultato sia commentato che commentato. La guida pubblicata sopra dice che dovrebbe essere commentata.
u123,

Puoi pubblicare il tuo completo .bashrc? IIRC il valore predefinito .bashrcnon abilita i prompt dei colori, quindi è necessario modificarlo per mostrare i colori. Dipende da cosa hai cambiato.
Muru,

1
Dai un'occhiata alla riga 64, che dovrebbe dirti perché il commento force_color_promptnon ha aiutato.
Muru,

2
@ u123 non preoccuparti .bashrctroppo del valore predefinito . Se sbagli, puoi sempre ottenere l'originale /etc/skel/.bashrc.
Muru,

Risposte:


122

Questo frammento:

# 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

È destinato a sostituire la definizione del prompt predefinita:

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

Che termina con:

unset color_prompt force_color_prompt

Il .bashrcpost che hai pubblicato mostra che lo stai aggiungendo dopo la definizione del prompt predefinito e unset color_prompt force_color_prompt(riga # 64).

O sostituire la definizione prompt di default con lo snippet o lasciare la vostra ~/.bashrccom'è e commentare la definizione prompt di default insieme unset color_prompt force_color_prompton line # 64:


Quindi potrebbe sembrare una parte del tuo .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

screensot


Verificato quanto sopra e hai ragione. Continuerò con la nuova versione dello snippet poiché funziona senza dover modificare le parti predefinite del file bashrc.
u123,

1
non riesce ad aggiungere colore al nome del ramo.
Avinash Raj,

@AvinashRaj Provalo con una copia del default ~/.bashrcin /etc/skel/.bashrc, potresti avere qualcosa che interferisce nel tuo ~/.bashrc.
kos

un-force force_color_prompt = yes (riga # 48) se i colori non sono visibili.
Adil Abbasi,

1
Per colorare il tuo ramo in base al suo stato, puoi usare lo script nativo git-prompt fornito da git stesso.
Niket Pathak,

61

Ubuntu: mostra il nome della tua filiale sul tuo terminale

Aggiungi queste righe nel tuo file ~ / .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

Ricarica il file .bashrc con questo comando:

$ source ~/.bashrc

5
Questo ha funzionato per me il 18.04!
cbloss793,

1
Grazie. Utilizzo: Ubuntu 18.04.1 LTS
Bishwas Mishra il

Ha funzionato anche per me su elementaryOS 0.4 Loki. Semplice come aprire my ~ / .bashrc con il comando sudo nano ~/.bashrc, copiare il codice alla fine del file, salvarlo, uscire e ricaricare ~ / .bashrc con il codice incollato sopra. Grazie mille;)
Juan Gómez Carrillo il

Funziona su Redhat 6.8!
BeeGee,

1
Questo ha funzionato e mantenuto i colori! (Ubuntu 18.04)
warkentien2,

10

Per ora, ho seguito questo https://gist.github.com/eliotsykes/47516b877f5a4f7cd52f e funzionando, mi è piaciuto finora, anche se ho intenzione di personalizzarlo ulteriormente.

Nel terminale

mkdir ~/.bash

Copia il git-prompt.shfile raw da git contrib nella ~/.bash directory: https://github.com/git/git/blob/master/contrib/completion/git-prompt.sh

All'interno ~/.bashrco ~/.bash_profile(scegli il file in cui normalmente inserisci le personalizzazioni / impostazioni di bash), aggiungi le righe:

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)

Finché sei all'interno di un repository git, il tuo prompt di Bash dovrebbe ora mostrare l'attuale ramo git a colori a significare se ha ricevuto modifiche senza commit.


facile e funzionante!
Dani,

Questa dovrebbe essere la risposta accettata, poiché è chiara, concisa e fa il lavoro, e funziona anche su altre piattaforme.
miguelmorin,

2

Vai alla cartella principale

fai clic su Ctrl+ hper mostrare i file nascosti.

Aperto . bashrcfile e alla fine incollare il prossimo:

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

Nel caso in cui il terminale sia aperto, chiudere e riaprire. Godere!!


Ciao, l'ho provato e funziona solo dove cambio superutente, puoi dirmi come abilitare sempre?
Denis Stephanov,

0

Il mio problema era che non avevo abilitato l'opzione

Esegui il comando come shell di login in

TerminaleModificaPreferenze profiloComando


0

sostituire

parse_git_branch

con

parse_git_branch 2>/dev/null

nella tua definizione di PS1 e vivi per sempre felici e contenti.


0

Aggiungi le righe seguenti a ~/.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\]\$ '
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.