tipos tag repositorio qué existen etiquetas crear git version-control merge batch-file

tag - Opciones de comandos de la herramienta Msys Git Merge



qué tipos de etiquetas existen en git (3)

Estoy usando msys Git para el control de origen en una máquina con Windows y estoy tratando de averiguar cómo hacer que mi herramienta de combinación, WinMerge , funcione con Git.

He seguido las instrucciones de este blog de la mejor manera posible, ya que es lo más cercano que he encontrado a lo que estoy tratando de hacer. Básicamente lo que hice fue:

Modifique 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 está casi funcionando. Cuando intento ejecutar la herramienta de combinación de Git, WinMerge me da un error que dice que no puede encontrar las rutas de los archivos, lo que tiene mucho 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 combinación en lugar de los nombres de archivos locales y remotos que esperaría que se aprobaran si todo funcionara correctamente.

He buscado en línea la documentación de fusió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á una de las siguientes:

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

Del 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 mergetool.

Sin embargo, es posible que tenga que ajustar esta llamada en un script, como se describe en esta respuesta SO .

Extracto adaptado a merge.tool :

Caso práctico para configurar mergetool con su herramienta personalizada de diff :

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 del directorio 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 apropiada.
Entonces puedes cambiar herramientas fácilmente con la configuración merge.tool .


Si observa el archivo que está en conflicto, observará los marcadores de <<<<<< Mine estándar Theirs >>>>>>> y <<<<<< Mine . WinMerge entiende esto como conflictos de combinación, por lo que no necesita que se especifique explícitamente "Sus" y "Míos"; solo se necesita saber 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 en el que nos estamos fusionando también sea este archivo. También sabemos que git mergetool hace que la variable $MERGED esté disponible para ese nombre.

    [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 combinación / conflicto; no se necesitan scripts ni modificadores de línea de comandos. Consulte la tercera forma de línea de comando en los documentos (vinculados por el OP, arriba) y la explicación del argumento de archivo de conflictfile .


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

Si observa C:/Program Files/Git/share/git-gui/lib/mergetool.tcl , tiene sintaxis para las herramientas de combinación comunes.

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