💾 Archived View for psicobyte.com › blog › prompt_de_bash_para_git.gmi captured on 2024-08-18 at 18:21:42. Gemini links have been rewritten to link to archived content

View Raw

More Information

⬅️ Previous capture (2023-06-14)

-=-=-=-=-=-=-

Prompt de bash para git

2023-04-17

Si, de las cinco palabras que tiene el título de este post, sólo entiendes dos, lo más probable es que el resto del post que viene a continuación no te interese absolutamente nada.

Las personas que trabajamos con el sistema de control de versiones git[1] somos como chimpancés inquietos, porque nos pasamos el día cambiando de rama.

Saber en qué rama de un proyecto estás en un momento determinado es muy útil y, de hecho, todos los IDEs tienen alguna forma de indicarlo, al igual que muchas herramientas de ayuda a la programación.

Y, dado que el terminal es una herramienta prácticamente indispensable en programación, también hay aplicaciones, como la espectacular Powerline[2] que tienen diversas opciones para mostrar la rama actual en la línea de órdenes.

Mi aproximación personal a este último aspecto es mucho menos sofisticada y bastante más artesanal, y consiste en hacer que el propio prompt de bash indique el nombre de la rama cuando el directorio actual está bajo seguimiento de git; además, el color con el que se muestra ese nombre varía según la rama (el nombre de las ramas "_main_" y "_master_" usa un color, las ramas "_development_" y "_dev_" usan otro, y todas las demás otro distinto).

El efecto final es más o menos el siguiente:

[IMG Prompt de bash para git (1)]

Como se puede ver, cuando el directorio actual está dentro de un repositorio, el prompt reemplaza el tradicional usuario@host: por el nombre de la rama actual en el color que le corresponda.

Todo esto se hace mediante este simple código:

declare -A BRCOLOR=(
[master]="\e[31m"
[main]="\e[31m"
[development]="\e[32m"
[dev]="\e[32m"
)

REST_OF_BRANCHES="\e[34m"
DEFAULT_COLOR="\e[0m"

PS1="\$(\
    BRANCH=\$(__git_ps1 '%s')
    if [[ \${BRANCH} = '' ]]; then echo -e \"$PS1\"
    else
        COLOR=\${BRCOLOR[\${BRANCH}]}
        if [[ \${COLOR} = '' ]]; then COLOR=$REST_OF_BRANCHES
        fi
        echo -e \"\[\${COLOR}\]\${BRANCH}>\[${DEFAULT_COLOR}\]\w\$ \"
    fi)"

Los colores se asignan mediante el array asociativo BRCOLOR, que contiene nombres de ramas como clave (los nombres que se ven entre corchetes) y códigos de color ANSI[3] como valores (entre comillas); de este modo, la rama llamada "master" usará el color "\e[31m" (rojo), etcétera.

Las ramas cuyo nombre no esté en BRCOLOR, usarán el color definido en REST_OF_BRANCHES; mientras que DEFAULT_COLOR, por su parte, es el color por defecto que usa el terminal (a causa de cómo se usan los colores en un terminal, hay que volver a asignar el color "normal" después de la cadena coloreada).

Si quieres usarlo, solo necesitas copiar el código en tu archivo .bashrc y, la próxima vez que inicies una sesión en tu terminal, tendrás activo el nuevo prompt.

Puedes personalizarlo cambiando o añadiendo nombres de ramas en el array BRCOLOR y asignándole el código de color que prefieras.

Links

[1] git

[2] Powerline

[3] códigos de color ANSI

Imágenes

[1] Prompt de bash para git

Meta

Publicación orginal.

Índice de posts