2009-03-11 10 views
19

estoy usando msys Git de control de código fuente en una máquina Windows y estoy tratando de encontrar la manera de conseguir mi herramienta de combinación, WinMerge, para trabajar con Git.Msys Git Combinar las opciones de comando de la herramienta Edición

He seguido the instructions on this blog lo mejor que he podido, ya que es lo más parecido que he encontrado a lo que trato de hacer. Básicamente lo que hice fue:

modificar mi archivo .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 es casi funcionando. Cuando trato de ejecutar la herramienta de fusión de Git, WinMerge me da un error diciendo que no puede encontrar las rutas de los archivos, que tiene mucho sentido ya que los caminos que está buscando son:

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

Parece al igual que Git está pasando opciones a la herramienta de combinación en lugar de los nombres de archivos remotos locales & que esperaría que pasaran si todo funcionaba correctamente.

He buscado en línea la documentación de combinación de Git, pero parece que no puedo encontrar nada relacionado con lo que estoy tratando de hacer. Mi conjetura es que la solución será uno de los siguientes:

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

Respuesta

7

De WinMerge Command line manual:

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 la última WinMerge)

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

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

Extracto adaptado a merge.tool:

Caso práctico para configurar mergetool con su aduana 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 una parte de directorios 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, ...), cree otro script de shell y la directiva de configuración mergetool.myMergeTool.cmd adecuada.
Luego puede cambiar fácilmente las herramientas con la configuración merge.tool.

+0

esto da como resultado un mensaje de "ruta correcta no es válida" –

+0

@Tobias: corregido con un ejemplo concreto (respuesta actualizada). – VonC

+0

+1. (Si pudiera, pero al menos podría deshacer mi voto ... parece ser un [error] (http://meta.stackexchange.com/questions/23147/change-a-vote-from-downvote-to- upvote-via-editing)) de hecho, si agrega winmerge a su ruta (o establece 'mergetool.winmerge.path' supongo) no se necesita script –

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

Si nos fijamos en el interior C:\Program Files\Git\share\git-gui\lib\mergetool.tcl tiene sintaxis de las herramientas de mezcla comunes.

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

11

Si nos fijamos en el archivo que está en conflicto, se dará cuenta de los estándares Theirs >>>>>>> y <<<<<< Mine marcadores. WinMerge entiende esto como conflictos de fusión, por lo que no necesita que 'Theirs' y 'Mine' se especifiquen explícitamente; solo necesita que le digan 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 estamos uniendo también sea este archivo; también sabemos que git mergetool pone a disposición la variable $MERGED 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/conflicto de combinación; no se necesitan scripts o modificadores de línea de comandos. Consulte el 3er formulario de línea de comandos en los documentos (vinculado por el OP, arriba) y la explicación del argumento conflictfile.

+0

esto da como resultado un mensaje de "ruta correcta no es válida" –

+1

¿No hay un camino correcto? De los documentos de WinMerge 'conflictfile Especifica un archivo de conflicto, normalmente generado por un sistema de control de versiones. El archivo de conflicto se abre en la ventana Comparación de archivos, donde puede fusionar y resolver conflictos, como se describe en Resolución de archivos de conflicto. Tenga en cuenta que no se pueden usar otras rutas con un archivo de conflicto. (Disculpe la falta de citas) Quizás no esté utilizando la última versión, solo necesita especificar un archivo –

+0

Esta es la única solución que funcionó para mí. –

Cuestiones relacionadas