¿Cómo puedo hacer WinMerge my git mergetool?

Intento integrar WinMerge con Git como he visto antes en Windows 7 Ultimate.

He seguido los siguientes pasos, pero sigue apareciendo un error cuando hago un git mergetool que por defecto es vimdiff.

Creó un file llamado winmerge.sh en el directory raíz de git: C / Program Files (x86) / Git / with: WinMergeU es la location correcta.

#!/bin/sh echo Launching WinMergeU.exe: $1 $2 "C:/Program Files (x86)/WinMerge/WinMergeU.exe" git /e /u /dl "Base" /dr "Mine" "$1" "$2" 

y usó los siguientes commands.

 git config --global diff.tool winmerge git config --global difftool.winmerge.cmd "winmerge.sh \"$LOCAL\" \"$REMOTE\"" git config --global difftool.prompt false 

El error aparece como:

 git config option merge.tool set to unknown tool: winmerge 

He estado luchando por encontrar una solución en los últimos meses. Si alguien puede ayudarme a solucionar esto, ¡sería muy apreciado! Si tienes más preguntas sobre mi computadora, házmelo saber.

Usted está hablando de la herramienta de combinación , sin embargo, usted (y algunas otras personas con respuestas) lo están configurando como una herramienta de diferenciación .

Para configurar una herramienta de fusión, necesitaría usar las configuraciones merge.tool y mergetool lugar de diff.tool y difftool , así:

 git config --global merge.tool winmerge git config --replace --global mergetool.winmerge.cmd "\"C:\Program Files (x86)\WinMerge\WinMergeU.exe\" -e -u -dl \"Base\" -dr \"Mine\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"" git config --global mergetool.prompt false 

Y luego puedes usar

 git mergetool 

que te abrirá los dos files para editar.

Felicitaciones por @dvdvck al mencionar en los comentarios que en los parameters de la línea de command puede especificar un tercer file para el file de resultados para winmerge (parámetro outputpath).

Para completar, mencionaré que también hay esta esencia apuntada a la configuration completa de winmerge para ambos como herramienta diff y merge.

¡Git 2.5+ (Q2 2015) includeá a Winmerge como una git mergetool !

Si Winmerge está en su %PATH% , git config merge.tool winmerge lo único que necesita hacer es una git config merge.tool winmerge !
(Funciona también para la herramienta diff: git config diff.tool winmerge )

Ver commit 3e4f237 por David Aguilar ( davvid ) , 20 de mayo de 2015.
(Fusionada por Junio ​​C Hamano – gitster – in commit 324a9f4 , 01 jun 2015)
Ayudado por: Philip Oakley ( PhilipOakley ) , Johannes Schindelin ( dscho ) , Sebastian Schuberth ( sschuberth ) , SZEDER Gábor ( szeder )

Toda la configuration ahora está hecha para ti directamente en Git, con mergetools/winmerge :

  • command diff: "$merge_tool_path" -u -e "$LOCAL" "$REMOTE"
  • command de fusión: "$merge_tool_path" -u -e -dl Local -dr Remote "$LOCAL" "$REMOTE" "$MERGED"

mergetools : agrega winmerge como una herramienta integrada

Agregue un scriptlet winmerge con los commands descritos en este hilo , para que los usuarios puedan usar winmerge sin necesidad de realizar ninguna configuration adicional.

Si decide utilizar SourceTree (o cualquier buscador de Google con SourceTree), puede usar WinMerge para Merge Tool configurando Merge Tool en Custom, apuntando a Diff Command a WinMergeU.exe, típicamente:

 C:\Program Files (x86)\WinMerge\WinMergeU.exe 

En Argumentos usa:

 -e -u -dl "Mine" -wr -dr "Theirs" $LOCAL $REMOTE $MERGED 

Eso hará que el lado izquierdo (labeldo como "Mío") sea editable y será el file de salida cuando guarde en WinMerge. El lado derecho (labeldo "Theirs") será de solo lectura (ese es el argumento -wr), esto es necesario porque WinMerge genera todos los files guardados en el file $ MERGED, por lo que si ambos lados se editaran, se mostraría el lado izquierdo, luego sobrescribir eso con el lado derecho; lo mejor es evitar ese tipo de confusión.

Si deja activada la opción de file de respaldo, WinMerge generará un file .bak. El contenido de este file será el file original del lado izquierdo o el penúltimo file de salida si lo guardó varias veces. Puede desactivarlo o agregar * .bak a su file .gitignore.

Git mismo creará un file de conflicto * .orig DESPUÉS de que se resuelva el conflicto, en caso de que lo estropees. De nuevo, puede agregar * .orig a su file .gitignore o desactivar esta function. Desafortunadamente, SourceTree no tiene una opción de GUI para esto, así que encienda su git bash o, si eligió la opción PATH correcta durante la installation, el símbolo del sistema de Windows y haga lo siguiente:

 git config --global mergetool.keepBackup false 

Eso evitará que Git cree los files * .orig. También puede editar directamente el file de configuration localizando el file .gitconfig en la raíz de su directory de usuario. Si sabe cómo usar VIM, puede editar todo con este command:

 git config --global --edit 

Aquí está el mío (en %userprofile%\.gitconfig , o ~/.gitconfig en * nix), sin envoltorio (Win 7 Home Pro):

 [diff] tool = winmerge [difftool "winmerge"] cmd = c:/path/to/winmergeu.exe -e -u -x -wl -wr -dl "base" -dr "mine" \"$LOCAL\" \"$REMOTE\" 

Esto es más fácil de hacer y es lo que funcionó para mí:

 git config --global diff.tool winmerge git config --replace --global difftool.winmerge.cmd "\"C:\path to winmerge\WinMergeU.exe\" -e -u -dl \"Base\" -dr \"Mine\" $LOCAL $REMOTE" git config --global difftool.prompt false 

Su ruta es incorrecta, debe ser "/c/Program Files (x86)/WinMerge/WinMergeU.exe" .

Se está ejecutando en un entorno de script de shell, no en un símbolo del sistema nativo de Windows.

Después de molestarme con esto por más de una hora, instalé tortoisegit y hasta ahora me está dando exactamente lo que quiero.

Los ajustes de Winmerge para Tortoise git se describen en http://thoai-nguyen.blogspot.com.au/2012/03/setup-tortoise-git-and-winmerge.html

Ejemplo:

 git config --global --add diff.tool winmerge git config --replace --global difftool.winmerge.cmd "\"C:\Program Files (x86)\WinMerge\WinMergeU.exe\" -e -u -dl \"Base\" -dr \"Mine\" $LOCAL $REMOTE" git config --global difftool.prompt false