git 1.9.3 lub nowszy: użyj __git_ps1
Git udostępnia skrypt powłoki o nazwie git-prompt.sh
, który zawiera funkcję __git_ps1
that
drukuje tekst do dodania do zachęty bash PS1 (zawiera nazwę gałęzi)
Jego najbardziej podstawowe zastosowanie to:
$ __git_ps1
(master)
Pobiera również opcjonalny ciąg formatu:
$ __git_ps1 'git:[%s]'
git:[master]
Jak to zdobyć
Najpierw skopiuj plik gdzieś (np ~/.git-prompt.sh
.).
Opcja 1: użyj istniejącej kopii w systemie plików. Przykład (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
Opcja 2: pobierz skrypt z GitHub .
Następnie dodaj następujący wiersz do swojego .bashrc/.zshrc
:
source ~/.git-prompt.sh
Wreszcie zmień swój PS1
telefon__git_ps1
jako podstawianie poleceń:
Grzmotnąć:
PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '
Zsh:
setopt PROMPT_SUBST ; PS1='[%n@%m %c$(__git_ps1 " (%s)")]\$ '
git <1.9.3
Ale pamiętaj, że tylko git 1.9.3 (maj 2014) lub nowszy pozwala na bezpieczne wyświetlanie nazwy tej gałęzi (!)
Zobacz commit 8976500 autorstwa Richarda Hansena ( richardhansen
) :
Zarówno bash, jak i zsh poddają wartość PS1 interpretacji parametrów , podstawianiu poleceń i interpretacji wyrażeń arytmetycznych.
Zamiast dołączać nieprzetworzoną nazwę gałęzi bez znaku zmiany znaczenia, PS1
gdy działa w trybie dwu- lub trzyargumentowym, skonstruuj, PS1
aby odwołać się do zmiennej, która zawiera nazwę gałęzi.
Ponieważ powłoki nie rozwijają się rekurencyjnie, pozwala to uniknąć wykonywania dowolnego kodu przez specjalnie spreparowane nazwy gałęzi, takie jak
'$(IFS=_;cmd=sudo_rm_-rf_/;$cmd)'.
Jaki przebiegły umysł nazwałby taką gałąź? ;) ( Obok mamy jak w xkcd )
Więcej przykładów
still_dreaming_1 raporty w komentarzach :
Wydaje się, że działa świetnie, jeśli chcesz wyświetlić monit o kolorze z xterm
(w moim .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)\$ '
Wszystko ma inny kolor, łącznie z gałęzią.
W 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) \$ '