Posso exibir o GIT no prompt quando o diretório atual tiver uma pasta .git?

5

Posso exibir o GIT em prompt quando o diretório atual tiver / contém uma pasta .git ? Existe uma maneira de fazer isso? Meu prompt atual é definido assim:

export PS1="[\u@\h] \w $ "

Então, meu prompt é assim:

[user@computer] ~/workspace  $

E eu quero que seja dinamicamente parecido com isto:

[user@computer] ~/workspace GIT $
    
por djangofan 21.04.2016 / 22:37

5 respostas

11

A maneira mais padrão é usar __git_ps1 diretamente do git. No Ubuntu, está disponível neste caminho:

source /usr/lib/git-core/git-sh-prompt
## source /etc/bash_completion.d/git-prompt
#PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w $(__git_ps1 "(%s)")\$ '

Você pode notar a parte adicionada $(__git_ps1 "(%s)") , que o notificará sobre o estado atual do repositório - ramificação atual, reinicializações contínuas, mesclagens e assim por diante.

O arquivo no Ubuntu é fornecido por git package:

$ dpkg-query -S /usr/lib/git-core/git-sh-prompt
git: /usr/lib/git-core/git-sh-prompt

Para o fedora por git-core (com um caminho um pouco diferente):

rpm -qf /usr/share/git-core/contrib/completion/git-prompt.sh
git-core-2.5.5-1.fc23.x86_64

Seu prompt mudará de

[user@computer] ~/workspace $ 

para

[user@computer] ~/workspace (master)$ 
    
por 21.04.2016 / 23:33
3

Você provavelmente estaria mais feliz com isso: existe uma pasta .git aqui ou em um dos meus diretórios pai ?

in_git () { 
    local dir=$PWD
    until [[ $dir == / ]]; do 
        [[ -d "$dir/.git" ]] && return 0
        dir=$(dirname "$dir")
    done
    return 1
}                                             

Em seguida, o seu pedido é

PS1='[\u@\h] \w $(in_git && echo "GIT ")\$ '                                 

Isso mostrará o indicador do GIT se você estiver em algum subdiretório no repo.

    
por 21.04.2016 / 23:20
2

Obrigado por todas as suas respostas! Eu acabei colocando isso no meu .bash_profile (no Mac):

parse_git_branch() {
     git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ ()/'
}
export PS1="\u@\h \[3[32m\]\w\[3[33m\]\$(parse_git_branch)\[3[00m\] $ "
    
por 22.04.2016 / 21:00
1
  1. Altere seu PROMPT_COMMAND da seguinte forma:

    PROMPT_COMMAND="$PROMPT_COMMAND; if [ -d .git ]; then ingitrepo='GIT '; else ingitrepo=''; fi"
    
  2. Altere seu PS1 da seguinte forma:

    PS1='[\u@\h] \w ${ingitrepo}\$ '
    

Observe que as aspas simples são usadas ao definir PS1 para evitar a resolução prematura de variáveis e também observar que uma barra invertida antes de $ no final de seu PS1 é recomendado - é o mesmo que $ , a menos você é root ; então torna-se # .

Observe também que [ -d .git ] é apenas principalmente um teste válido para saber se você está em um repositório git. Mas para ser rápido e sujo, e para seu uso pessoal, não é ruim.

    
por 21.04.2016 / 23:06
0

Você pode instalar o link que mostrará dev ± onde ± significa git e dev é o branch git em que você está atualmente.

    
por 22.04.2016 / 08:00

Tags