viernes, 21 de mayo de 2010

Git en tu prompt

Ultimamente, GIT está causando furor entre los miembros del labo. Aunque el cambio desde Subversion puede ser algo traumático si no se digieren bien los nuevos conceptos, el cambio de paradigma hacia el control de versiones distribuidos merece mucho la pena. Una buena introducción es el libro online Pro Git (recomendación vía Álvaro).

Hoy quiero compartir un snippet que permite personalizar el PROMTP de bash para que muestre en que rama de un repositorio GIT estamos trabajando y un asterisco si tenemos cambios pendientes. Para usarlo, basta con que lo copiéis a vuestro home y lo llaméis desde el .bashrc.

function git_dirty {
[[ $(git status 2> /dev/null | tail -n1) != "nothing to commit (working directory clean)" ]] && echo "*"
}
function git_prompt {
__git_ps1 '%s' | sed -e "s/\(.*\)/\1$(git_dirty):/"
}
function proml {
local BLUE="\[\033[0;34m\]"
local LIGHT_BLUE="\[\033[1;34m\]"
local RED="\[\033[0;31m\]"
local LIGHT_RED="\[\033[1;31m\]"
local GREEN="\[\033[0;32m\]"
local LIGHT_GREEN="\[\033[1;32m\]"
local YELLOW="\[\033[1;33m\]"
local WHITE="\[\033[1;37m\]"
local LIGHT_GRAY="\[\033[0;37m\]"
local NO_COLOR="\[\033[0m\]"
case $TERM in
xterm*)
TITLEBAR='\[\033]0;\u@\h:\w\007\]'
;;
*)
TITLEBAR=""
;;
esac
if [ "`whoami`" = "root" ]; then
PS1="$LIGHT_RED[<<\u>>$YELLOW@\h$LIGHT_RED]\
[$WHITE\$(git_prompt)$LIGHT_BLUE\W$LIGHT_RED]\
$YELLOW\$$NO_COLOR "
else
PS1="$LIGHT_BLUE[$WHITE\u@\h$LIGHT_BLUE]\
[$WHITE\$(git_prompt)$LIGHT_BLUE\W]\
\$$NO_COLOR "
fi
PS2="$WHITE>$NO_COLOR "
PS4="$WHITE+$NO_COLOR "
}
proml
view raw .promptrc hosted with ❤ by GitHub

Como característica extra, el prompt cambia de color si abrís una shell de root para que no se os olvide cerrarla.


Actualización: si utilizáis el git desde los ports de mac, echadle un vistazo a este hilo para habilitar el comando __git_ps1

3 comentarios:

  1. Muy interesante... yo aun uso svn y para más INRI me han cambiado a Windows, pero si algún día uso GIT tendré esto muy encuenta.

    Un saludo

    ResponderEliminar
  2. No te angusties, con el cygwin tienes la shell de bash con un vim operativo en un abrir y cerrar de ojos. Además, aunque tenga menos interés, también hay gente que se he metido a personalizar el prompt para usuarios de subversión.




    Se echa de menos algún post tuyo, a ver si nos sorprendes con algo. Un saludo.

    ResponderEliminar
  3. Yo usaba mucho git-svn. La verdad es que la mezcla de los dos sistemas funciona cojonuda... :)

    ResponderEliminar