20 votos

Problema con las opciones de comando de la herramienta Git Merge de Msys

Estoy usando msys Git para el control de fuentes en una máquina Windows y estoy tratando de averiguar cómo obtener mi herramienta de fusión, WinMerge para trabajar con Git.

He seguido las instrucciones de este blog lo mejor posible ya que es lo más parecido que he encontrado a lo que intento hacer. Básicamente lo que hice fue:

Modificar mi .gitconfig para incluir lo siguiente:

\[merge\]
    tool = winmerge

\[mergetool "winmerge"\]
    cmd = \\"C:\\\\Program Files (x86)\\\\WinMerge\\\\WinMergeU.exe\\" "$PWD/$LOCAL" "$PWD/$REMOTE" "$PWD/$MERGED"  
        trustExitCode = false  
    keepBackup = false

Esto casi funciona. Cuando intento ejecutar la herramienta de fusión desde Git, WinMerge me da un error diciendo que no puede encontrar las rutas de los archivos, lo cual tiene todo el sentido ya que las rutas que está buscando son:

C:\\MY\\WORKING\\DIRECTORY\\-e
C:\\MY\\WORKING\\DIRECTORY\\-ub

Parece que Git está pasando opciones a la herramienta de fusión en lugar de los nombres de los archivos locales y remotos que yo esperaría que se pasaran si todo estuviera funcionando correctamente.

He buscado en Internet la documentación sobre la fusión de Git, pero no encuentro nada relacionado con lo que intento hacer. Mi opinión es que la solución será una de las siguientes:

  1. Cambiar el $LOCAL & $REMOTE variables a los valores correctos, suponiendo que $LOCAL & $REMOTE son incorrectos.
  2. Escriba un .bat script para llamar a WinMergeU, y manejar los argumentos que Git envía a la herramienta de fusión dentro de la lógica de mi .bat script.

12voto

Darren Puntos 1141

Si miras el archivo que está en conflicto, te darás cuenta de que el estándar Theirs >>>>>>> y <<<<<< Mine marcadores. WinMerge entiende estos como conflictos de fusión, por lo que no necesita que se especifique explícitamente 'Sus' y 'Míos'; sólo necesita que se le diga qué archivo es el que tiene los marcadores de conflicto.

  1. Sabemos que el archivo en el directorio de trabajo contiene los marcadores.
  2. Tiene sentido que el archivo al que nos fusionamos sea también este archivo - también sabemos que git mergetool hace que el $MERGED variable disponible que nombra ese archivo.

    [mergetool "winmerge"]
        cmd = 'C:/Program Files/WinMerge/WinMergeU.exe' \"$MERGED\"

Esto es todo lo que necesita para conectar git con WinMerge para la resolución de fusiones/conflictos; no se necesitan scripts o interruptores de línea de comandos. Consulte la tercera forma de línea de comandos en la documentación (enlazada por el OP, arriba) y la explicación de conflictfile argumento.

7voto

VonC Puntos 414372

Desde Manual de línea de comandos de WinMerge :

cmd = \"C:\\Program Files (x86)\\WinMerge\\WinMergeU.exe /ub /e \"
cmd = \"C:\\Program Files (x86)\\WinMerge\\WinMergeU.exe /u /e \"

(/u es el nuevo /ub con el último WinMerge)

podría funcionar mejor como un comando en su sección de mergetool.

Sin embargo, es posible que tenga que envolver esta llamada en un script, como se describe en este Respuesta SO .

Extracto adaptado a merge.tool :

Caso práctico de configuración mergetool con su costumbre diff herramienta:

C:\myGitRepo>git config --global merge.tool winmerge
C:\myGitRepo>git config --global mergetool.winmerge.cmd "winmerge.sh \"$LOCAL\" \"$REMOTE\""
C:\myGitRepo>git config --global mergetool.prompt false

Con winmerge.sh almacenado en un directorio que forma parte de su PATH :

#!/bin/sh
echo Launching WinMergeU.exe: $1 $2
"C:/Program Files/WinMerge/WinMergeU.exe" -e -ub "$1" "$2"

Si tiene otra herramienta ( kdiff3 , P4Diff ...), crear otro Shell ShellscriptShell, y el correspondiente mergetool.myMergeTool.cmd directiva de configuración.
A continuación, puede cambiar fácilmente de herramienta con el botón merge.tool configurar.

5voto

[mergetool "winmerge"]
    cmd = winmergeu -e -ub -wl -dl "Remote" -dr "Local" "$PWD/$REMOTE" "$PWD/$LOCAL" "$PWD/$MERGED"
    keepBackup = false

Si miras dentro C:\Program Files\Git\share\git-gui\lib\mergetool.tcl tiene sintaxis para las herramientas de fusión más comunes.

Todavía estoy tratando de averiguar cómo invocar mergetool directamente desde Git GUI...

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X