Colorear “git log” y “git diff” en la terminal

By Diavolo, Sat 26 August 2017, in category Tools

FreeBSD, git, Slackware, terminal

He tenido el mismo problema en Slackware y FreeBSD.

Al querer ver el log de commits mediante git log o ver las diferencias con un git diff desde la terminal:

[diavolo@mikasa:djangoproject.com]$ git log --oneline

En lugar de ver algo como esto:

ff4e711 (HEAD -> master, origin/master, origin/HEAD) Fixed typo in ProfileForm docstring.
8df1aaa Fixed CSRF token leak in donate form if JavaScript is disabled.
fbfeb6a Updated links to https.
8812595 Added 2017 PyCharm fundraiser banners.
d05033b Fixed #782 -- Added Django desktop wallpaper.

Veía un conjunto de caracteres de escape que usa git para colorear los commits combinados con el log de commits.

ESC[33mff4e711ESC[mESC[33m (ESC[mESC[1;36mHEAD -> ESC[mESC[1;32mmasterESC[mESC[33m, ESC[mESC[1;31morigin/masterESC[mESC[33m, ESC[mESC[1;31morigin/HEADESC[mESC[33m) ESC[m Fixed typo in ProfileForm docstring.
ESC[33m8df1aaaESC[m Fixed CSRF token leak in donate form if JavaScript is disabled.
ESC[33mfbfeb6aESC[m Updated links to https.
ESC[33m8812595ESC[m Added 2017 PyCharm fundraiser banners.
ESC[33md05033bESC[m Fixed #782 -- Added Django desktop wallpaper.

El problema es que resulta incomodo y poco práctico para ver un historial.

git log
Figura 1: git log con caracteres de escape.

Para solucionar esto, solo hay que ejecutar lo siguiente para configurar el core.pager de git:

[diavolo@mikasa:djangoproject.com]$ git config --global core.pager "less -R"

Y desde ahora, cada vez que se desee ver el log de commits, o el diferencial de cambios, se visualizará un log a colores. Como debió de estar desde el inicio.

git log a colores
Figura 2: git log a colores.

Fuentes