¿Cómo configuro y uso Meld como mi git difftool?
git difftool muestra el diff usando un programa GUI diff (es decir, Meld) en lugar de mostrar la salida diff en su terminal.
Aunque puede configurar el programa GUI en la línea de comandos -t <tool> / --tool=<tool>, tiene más sentido configurarlo en su .gitconfigarchivo. [Nota: Consulte las secciones sobre comillas de escape y rutas de Windows en la parte inferior.]
# Add the following to your .gitconfig file.
[diff]
tool = meld
[difftool]
prompt = false
[difftool "meld"]
cmd = meld "$LOCAL" "$REMOTE"
[Nota: esta configuración no alterará el comportamiento del git diffcual continuará funcionando como de costumbre].
Usas git difftoolexactamente de la misma manera que usas git diff. p.ej
git difftool <COMMIT_HASH> file_name
git difftool <BRANCH_NAME> file_name
git difftool <COMMIT_HASH_1> <COMMIT_HASH_2> file_name
Si está configurado correctamente, se abrirá una ventana Meld que muestra el diff usando una interfaz GUI.
El orden de los paneles de la ventana Meld GUI puede controlarse por el orden de $LOCALy $REMOTEen 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 así:
cmd = meld "$REMOTE" "$LOCAL"
Finalmente, la prompt = falselínea simplemente evita que git le pregunte si desea iniciar Meld o no, por defecto, git emitirá un mensaje.
¿Cómo configuro y uso Meld como mi git mergetool?
git mergetool le permite usar un programa de fusión de GUI (es decir, Meld) para resolver los conflictos de fusión que se han producido durante una fusión.
Al igual que difftool, puede configurar el programa GUI en la línea de comandos utilizando -t <tool> / --tool=<tool>, pero, como antes, tiene más sentido configurarlo en su .gitconfigarchivo. [Nota: Consulte las secciones sobre comillas de escape y rutas de Windows en la parte inferior.]
# 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 lo utiliza git mergetoolpara realizar una fusión real. Antes de usar git mergetool, realiza 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_namecontendrá el archivo parcialmente fusionado con la información de conflicto de fusión (ese es el archivo con todas las entradas >>>>>>>y <<<<<<<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 que mostrará 3 archivos. Cada archivo estará contenido en un panel separado de su interfaz GUI.
En la .gitconfigentrada de ejemplo anterior, se sugieren 2 líneas como [mergetool "meld"] cmdlínea. De hecho, hay todo tipo de formas para que los usuarios avanzados configuren la cmdlínea, pero eso está más allá del alcance de esta respuesta.
Esta respuesta tiene 2 cmdlíneas alternativas que, entre ellas, atenderán a la mayoría de los usuarios, y serán un buen punto de partida para 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 en la rama que se está fusionando (p. ej. nombre_de_ rama).
$MERGED es el archivo parcialmente fusionado con la información de conflicto de fusión en él.
$BASEes el ancestro de confirmación compartida de , $LOCALy $REMOTEesto quiere decir que el archivo estaba como estaba cuando $REMOTEse creó originalmente la rama que contenía .
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 $BASEentre $LOCALy $REMOTE.
De cualquier manera, Meld mostrará 3 paneles con $LOCAL y $REMOTEen los paneles izquierdo y derecho y, o bien $MERGEDo $BASEen el panel central.
En AMBOS casos, el panel central es el archivo que debe editar para resolver los conflictos de fusión. La diferencia es en qué posición de edición inicial preferiría; $MERGEDpara el archivo que contiene el archivo parcialmente fusionado con la información de conflicto de fusión o $BASEpara el antecesor de confirmación compartido de $LOCALy $REMOTE. [Dado que ambas cmdlíneas pueden ser útiles, las mantengo en mi.gitconfig archivo. La mayoría de las veces uso la $MERGEDlínea y la $BASElínea está comentada, pero el comentario se puede cambiar si quiero usar la $BASElínea en su lugar.]
Nota sobre el archivo de salida: no se preocupe si --output "$MERGED"se usa cmdindependientemente de si se usó $MERGEDo no $BASEanteriormente en la cmdlínea. los--output 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 conflictos en ese archivo, independientemente de si lo usa $MERGEDo $BASEcomo su punto de edición inicial.
Después de editar el panel central para resolver los conflictos de fusión, solo guarde el archivo y cierre la ventana Meld. Git realizará 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á hecho una copia de seguridad del archivo parcialmente fusionado con la información de conflicto de fusión adjuntando .origal nombre de archivo original. por ej file_name.orig. Después de comprobar que está satisfecho con la combinación y ejecutar cualquier prueba que desee hacer, el.orig archivo se puede eliminar.
En este punto, ahora puede hacer un compromiso para confirmar los cambios.
Si, mientras está editando 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 unchangedy 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 aviso de git. [Por supuesto, puede eliminar el archivo y reemplazarlo con el .origarchivo de respaldo que git creó para usted].
Si tiene más de 1 archivo con conflictos de fusión, git abrirá una nueva ventana Meld para cada uno, uno tras otro hasta que estén listos. No todos se abrirán 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 git mergetoolantes de usarlo en un proyecto en vivo . Asegúrese de utilizar un nombre de archivo que contenga un espacio en su prueba, en caso de que su sistema operativo requiera que usted escape de las comillas en la cmdlínea, consulte a continuación.
Personajes de comillas escapadas
Es posible que algunos sistemas operativos necesiten tener las comillas cmdescapadas. 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 las cmdlí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 presupuesto de escape 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 las cmdlíneas Meld . Es posible que necesiten usar la ruta completa a meldc, que está diseñada para ser llamada en Windows desde la línea de comandos, o pueden necesitar o querer usar un contenedor. Deben leer las páginas de StackOverflow vinculadas a continuación que tratan sobre la configuración de la cmdlínea Meld correcta para Windows. Como soy un usuario de Linux, no puedo probar las diversas cmdlíneas de Windows y no tengo más información sobre el tema que no sea recomendar que use mis ejemplos con la adición de una ruta completa a Meld o meldc, o agregue la carpeta del programa Meld a su path.
Ignorando el espacio en blanco al final con Meld
Meld tiene una serie de preferencias que se pueden configurar en la GUI.
En la Text Filterspestaña de preferencias hay varios filtros útiles para ignorar cosas como los comentarios al realizar una diferencia. Aunque hay filtros para ignorar All whitespacey Leading whitespace, no hay ignorarTrailing whitespace filtro para (esto se ha sugerido como una adición en la lista de correo Meld pero no está disponible en mi versión).
Ignorar el espacio en blanco al final suele ser muy útil, especialmente cuando se colabora, y se puede agregar manualmente fácilmente con una expresión regular simple en la Text Filterspestaña de preferencias Meld .
# Use either of these regexes depending on how comprehensive you want it to be.
[ \t]*$
[ \t\r\f\v]*$
Espero que esto ayude a todos.