Comment puis-je faire WinMerge mon git mergetool?

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

j'ai suivi les étapes suivantes, mais une erreur continue à apparaître quand je fais une fusion git qui est par défaut à vimdiff.

créé 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:  
"C:/Program Files (x86)/WinMerge/WinMergeU.exe" 
git /e /u /dl "Base" /dr "Mine" "" ""

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 s'affiche de la manière suivante:

git config option merge.tool set to unknown tool: winmerge
41
demandé sur ROMANIA_engineer 2012-05-23 09:24:42

9 réponses

vous parlez deoutil de fusion, pourtant vous (et quelques autres personnes avec des réponses) configurez comme un outil de comparaison.

Pour configurer un outil de fusion, vous devez utiliser merge.tool et mergetool configurations 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 pour @dvdvck en mentionnant dans les commentaires que paramètres de la ligne de commande vous pouvez spécifier un troisième fichier pour le fichier de résultat pour winmerge (outputpath paramètre).

Pour être complet, je vais mentionner qu'il existe aussi ce gist vise à la configuration complète de winmerge pour les deux comme outil de diff et de fusion.

50
répondu eis 2017-01-26 12:05:58

Git 2.5+ (T2 2015) inclura Winmerge comme un connu git mergetool!

si Winmerge est dans votre %PATH%, un git config merge.tool winmerge est tout ce que vous devez faire!

(Il travaille pour un outil de comparaison: git config diff.tool winmerge)

Voir valider 3e4f237 par David Aguilar (davvid), 20 mai 2015.

(fusionné par Junio C. Hamano -- gitster--valider 324a9f4, 01 Jun 2015)

Aidé par: 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 winmerge comme outil de construction

Ajouter un scriptlet winmerge avec les commandes décrites dans ce fil, donc que les utilisateurs peuvent utiliser winmerge sans avoir besoin d'effectuer toute configuration supplémentaire.

23
répondu VonC 2015-06-07 22:46:21

si vous décidez d'utiliser SourceTree (ou pour tout chercheur Google avec SourceTree), vous pouvez utiliser WinMerge pour L'outil de fusion en paramétrant L'outil de fusion sur mesure, en pointant la commande Diff vers WinMergeU.exe, typiquement:

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

dans les Arguments utiliser:

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

ce qui fera que le côté gauche (étiqueté "Mine") sera modifiable et ce sera le fichier de sortie lorsque vous sauvegarderez dans WinMerge. Le côté droit (étiqueté "leur") sera lu seulement (c'est l'argument-wr), c'est nécessaire parce que WinMerge affiche tous les fichiers sauvegardés dans le fichier $fusionné, donc si les deux côtés étaient modifiés, il afficherait le côté gauche puis l'écrirait avec le côté droit; le mieux pour éviter ce genre de confusion.

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

Git lui-même va créer un *.fichier de conflit d'origine après que le conflit est résolu, juste au cas où vous l'avez bâclé. Encore une fois, vous pouvez ajouter *.orig pour votre .gitignore ou désactiver cette fonctionnalité. Malheureusement, SourceTree n'a pas d'option GUI pour cela, alors lancez votre gitbash ou, si vous avez choisi l'option right PATH pendant l'installation, L'invite de commande Windows et faites ceci:

git config --global mergetool.keepBackup false

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

git config --global --edit
22
répondu CapinWinky 2014-07-11 16:51:10

Voici la mienne (en %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
répondu ellotheth 2014-06-24 15:30:02

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
répondu gman 2015-08-12 13:10:31

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

vous exécutez dans un environnement de script shell, pas une invite de commande de windows native.

4
répondu Thach Mai 2012-05-23 05:41:20

Pour WinMerge pour comparer et fusionner outil pour Visual Studio 2017 Git Plugin:

à Partir de l'invite de commande windows: type >> git config --global --edit qui ouvrira la .getconfig fichier à éditer.

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
2
répondu Zin Min 2018-07-25 06:54:37

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
répondu zumalifeguard 2014-10-13 19:07:03