git 1.9.3 ou posterior: use __git_ps1
O Git fornece um script de shell chamado git-prompt.sh
, que inclui uma função __git_ps1
que
imprime o texto a ser adicionado ao prompt do PS1 do bash (inclui o nome da filial)
Seu uso mais básico é:
$ __git_ps1
(master)
Ele também usa uma sequência de formato opcional:
$ __git_ps1 'git:[%s]'
git:[master]
Como conseguir isso
Primeiro, copie o arquivo para algum lugar (por exemplo ~/.git-prompt.sh
).
Opção 1: use uma cópia existente no seu sistema de arquivos. Exemplo (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
Opção 2: Puxe o script do GitHub .
Em seguida, adicione a seguinte linha ao seu .bashrc/.zshrc
:
source ~/.git-prompt.sh
Por fim, mude seu PS1
para chamar __git_ps1
como substituição de comando:
Bash:
PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '
Zsh:
setopt PROMPT_SUBST ; PS1='[%n@%m %c$(__git_ps1 " (%s)")]\$ '
git <1.9.3
Mas observe que apenas o git 1.9.3 (maio de 2014) ou posterior permite exibir com segurança esse nome de filial (!)
Veja commit 8976500 de Richard Hansen ( richardhansen
) :
Tanto o bash quanto o zsh sujeitam o valor do PS1 à expansão de parâmetros , substituição de comandos e expansão aritmética.
Em vez de incluir o nome bruto e sem escape da ramificação PS1
ao executar no modo de dois ou três argumentos, construa PS1
para fazer referência a uma variável que contém o nome da ramificação.
Como os shells não se expandem recursivamente, isso evita a execução arbitrária de código por nomes de ramificações especialmente criados, como
'$(IFS=_;cmd=sudo_rm_-rf_/;$cmd)'.
Que mente desonesta nomearia um ramo assim? ;) ( Ao lado de uma mãe como no xkcd )
Mais exemplos
still_dreaming_1 relata nos comentários :
Isso parece funcionar muito bem se você deseja um prompt de cores com xterm
(no meu .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)\$ '
Tudo é uma cor diferente, incluindo o ramo.
No Linux Mint 17.3 Cinnamon de 64 bits:
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] \w\[\033[00m\]$(__git_ps1) \$ '