web-dev-qa-db-fra.com

Comment utiliser Winmerge avec les extensions Git?

J'utilise Git Extensions et il pré-installe et configure KDiff comme outil de diff pour résoudre les conflits de fusion. Cependant, j'aime beaucoup Winmerge et j'aimerais remplacer KDiff par Winmerge.

Dans les paramètres des extensions Git, il existe des paramètres pour changer le Mergetool, mais je n'arrive pas à comprendre quelle syntaxe je dois utiliser et pourquoi. Il semble y avoir 4 variables: $ BASE, $ LOCAL, $ REMOTE, $ MERGED. Il semble que je devrais les transmettre à WinMergeU.exe, mais avec quels paramètres de ligne de commande?

J'ai essayé de chercher cela plusieurs fois, mais il n'y a pas de réponse qui semble réellement fonctionner.

50
sebastiaan

Présentation
Les instructions suivantes expliquent comment configurer GIT Version Control afin que vous puissiez utiliser un meilleur ensemble d'outils que l'installation par défaut. La configuration nécessite que GIT Extensions soit déjà installé et implique la configuration de Winmerge dans les extensions GIT.

Installation
Parcourez toutes les invites et installez-les dans le répertoire par défaut de Winmerge.

Configurer Winmerge dans GIT Version Control
Ouvrez un nouveau document dans un éditeur de texte. Copiez/collez ce qui suit et enregistrez le document en tant que "wMerge.sh" dans votre répertoire "C:\Program Files (x86)\Git\bin \".

echo Launching WinMerge: $1 $2 "C:/Program Files (x86)/WinMerge/WinMergeU.exe" -e -u -dl "Original" -dr "Modified" "$1" "$2"

Allez dans votre répertoire "Utilisateurs-> nom d'utilisateur" et localisez le fichier .gitconfig. Ouvrez-le dans votre éditeur préféré, copiez/collez le code suivant et enregistrez:

[user]
    name = enter your name
    email = [email protected]
[core]
    autocrlf = false
[merge]
    tool = winmerge
[mergetool "winmerge"]
    cmd = wMerge.sh \"$MERGED\" \"$REMOTE\"
    path = c:/Program Files (x86)/winmerge/winmergeu.exe
[mergetool]
    keepBackup = false
    trustExitCode = false
[diff]
    guitool = winmerge
[difftool "winmerge"]
    path = c:/Program Files (x86)/winmerge/winmergeu.exe
    cmd = \"c:/Program Files (x86)/winmerge/winmergeu.exe\" \"$LOCAL\" \"$REMOTE\"

Exécutez "GitExtensions", allez dans "tools-> Settings-> Git Extensions-> Git Config". Si vous avez fait votre installation correctement et référencé les outils dans leur répertoire, votre page de paramètres globaux devrait ressembler à ci-dessous (REMARQUE: veuillez saisir votre nom sur le nom et l'e-mail):

mergetool: winmerge
chemin vers mergetool: c:/Program Files (x86)/winmerge/winmergeu.exe
commande mergetool: wMerge.sh "$MERGED" "$REMOTE"
difftool: winmerge
chemin vers difftool: c:/Program Files (x86)/winmerge/winmergeu.exe
commande difftool: "c:/Program Files (x86)/winmerge/winmergeu.exe" "$LOCAL" "$REMOTE"

fins de ligne: extraction en l'état, validation en l'état

Accédez à l'onglet de la liste de contrôle pour vérifier que GIT est tout "vert" et satisfait de votre configuration.

48
foxtrotZulu

Sur Git Extensions v2.47.3, il est vraiment facile de configurer cela:

Paramètres -> Paramètres globaux -> dans la liste déroulante pour 'Mergetool' écrivez manuellement: WinMerge et observez le miracle.

Idem pour le menu déroulant "Difftool".

enter image description here

||   ||   ||
\/   \/   \/

enter image description here

Il est juste stupide que l'option 'WinMerge' ne soit pas pré-remplie dans la liste déroulante. Tant pis.

22

Sur Windows 7, c'est ce qui a finalement fonctionné pour moi. Noter la "'c:/path/here'" cite le chemin de mes fichiers programme.

[merge]
    tool = winmerge
[mergetool "winmerge"]
    cmd = "'C:/Program Files (x86)/WinMerge/WinMergeU.exe'" -e "$MERGED"
[diff]
    tool = winmerge
[difftool "winmerge"]
    cmd = "'C:/Program Files (x86)/WinMerge/WinMergeU.exe'" -e "$LOCAL" "$REMOTE" -dl "Local" -dr
10
TimDog

La réponse de @ sebastiaan n'a pas fonctionné pour moi (peut-être qu'elle est dépassée?)

Ce sont des "paramètres globaux" qui fonctionnent pour moi en utilisant GitExtensions 2.28:

Mergetool: winmerge
Chemin vers mergetool: D:/path/to/WinMerge/WinMergeU.exe
Commande Mergetool: "D:/path/to/WinMerge/WinMergeU.exe" -e "$MERGED"
Cela fait que WinMerge utilise le "fichier de conflit" généré par git.
-e permet d'appuyer sur ESC pour fermer winmerge.

Difftool: winmerge
Chemin vers difftool: D:/path/to/WinMerge/WinMergeU.exe
Commande Difftool: "D:/path/to/WinMerge/WinMergeU.exe" -e "$LOCAL" "$REMOTE" -dl "Local" -dr "Remote"
-dl et -dr définissez les descriptions des volets gauche et droit.

8
foraidt

Ajoutez ou modifiez les éléments suivants dans le fichier de configuration:

[merge]
    tool = winmerge
[mergetool "winmerge"]
    cmd = $PROGRAMFILES/WinMerge/WinMergeU.exe "$PWD/$MERGED"

Cette solution se distingue de deux manières:

  1. Appelle simplement WinMergeU.exe *conflictfile*, tandis que les appels bilatéraux souffrent du fait que la fenêtre de gauche présente <<<<<<<, =======, et >>>>>>> marqueurs que contient $ MERGED.
  2. Appliquer mergetool per repo - je modifie le fichier $ GIT_DIR/config. Le même résultat pourrait être obtenu en appelant git config sans l'argument --system ou --global. Ceci est à noter qu'il existe quelques étendues de configuration à choisir .

La variable $ PROGRAMFILES est gérée par git bash et (contrairement à la variable similaire sur les fenêtres natives cmd), elle accède à "Program Files (x86)".

3
Pawel Piskorski