Saltar al contenido

Configuración y uso de Meld como git difftool y mergetool

Nuestro equipo especializado pasados muchos días de trabajo y recopilación de de información, obtuvimos los datos necesarios, queremos que te sea de utilidad en tu plan.

Solución:

¿Cómo configuro y uso Meld como mi git difftool?

git difftool muestra la diferencia usando un programa de diferencias GUI (es decir, Meld) en lugar de mostrar la salida de diferencias en su terminal.

Aunque puede configurar el programa GUI en la línea de comando usando -t / --tool= tiene más sentido configurarlo en tu .gitconfig expediente. [Note: See the sections about escaping quotes and Windows paths at the bottom.]

# Add the following to your .gitconfig file.
[diff]
    tool = meld
[difftool]
    prompt = false
[difftool "meld"]
    cmd = meld "$LOCAL" "$REMOTE"

[Note: These settings will not alter the behaviour of git diff which will continue to function as usual.]

Tu usas git difftool exactamente de la misma manera que usa git diff. p.ej

git difftool  file_name
git difftool  file_name
git difftool   file_name

Si está configurada correctamente, se abrirá una ventana Meld mostrando el diff usando una interfaz GUI.

El orden de los paneles de la ventana de Meld GUI se puede controlar por el orden de $LOCAL y $REMOTE en cmd, es decir, qué archivo se muestra en el panel izquierdo y cuál en el panel derecho. Si los quiere al revés, simplemente cámbielos de esta manera:

    cmd = meld "$REMOTE" "$LOCAL"

Finalmente, el prompt = false line simplemente evita que git le pregunte si desea iniciar Meld o no, de forma predeterminada, git emitirá un mensaje.


¿Cómo configuro y uso Meld como mi herramienta git mergetool?

git mergetool le permite utilizar un programa de combinación de GUI (es decir, Meld) para resolver los conflictos de combinación que se han producido durante una combinación.

Al igual que difftool, puede configurar el programa GUI en la línea de comando usando -t / --tool= pero, como antes, tiene más sentido configurarlo en su .gitconfig expediente. [Note: See the sections about escaping quotes and Windows paths at the bottom.]

# Add the following to your .gitconfig file.
[merge]
    tool = meld
[mergetool "meld"]
    # Choose one of these 2 lines (not both!) explained below.
    cmd = meld "$LOCAL" "$MERGED" "$REMOTE" --output "$MERGED"
    cmd = meld "$LOCAL" "$BASE" "$REMOTE" --output "$MERGED"

NO usas git mergetool para realizar una fusión real. Antes de usar git mergetool realizas una fusión de la forma habitual con git. p.ej

git checkout master
git merge branch_name

Si hay un conflicto de fusión, git mostrará algo como esto:

$ git merge branch_name
Auto-merging file_name
CONFLICT (content): Merge conflict in file_name
Automatic merge failed; fix conflicts and then commit the result.

En este punto file_name contendrá el archivo parcialmente combinado con la información del conflicto de combinación (ese es el archivo con todos los >>>>>>> y <<<<<<< entradas en él).

Mergetool ahora se puede utilizar para resolver los conflictos de fusión. Lo comienzas muy fácilmente con:

git mergetool

Si está configurado correctamente, se abrirá una ventana Meld mostrando 3 archivos. Cada archivo estará contenido en un panel separado de su interfaz GUI.

En el ejemplo .gitconfig entrada anterior, se sugieren 2 líneas como [mergetool "meld"]cmd línea. De hecho, hay todo tipo de formas para que los usuarios avanzados configuren el cmd línea, pero eso está más allá del alcance de esta respuesta.

Esta respuesta tiene 2 alternativas cmd líneas que, entre ellas, atenderán a la mayoría de los usuarios y serán un buen punto de partida para los usuarios avanzados que deseen llevar la herramienta al siguiente nivel de complejidad.

En primer lugar, esto es lo que significan los parámetros:

  • $LOCAL es el archivo en la rama actual (por ejemplo, maestro).
  • $REMOTE es el archivo de la rama que se está fusionando (por ejemplo, branch_name).
  • $MERGED es el archivo parcialmente fusionado con la información del conflicto de fusión en él.
  • $BASE es el ancestro de compromiso compartido de $LOCAL y $REMOTE, esto es para decir el archivo como estaba cuando la rama que contiene $REMOTE fue creado originalmente.

Te sugiero que uses:

[mergetool "meld"]
    cmd = meld "$LOCAL" "$MERGED" "$REMOTE" --output "$MERGED"

o:

[mergetool "meld"]
    cmd = meld "$LOCAL" "$BASE" "$REMOTE" --output "$MERGED"
    # See 'Note On Output File' which explains --output "$MERGED".

La elecció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 del medio.

En AMBOS casos, el panel central es el archivo que debe editar para resolver los conflictos de fusión. La diferencia es solo en qué posición de edición de inicio preferiría; $MERGED para el archivo que contiene el archivo parcialmente combinado con la información de conflicto de combinación o $BASE para el ancestro de compromiso compartido de $LOCAL y $REMOTE. [Since both cmd lines can be useful I keep them both in my .gitconfig file. Most of the time I use the $MERGED line and the $BASE line is commented out, but the commenting out can be swapped over if I want to use the $BASE line instead.]

Nota sobre el archivo de salida: no se preocupe porque --output "$MERGED" se utiliza en cmd independientemente de si $MERGED o $BASE fue utilizado anteriormente en el cmd línea. los --output La opción 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 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 Meld. Git hará la actualización automáticamente y el archivo en la rama actual (por ejemplo, maestro) ahora contendrá lo que haya terminado en el panel central.

git habrá realizado una copia de seguridad del archivo parcialmente fusionado con la información del conflicto de fusión añadiendo .orig al nombre de archivo original. p.ej file_name.orig. Después de comprobar que está satisfecho con la fusión y ejecutar las pruebas que desee hacer, el .orig el archivo se puede eliminar.

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 pregunta Was the merge successful? [y/n], si tu respondes n entonces se cancelará la resolución del conflicto de fusión 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. [Of course you can just delete the file and replace it with the backup .orig file that git made for you.]

Si tiene más de 1 archivo con conflictos de fusión, git abrirá una nueva ventana de Meld para cada uno, una tras otra hasta que todo esté listo. 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 En Vivo proyecto. Asegúrese de usar un nombre de archivo que contenga un espacio en su prueba, en caso de que su sistema operativo requiera que escape las comillas en el cmd línea, ver más abajo.


Escapar de personajes de comillas

Es posible que algunos sistemas operativos necesiten tener las comillas en cmd escapado. Los usuarios menos experimentados deben recordar que las líneas de comando de configuración deben probarse con nombres de archivo que incluyan espacios, y si el cmd las líneas no funcionan con los nombres de archivo que incluyen espacios, intente escapar de las comillas. p.ej

cmd = meld "$LOCAL" "$REMOTE"

En algunos casos, puede ser necesario un escape de cotización más complejo. El primero de los enlaces de ruta de Windows a continuación contiene un ejemplo de escape triple de cada cita. Es aburrido pero a veces necesario. p.ej

cmd = meld \"$LOCAL\" \"$REMOTE\"

Rutas de Windows

Los usuarios de Windows probablemente necesitarán una configuración adicional agregada a Meld cmd líneas. Es posible que necesiten utilizar la ruta completa para meldc, que está diseñado para ser llamado en Windows desde la línea de comando, o pueden necesitar o querer usar un contenedor. Deberían leer el Desbordamiento de pila páginas enlazadas a continuación que tratan sobre la configuración del Meld correcto cmd línea para Windows. Como soy un usuario de Linux, no puedo probar los distintos sistemas de Windows. cmd líneas y no tengo más información sobre el tema que no sea recomendar el uso de mis ejemplos con la adición de una ruta completa a Meld o meldco agregando la carpeta del programa Meld a su path.

  • Git Diff y Meld en Windows
  • Cómo configurar Meld como git mergetool
  • Git mergetool con Meld en Windows

Ignorar los espacios en blanco finales con Meld

Meld tiene una serie de preferencias que se pueden configurar en la GUI.

En las preferencias Text Filters tab hay varios filtros útiles para ignorar cosas como comentarios al realizar una diferencia. Aunque hay filtros para ignorar All whitespace y Leading whitespace, no hay ignorar Trailing whitespace filter (esto se ha sugerido como una adición en la lista de correo de Meld, pero no está disponible en mi versión).

Ignorar los espacios en blanco finales suele ser muy útil, especialmente cuando se colabora, y se puede agregar manualmente fácilmente con una simple expresión regular en las preferencias de Meld Text Filters pestaña.

# Use either of these regexes depending on how comprehensive you want it to be.
[ t]*$
[ trfv]*$

Espero que esto ayude a todos.

Si bien la otra respuesta es correcta, esta es la forma más rápida de seguir adelante y configurar Meld como su herramienta de diferencia visual. Simplemente copie / pegue esto:

git config --global diff.tool meld
git config --global difftool.prompt false

Ahora corre git difftool en un directorio y Meld se lanzará para cada archivo diferente.

Nota al margen: Meld es sorprendentemente lento para comparar archivos CSV, y ninguna herramienta de diferencias de Linux que he encontrado es más rápida que esta herramienta de Windows llamada Compare It! (última actualización en 2010).

Para ventanas. Ejecute estos comandos en Git Bash:

git config --global diff.tool meld
git config --global difftool.meld.path "C:Program Files (x86)MeldMeld.exe"
git config --global difftool.prompt false

git config --global merge.tool meld
git config --global mergetool.meld.path "C:Program Files (x86)MeldMeld.exe"
git config --global mergetool.prompt false

(Actualice la ruta del archivo para Meld.exe si el suyo es diferente).

Para Linux. Ejecute estos comandos en Git Bash:

git config --global diff.tool meld
git config --global difftool.meld.path "/usr/bin/meld"
git config --global difftool.prompt false

git config --global merge.tool meld
git config --global mergetool.meld.path "/usr/bin/meld"
git config --global mergetool.prompt false

Puedes verificar la ruta de Meld usando este comando:

which meld

Aquí puedes ver las reseñas y valoraciones de los lectores

Si guardas algún reparo o forma de progresar nuestro post eres capaz de ejecutar una interpretación y con mucho placer lo observaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *