Hazte Online

pon un poco de informática en tu vida

Git branch en el prompt de Ubuntu

Viendo un tutorial del señor Ryan Bates me percaté de que en el prompt de su bash le aparecía la rama de git con la cual estaba trabajando.

Y claro, yo soy muy envidioso, por lo que me puse manos a la obra.

Lo primero que tuve que hacer fue editar el archivo ~/.bashrc añadiendo al final del mismo:

1
2
3
4
function parse_git_branch {
  ref=$(git symbolic-ref HEAD 2> /dev/null) || return
  echo "("${ref#refs/heads/}")"
}

Esta función devuelve la rama que tengamos activa con git, en caso de que esté trabajando con él en la carpeta donde me encuentre. En caso de no estar presente la subcarpeta .git en la carpeta actual, no devolverá nada.

A continuación tengo que modificar lo que muestra el terminal de Ubuntu, lo cual viene dado por la variable PS1, por lo que añado la siguiente línea en ~/.bashrc que lo que hace es insertar al final de lo que ya tenga la variable PS1 lo que devuelve la función anterior:

1
PS1="$PS1\$(parse_git_branch)"

Si me quedara aquí, existiría una diferencia de espacios y signos cuando tenga o no una carpeta con git, por lo que voy a ir un poco más allá modificando un par de líneas más.

Busco el siguiente trozo de código:

1
2
3
4
5
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

Y modifico las dos líneas que añaden datos a la variable PS1 quitando del final \$ para dejarlo como sigue:

1
2
3
4
5
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

Y al final del archivo, justo después de la línea que he escrito anteriormente en la que había añadido PS1="$PS1\$(parse_git_branch)" añado lo siguiente:

1
PS1="$PS1\$ "

Con todo esto ya me mostrará en el prompt del terminal de Ubuntu algo como esto:

Terminal

Comentarios