martes, octubre 31, 2017

Rama de git en el prompt

Cuando trabajo en un repositorio que está bajo el control de git, me gusta tener en el prompt del terminal cual es la rama de git que estoy usando:

terron@menzoberrazan:deployaws (master)$

¿Cómo se puede conseguir esto?. Originalmente usaba mi propio script en el $HOME/.profile:

parse_git_branch() {
       shopt -s checkwinsize
       if [ $(which git) ]; then
        branch=$(git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/' -e 's/^ +//g' -e 's/\n//g')

        /bin/echo -n "$branch" 
       else
               echo -n ""
       fi

}
export -f parse_git_branch
export PS1="\h:\w \u\[\033[33m\]\$(type -t parse_git_branch > /dev/null && parse_git_branch)\[\033[00m\]\$"

Básicamente este script lo que hace es comprobar si el git está en el path. Si ese es el caso, se comprueba si el directorio actual es un repositorio git, y llegado el caso, lo imprimimos. Esta función se llama desde el prompt, que se define en la variable PS1. Se usan códigos de control para que el path salga en amarillo.

Como curiosidad, uso export -f a la función para que esté disponible en otros shell.

Sin embargo, los desarrolladores de git han preparado un script que podemos usar directamente. El script se llama git-prompt y está en el código fuente del git. En OS X, por ejemplo está en /Applications/Xcode.app/Contents/Developer/usr/share/git-core/git-prompt.sh. Se puede obtener desde el repositorio de git (git-prompt.sh)

¿Como se configura?. Pues se copia el git-prompt.sh a nuestro $HOME como .git-prompt.sh, hacemos un source del fichero desde el .profile - si usamos bash - y modificamos el prompt

source ~/.git-prompt.sh
export -f __git_ps1
export PS1='\u@\h:\W\[\033[33m\]$(__git_ps1 " (%s)")\[\033[00m\]\$'

No hay comentarios: