Oct 19 2014
MAGIT: Git from Emacs
Hace un tiempo un amigo me pregunto como emplear diff desde emacs. Lo cierto es que en un principio pense en responderle con la utilidad M-x ediff que emacs maneja bastante bien. Sin embargo, y debido a que practicamente en todos nuestros proyectos usamos git, pense que la mejor respuesta no seria esa, sino emplear el sistema de diffs que magit provee. Asi que la solucion no era tan solo el saber como ver los diffs entre el HEAD y un fichero que se estuviese modificando, sino que pasaba por todo un conjunto de features que magit proveia y que hacia mucho mas facil no solo ver diffs, sino emplear muchas de las funcionalidades que git tenia, accesibles de manera ideal desde emacs.
Para instalar Magit, lo podemos hacer de distintas formas, ya sea mediante ELPA, Mermelade o empleando directamente el codigo del repositorio. En este caso explicare la forma recomendada por Magit, que es mediante ELPA (Emacs Lisp Package Archive), que desde Emacs 24 viene incluido por defecto en un intento de realizar instalaciones sencillas asi como actualizaciones para paquetes de Emacs Lisp.
Tan solo debemos anadir el nuevo repositorio anadiendo estas lineas a nuestro .emacs:
; Magit installation using ELPA
(require ‘package)
(add-to-list ‘package-archives
‘(«melpa» . «http://melpa.milkbox.net/packages/») t)
Una vez hecho esto, tan solo debemos abrir nuestro emacs, leer de nuevo el fichero de configuracion de emacs mediante M-x load-file de nuestro .emacs o bien M-x package-refresh-contents para actualizar la cache de ELPA.
Una vez hecho esto, tan solo debemos indicar a ELPA que queremos instalar magit de la siguiente forma: M-x package-install e indicarle que queremos instalar magit.
Instalacion de magit desde ELPA
Veamos distintos ejemplos de magit y su potencia:
Magit accediendo a distintas ramas y posibles diffs desde emacs
Estado actual del codigo desde magit, mediante M-x magit-status, posibles acciones que se pueden realizar
Ejemplo de diffs en Magit
Historial desde magit a nivel detallado para cada commit
Historial desde magit para commit a nivel resumen
Pero no solo eso, la potencia aqui se ve cuando se pueden combinar potencias de emacs con las de git y magit. Por ejemplo, para ver los diffs de un fichero especifico podemos emplear M-x vc-diff o bien C-x v =. Ademas podemos expandir segun nos interese los diffs mediante TAB o marcar regiones y pulsar «s» para ver ya no diffs de un fichero especifico, sino de una region concreta.
Es una pena que este video ya tenga muchos años de antiguedad, pero aqui se pueden ver algunas features de magit: http://vimeo.com/2871241
Aqui un cheat reference de magit con las funcionalidades mas importantes y sus keybindings: http://daemianmack.com/magit-cheatsheet.html#sec-7
Para mas informacion se puede visitar la web oficial de Magit: http://magit.github.io/documentation
Existen dependencias opcionales para magit, tal como stgit (similar a Quilt para patches desde/a un stack sobre git) , svn (soporte para svn-git), topgit (patch queue manager), wip (para work in progress sobre branches) o ert (automatizacion de tests).