exibe apenas o diretório raiz git se for um diretório git no PS1

3

Eu sei que você pode fazer algo assim para o PS1:

Corvid @ ~/github/gitdirectory (master) $

mas, isso pode ser um pouco estranho: eu quero mostrar apenas o nome de base do diretório git, não importa onde eu esteja nesse diretório, prefixado com nada. Se eu não estiver em um diretório git, não quero exibir nada

Por exemplo, se eu estiver em casa, quero que ele seja exibido:

Corvid $

Se eu tiver inserido um diretório git, quero que ele seja exibido:

Corvid @ git_project (master)

e se eu estiver me movendo dentro desse diretório, não quero adicionar nada ao caminho. Então, se eu estou em ~/git/git_project/users/authenticate.py ou algo assim, eu só quero que ele mostre Corvid @ git_project (master)

Como isso pode ser alcançado com o PS1?

    
por corvid 16.08.2014 / 00:33

1 resposta

3

Meu PS1 -fu não é tão bom, mas acho que isso pode funcionar:

parse_git_branch () {
    git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ ()/'
}

parse_git_tag () {
    git describe --tags 2> /dev/null
}

function git_prompt () {
    local OUT=
    local GIT_ROOT=$(git rev-parse --show-toplevel 2>/dev/null)

    if [[ -n $GIT_ROOT ]]
    then
        OUT=" @ $(basename '$GIT_ROOT')"
        local GIT_BRANCH="$(parse_git_branch)"
        if [[ "$GIT_BRANCH" == " ((no branch))" ]]
        then
            $GIT_BRANCH="($(parse_git_tag))";
        fi
        OUT="$OUT $GIT_BRANCH"
    fi
    echo $OUT
}

PS1="\u $(git_prompt) $ "

Efeito:

bro3886:~/devel$ bash
bro3886  $ cd
bro3886  $ cd devel/nlp/corpora
bro3886 @ nlp (master) $ 

Adaptado de Exibir filial do Git ou Marque Nomes em seu Bash Prompt e Estilo do Diretório de Prompt de Comando .

    
por muru 16.08.2014 / 06:38