Meld en Git como herramienta de Fusión (merge) y Comparación (diff)

En la presente publicación voy a explicar como configurar Git para que haga uso de la herramienta Meld cuando queramos hacer comparaciones del código (diff) o resolver los conflictos que se presentan cuando fusionamos las ramas (merge). En primer vamos a ver cuales son los comandos que podemos utilizar en Git para hacer comparaciones o resoluciones de conflictos.

git diff

Este comando permite que podamos hacer una comparación entre los archivos de nuestro proyecto versionado, el cual nos indicará cual era el estado anterior y cuales han sido las modificaciones sufridas por esos archivos. De forma predeterminada, la salida de este comando es similar a esta:

diff --git a/main.cpp b/main.cpp
index 2172b27..14c3fbb 100644
--- a/main.cpp
+++ b/main.cpp
@@ -1,6 +1,8 @@
 #include <iostream>
 
+using namespace std;
+
 int main(){
-       std::cout << "Hola Mundo" << std::endl;
+       cout << "Hola Mundo, soy un archivo cambiado." << endl;
        return 0;
 }

A mi gusto, esta no es la forma más fácil de entender las diferencias.

git difftool

En un estado estándar, si no hemos configurado nada para este comando, hará lo mismo que git diff, pero la diferencia entre ambos radica en que este comando puede fácilmente ser configurado para llamar a otra aplicación o herramienta que permita visualizar las diferencias de manera más clara o por lo menos presentando mayores opciones al usuario.

git mergetool

Este comando se encarga de ejecutar la herramienta correspondiente para hacer la resolución de conflictos que pudieran surgir al fusionar dos ramas en git. Si aún no ha sido configurado por el usuario, ejecutará por defecto la aplicación vim para hacer la resolución de conflicto, pero al igual de git difftool, puede ser fácilmente configurado por el usuario para que ejecute alguna otra herramienta especializada.

git config

Es el comando que nos permitirá realizar modificaciones a la configuración básica de nuestro git, si lo ejecutamos con el parámetro --global entonces las configuraciones se harán de forma general para todos los proyectos que usen git, si no, entonces las configuraciones se harán válidas sólo para el proyecto actual en el que estemos ejecutando el comando.

¿Que es Meld?

Meld es una herramienta visual para hacer comparaciones y fusiones destinada a desarrolladores. Meld te ayuda a comparar archivos, directorios y proyectos con control de versiones (aquí es donde entra git). Permitiendo una visualización de dos o tres columnas.

Para visualizar la diferencia entre dos archivos o dos directorios con meld sólo debemos ejecutar:

meld archivo_uno archivo_dos

Meld comparando dos archivos

Meld comparando dos carpetas

Configurando Meld en Git

Git viene preparado para utilizar bastantes herramientas de resolución de conflictos, sin necesidad de andar ajustando la configuración. Puedes utilizar:

  • kdiff3,
  • opendiff,
  • tkdiff,
  • meld,
  • xxdiff,
  • emerge,
  • vimdiff, o
  • gvimdiff
    • En este caso voy a explicarles cómo configurar Meld, porque obviamente es la herramienta que yo uso, sin embargo los pasos y configuraciones son iguales para las otras herramientas de comparación y fusión.

      Para realizar la configuración de nuestra herramienta de comparación y fusión de archivos en git sólo debemos ejecutar algunos comandos sencillos:

      Instalar Meld

      Esto sólo es necesario si aún no le tenemos en nuestro sistema. Ejecutamos como super-usuario:

      # aptitude install meld
      

      Configurar Meld como herramienta de comparación

      Esta acción debería hacerse con nuestro usuario normal, nunca como super-usuario al menos que sepas lo que haces.:

      $ git config --global diff.tool meld
      

      Para probarlo modifica un archivo de tu proyecto y ejecuta:

      git difftool
      

      También lo puedes utilizar para comprobar las diferencias que existen entre una rama y otra, en el siguiente ejemplo pedimos que nos muestre las diferencias que hay entre dos ramas de ejamplo que he llamado “estable” y “desarrollo”:

      git difftool estable..desarrollo
      

      Configurar Meld como herramienta de fusión

      Con esto podremos visualizar gráficamente los conflictos que se hayan generado como producto de la fusión entre dos ramas:

      $ git config --global merge.tool meld
      

      Para probarlo une dos ramas que den conflictos (con merge o con pull):

      git difftool
      

      Ya con esto tendremos configuradas nuestras visualizaciones de diferencias en git de manera grafica con meld. Una vez hechas estas configuraciones, el ejemplo que dimos al inicio con el diff del “Hola Mundo” se verá así:

      Comparación (diff) visual, usando Meld
      Así se verá nuestro ejemplo anterior una vez configurado el Git para trabajar en conjunto con Meld

      Soy un genio, entiendo mas el modo texto que el modo gráfico ¿Cómo deshago esta configuración?

      Si te gustan más los signos de arroba (@@), suma (+++), resta (—) y los hash (2172b27..14c3fbb) y quieres deshacerte de toda esta configuración visual que acabamos de realizar, entonces simplemente tienes que devolver las variables de configuración a su estado original usando el parámetro --unset de la siguiente manera:

      $ git config --global --unset diff.tool
      $ git config --global --unset merge.tool
      

      De esa manera la configuración se devolverá a la que está por defecto para git.

      Resumen

      ### Instalar meld
      # aptitude install meld
      
      ### Configurar herramienta de comparación
      $ git config --global diff.tool meld
      
      ### Configurar herramienta de fusión
      $ git config --global merge.tool meld
      

      Fuentes:

Meld en Git como herramienta de Fusión (merge) y Comparación (diff)

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s