git 1.9.3 o successivo: usare __git_ps1
Git fornisce uno script shell chiamato git-prompt.sh
, che include una funzione __git_ps1
che
stampa il testo da aggiungere al prompt di bash PS1 (include il nome del ramo)
Il suo utilizzo più semplice è:
$ __git_ps1
(master)
Prende anche una stringa di formato opzionale:
$ __git_ps1 'git:[%s]'
git:[master]
Come ottenerlo
Innanzitutto, copia il file da qualche parte (ad es ~/.git-prompt.sh
.).
Opzione 1: usa una copia esistente sul tuo filesystem. Esempio (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
Opzione 2: estrarre lo script da GitHub .
Quindi, aggiungi la seguente riga al tuo .bashrc/.zshrc
:
source ~/.git-prompt.sh
Infine, cambia il tuo PS1
per chiamare __git_ps1
come sostituzione di comando:
bash:
PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '
zsh:
setopt PROMPT_SUBST ; PS1='[%n@%m %c$(__git_ps1 " (%s)")]\$ '
git <1.9.3
Ma nota che solo git 1.9.3 (maggio 2014) o successivo ti permette di mostrare in modo sicuro quel nome di ramo (!)
Vedi commit 8976500 di Richard Hansen ( richardhansen
) :
Sia bash che zsh sottopongono il valore di PS1 all'espansione dei parametri , alla sostituzione dei comandi e all'espansione aritmetica.
Invece di includere il nome del ramo grezzo e senza caratteri di escape PS1
quando si esegue in modalità a due o tre argomenti, costruire PS1
per fare riferimento a una variabile che contiene il nome del ramo.
Poiché le shell non si espandono in modo ricorsivo, questo evita l'esecuzione di codice arbitrario da nomi di rami appositamente predisposti come
'$(IFS=_;cmd=sudo_rm_-rf_/;$cmd)'.
Quale mente subdola chiamerebbe un ramo del genere? ;) ( Accanto a una mamma come in xkcd )
Altri esempi
still_dreaming_1 riporta nei commenti :
Questo sembra funzionare alla grande se vuoi un prompt dei colori con xterm
(nel mio .bashrc
):
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)\$ '
Tutto ha un colore diverso, incluso il ramo.
In 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) \$ '