Como mostro o ramo git com cores no prompt do Bash?

109

Estou usando este guia para mostrar o nome da ramificação no terminal gnome (Ubuntu 15.10) ao trabalhar em um repositório git. Com base no acima, agora tenho o seguinte no meu arquivo ~ / .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

Como resultado, agora recebo:

insira a descrição da imagem aqui

assim funciona . Mas por que a coloração do meu usuário @ host foi removida? E eu também esperaria que o nome do ramo fosse colorido. Antes era assim:

insira a descrição da imagem aqui

ATUALIZAÇÃO: Agora, tentei este guia:

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

adicionando isso ao .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 isso funciona:

insira a descrição da imagem aqui

Observe que .bashrc também tenho este (padrão):

# 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

Ainda não encontrei o motivo pelo qual esse snippet fornece o resultado correto e a outra versão não. Alguma contribuição sobre isso?

Aqui está a versão do meu .bashrc que possui o snippet antigo habilitado que não funciona:

http://pastebin.com/M8kjEiH3

u123
fonte
Não foi force_color_promptcomentado antes?
muru
Sim, eu tentei com o mesmo resultado não comentado e comentei. O guia publicado acima diz que deve ser comentado.
U123 07/02
Você pode postar o seu completo .bashrc? Como o IIRC, o padrão .bashrcnão habilita as solicitações de cores, é necessário alterá-lo para mostrar cores. Depende do que você mudou.
muru
11
Dê uma olhada na linha 64, que deve dizer por force_color_promptque não ajudou em nada.
muru
2
@ u123 não se preocupe muito com o padrão .bashrc. Se você errar, sempre poderá obter o original /etc/skel/.bashrc.
muru

Respostas:

122

Este trecho:

# 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

Destina-se a substituir a definição de prompt padrão:

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

Que termina com:

unset color_prompt force_color_prompt

O .bashrcpost publicado mostra que você o está adicionando após a definição de prompt padrão e unset color_prompt force_color_prompt(linha # 64).

Ou substituir a definição prompt padrão com o trecho ou deixar o seu ~/.bashrccomo ele é e comentar a definição prompt padrão juntamente com unset color_prompt force_color_prompta linha # 64:


Então parte do seu .bashrc pode parecer

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

kos
fonte
Verificado acima e você está correto. Continuarei com a nova versão do snippet, pois ele funciona sem ter que modificar as partes padrão do arquivo bashrc.
U123 07/02
11
ele falha ao adicionar cor ao nome do ramo.
Avinash Raj
@AvinashRaj testá-lo com uma cópia do padrão ~/.bashrcem /etc/skel/.bashrc, você pode ter algo interferir na sua ~/.bashrc.
kos
un-comment force_color_prompt = yes (linha 48) se as cores não estiverem visíveis.
Adil Abbasi
11
Para colorir sua ramificação de acordo com seu status, você pode usar o script git-prompt nativo fornecido pelo próprio git.
Niket Pathak
60

Ubuntu: mostre o nome da sua filial no seu terminal

Adicione essas linhas no seu arquivo ~ / .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

Recarregue o arquivo .bashrc com este comando:

$ source ~/.bashrc
Sam
fonte
5
Isso funcionou para mim em 18.04!
cbloss793 7/01
11
Obrigado. Usando: Ubuntu 18.04.1 LTS
Bishwas Mishra
Também funcionou para mim no elementaryOS 0.4 Loki. Tão simples quanto abrir meu ~ / .bashrc com o comando sudo nano ~/.bashrc, copie seu código no final do arquivo, salve-o, saia e recarregue o ~ / .bashrc com o código que você colou acima. Muito obrigado;)
Juan Gómez Carrillo
Funciona no Redhat 6.8!
BeeGee
11
Isso funcionou e manteve as cores! (Ubuntu 18.04)
warkentien2
10

Por enquanto, segui este https://gist.github.com/eliotsykes/47516b877f5a4f7cd52f e trabalhei, gostando até agora, apesar de estar planejando personalizá-lo ainda mais.

No Terminal

mkdir ~/.bash

Copie o git-prompt.sharquivo bruto do git contrib para o ~/.bash diretório: https://github.com/git/git/blob/master/contrib/completion/git-prompt.sh

Dentro ~/.bashrcou ~/.bash_profile(escolha o arquivo em que você normalmente coloca personalizações / configurações do bash), adicione as linhas:

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)

Desde que você esteja dentro de um repositório git, seu prompt do Bash agora deve mostrar o ramo git atual em cores, significando se houve alterações não confirmadas.

typelogic
fonte
fácil e trabalhando!
Dani
Essa deve ser a resposta aceita, pois é clara, concisa e funciona, e também funciona em outras plataformas.
miguelmorin
2

Ir para a pasta pessoal

clique em Ctrl+ hpara mostrar os arquivos ocultos.

Abrir . bashrce, no final, cole o seguinte:

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

Caso seu terminal esteja aberto, feche e abra novamente. Desfrutar!!

webtechnelson
fonte
Olá, eu tentei e funciona apenas onde eu alterno superusuário, você pode me dizer como habilitar sempre?
Denis Stephanov
0

Meu problema era que eu não havia ativado a opção

Executar comando como um shell de login no

TerminalEditarPreferências do PerfilComando

Palhaço
fonte
0

substituir

parse_git_branch

com

parse_git_branch 2>/dev/null

na sua definição de PS1 e viva feliz para sempre.

andrej
fonte
0

Anexe as linhas abaixo 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\]\$ '
Nardele Salomon
fonte