Configurar Meld en git para fusion (merge) y comparacion (diff)

Fecha Publicación:       04 de Julio de 2021
Fecha Modificación:       24 de Julio de 2021

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, el cual nos indicará cual era el estado anterior y cuales han sido las modificaciones sufridas por esos archivos.

Esta comparación lo hara en forma de texto. 

git diff <remote>/<remote branch>  <local branch> 

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 difftool <remote>/<remote branch>  <local branch> 

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.

¿Que es Meld?

Meld es una herramienta visual para hacer comparaciones y fusiones destinada a desarrolladores. Meld te ayuda a comparar en forma visual archivos, directorios y proyectos con control de versiones (aquí es donde entra git). 

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

meld archivo_uno archivo_dos

Instalar Meld

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

→  Descargamos desde su página oficial  https://meldmerge.org/ 

Configurar Meld como herramienta de comparación

 

👉 Comandos Usados:

  • git fetch 
    Recupera la información del repositorio remoto y la ubica en una rama oculta de tu repositorio local.

  • git branch -a
    Para saber las ramas locales y remotas.

  • git difftool nombre_repositorio_remoto..nombre_repositorio_local

 

Debemos editar el  archivo de configuración .gitconfig  de git   ingresando los siguientes comandos:

[merge]
tool = meld
[mergetool "meld"]
cmd = \"C:/Program Files (x86)/Meld/meld/Meld.exe\" --diff \"$BASE\" \"$LOCAL\" \"$REMOTE\" --output \"$MERGED\"

Nota: Recuerda de poner en cmd= la ruta donde se instalo Meld en tu computadora.

 

Para que no te pida confirmación para visualizar el archivo con Meld usar el comando en tu terminal:

$ git config --global --add difftool.prompt false

 

En primer lugar, aquí está lo que significan los parámetros:

  • $LOCAL es el archivo en la rama actual (por ejemplo, maestro).
  • $REMOTE es el archivo en la rama que se fusiona (por ejemplo, branch_name).
  • $MERGED es el archivo parcialmente fusionado con la información de conflicto de fusión en él.
  • $BASE es el antepasado de confirmación compartido de $LOCAL y $REMOTE, es decir, el archivo tal como estaba cuando se creó originalmente la rama que contiene $REMOTE.

 

La opción es si usar $MERGED o $BASE entre $LOCAL y $REMOTE.

De cualquier manera, Meld mostrará 3 paneles con $LOCAL y $REMOTE en los paneles izquierdo y derecho y $MERGED o $BASE en el panel central.

En AMBOS casos, el panel central es el archivo que debe editar para resolver los conflictos de combinación. La diferencia está en la posición de edición inicial que prefieres; $MERGED para el archivo que contiene el archivo parcialmente fusionado con la información de conflicto de fusión o $BASE para el antepasado de confirmación compartido de $LOCAL y $REMOTE. [Dado que ambas líneas cmd pueden ser útiles.

 La opción --output simplemente le dice a Meld en qué nombre de archivo git quiere que se guarde el archivo de resolución de conflictos. Meld guardará sus ediciones de conflicto en ese archivo, independientemente de si usa $MERGED o $BASE como su punto de edición inicial.

Después de editar el panel central para resolver los conflictos de fusión, simplemente guarde el archivo y cierre la ventana de Meld. Git realizará la actualización automáticamente y el archivo en la rama actual (por ejemplo, el maestro) ahora contendrá todo lo que haya terminado en el panel central.

git habrá hecho una copia de seguridad del archivo parcialmente fusionado con la información de conflicto de fusión en él agregando .orig al nombre del archivo original. p.ej. file_name.orig. Después de comprobar que está satisfecho con la combinación y de ejecutar las pruebas que desee realizar, se puede eliminar el archivo .orig.

En este punto, ahora puede hacer un compromiso para confirmar los cambios.

Si, mientras edita los conflictos de fusión en Meld, desea abandonar el uso de Meld, salga de Meld sin guardar el archivo de resolución de fusión en el panel central. git responderá con el mensaje file_name seems unchanged y luego preguntará Was the merge successful? [y/n], si responde n, la resolución de conflicto de fusión se cancelará y el archivo permanecerá sin cambios. Tenga en cuenta que si ha guardado el archivo en Meld en algún momento, no recibirá la advertencia y el mensaje de git. [Por supuesto, simplemente puede eliminar el archivo y reemplazarlo con el archivo de copia de seguridad .orig que git hizo para usted]

Si tiene más de 1 archivo con conflictos de combinación, entonces git abrirá una nueva ventana de Meld para cada uno, uno tras otro hasta que estén listos. No se abrirán todos al mismo tiempo, pero cuando termine de editar los conflictos en uno y cierre Meld, git abrirá el siguiente, y así sucesivamente hasta que se hayan resuelto todos los conflictos de fusión.

Sería sensato crear un proyecto ficticio para probar el uso de git mergetool antes de usarlo en un live project. Asegúrese de usar un nombre de archivo que contenga un espacio en su prueba, en caso de que su sistema operativo requiera que se escape de las comillas en la línea cmd, consulte a continuación.

Referencia:  https://www.it-swarm-es.com/es/git/configuracion-y-uso-de-meld-como-git-difftool-y-mergetool/1056203186/

Usar Meld para comparar 2 repositorios

Una vez instalado y configurado ejecutamos el siguiente comando :

git fetch  

git branch -a

El comando difftool abrira Meld para ver la diferencia de las ramas:

git difftool  <rama_remota>..<rama_local>

→ Recuerda para saber las ramas locales y remotas usar el comando  git branch -a.

Por ejemplo tengo una rama local y remota llamada modficaciones el codigo quedaria asi:

git difftool origin/modificaciones..modificaciones

 

Articulo : 1812 - Veces Leidas
Compartir Articulo:
×

¡Apóyame suscribiéndote a mi canal!

Tutoriales sobre Diseño Web