web-dev-qa-db-fra.com

Comment puis-je faire de WinMerge mon git mergetool?

J'essaie d'intégrer WinMerge à Git comme j'en ai déjà vu d'autres sur Windows 7 Ultimate.

J'ai suivi les étapes suivantes, mais une erreur persiste lorsque je fais un git mergetool dont la valeur par défaut est vimdiff.

Création d'un fichier appelé winmerge.sh dans le répertoire racine de git: C/Program Files (x86)/Git/with: WinMergeU est l'emplacement correct.

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

et utilisé les commandes suivantes.

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

L'erreur apparaît comme:

git config option merge.tool set to unknown tool: winmerge
45
Wei Jin

Vous parlez de l’outil merge, mais vous (et quelques autres personnes avec des réponses) le configurez comme un outil diff.

Pour configurer un outil de fusion, vous devez utiliser les configurations merge.tool et mergetool au lieu de diff.tool et difftool, comme ceci:

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

Et puis vous pouvez utiliser

git mergetool

qui vous ouvrira les deux fichiers à éditer.

Félicitations à @dvdvck en mentionnant dans les commentaires que dans paramètres de ligne de commande vous pouvez spécifier un troisième fichier pour le fichier de résultats pour winmerge (paramètre outputpath).

Pour être complet, je mentionnerai qu’il existe aussi ce Gist qui vise à une configuration complète du winmerge à la fois comme outil de diff et de fusion.

57
eis

Git 2.5+ (T2 2015) inclura Winmerge en tant que git mergetool !

Si Winmerge est dans votre %PATH%, un git config merge.tool winmerge est tout ce que vous devez faire!
(Cela fonctionne aussi pour l'outil diff: git config diff.tool winmerge)

Voir commit 3e4f237 de David Aguilar (davvid) , 20 mai 2015.
(Fusion par Junio ​​C Hamano - gitster - dans commit 324a9f4 , 01 juin 2015)
Aidé de: Philip Oakley (PhilipOakley) , Johannes Schindelin (dscho) , Sebastian Schuberth (sschuberth) , SZEDER Gábor (szeder)

Toute la configuration est maintenant faite pour vous directement dans Git lui-même, avec mergetools/winmerge :

  • commande diff: "$merge_tool_path" -u -e "$LOCAL" "$REMOTE"
  • commande de fusion: "$merge_tool_path" -u -e -dl Local -dr Remote "$LOCAL" "$REMOTE" "$MERGED"

mergetools: ajouter le winmerge en tant qu'outil intégré

Ajoutez un scriptlet winmerge avec les commandes décrites dans this thread , donc que les utilisateurs peuvent utiliser winmerge sans avoir à effectuer aucun configuration supplémentaire.

25
VonC

Si vous décidez d'utiliser SourceTree (ou pour tout chercheur Google avec SourceTree), vous pouvez utiliser WinMerge pour l'outil de fusion en définissant l'outil de fusion sur personnalisé, en faisant pointer Diff Command sur WinMergeU.exe, généralement:

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

Dans Arguments, utilisez:

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

Cela entraînera la modification du côté gauche (intitulé "Mine") et ce sera le fichier de sortie lors de l'enregistrement dans WinMerge. Le côté droit (intitulé "Theirs") sera en lecture seule (c'est l'argument -wr), cela est nécessaire car WinMerge génère tous les fichiers enregistrés dans le fichier $ MERGED. Ainsi, si les deux côtés sont modifiés, le côté gauche sera alors affiché écrasez cela avec le côté droit; mieux vaut éviter ce genre de confusion.

Si vous laissez l'option de fichier de sauvegarde activée, WinMerge générera un fichier .bak. Le contenu de ce fichier sera soit le fichier d'origine de gauche, soit l'avant-dernier fichier de sortie si vous avez enregistré plusieurs fois. Vous pouvez désactiver cette option ou ajouter * .bak à votre fichier .gitignore.

Git lui-même créera un fichier de conflit * .orig APRÈS sa résolution, au cas où vous l'auriez bâclée. Encore une fois, vous pouvez ajouter * .orig à votre fichier .gitignore ou désactiver cette fonctionnalité. Malheureusement, SourceTree n’ayant pas d’option graphique pour cela, lancez votre git bash ou, si vous avez choisi la bonne option PATH lors de l’installation, l’invite de commande Windows et procédez comme suit:

git config --global mergetool.keepBackup false

Cela empêchera Git de créer les fichiers * .orig. Vous pouvez également modifier directement le fichier de configuration en localisant le fichier .gitconfig à la racine de votre répertoire utilisateur. Si vous savez utiliser VIM, vous pouvez éditer le tout avec cette commande:

git config --global --edit
24
CapinWinky

Voici le mien (dans %userprofile%\.gitconfig ou ~/.gitconfig sur * nix), pas de wrapper (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\"
13
ellotheth

C'est plus facile à faire et c'est ce qui a fonctionné pour moi:

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
7
gman

Votre chemin est incorrect, il devrait être "/c/Program Files (x86)/WinMerge/WinMergeU.exe".

Vous exécutez dans un environnement de script shell, pas dans l'invite de commande native Windows.

4
Thach Mai

Pour utiliser WinMerge en tant qu'outil de comparaison et de fusion pour le plug-in Visual Studio 2017 Git:

A partir de la commande windows Invite: tapez >> git config --global --edit Qui ouvrira le fichier .getconfig à modifier.

Veuillez mettre à jour avec la commande ci-dessous:

[mergetool]
   Prompt = false
   keepBackup = false
   keepTemporaries = false
[merge]
   tool = winmerge
   [mergetool "winmerge"]
   name = WinMerge
   trustExitCode = true
   cmd = \"C:\\Program Files (x86)\\WinMerge\\WinMergeU.exe\" -e -u -dl \"Base\" -dr \"Mine\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"
[diff]
   tool = winmerge
   [difftool "winmerge"]
   name = WinMerge
   trustExitCode = true
   cmd = \"C:\\Program Files (x86)\\WinMerge\\WinMergeU.exe\" -u -e $LOCAL $REMOTE
3
Zin Min

Après avoir galéré pendant plus d’une heure, j’ai installé tortoisegit et jusqu’à présent, cela m’a donné exactement ce que je veux.

Les paramètres de Winmerge for Tortoise git sont décrits dans http://thoai-nguyen.blogspot.com.au/2012/03/setup-tortoise-git-and-winmerge.html

1
andersonbd1

Exemple:

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
0
zumalifeguard