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


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


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

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.


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!!


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


0

substituir

parse_git_branch

com

parse_git_branch 2>/dev/null

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


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\]\$ '
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.