359 votes

Git sous Windows : Comment configurer un mergetool ?

J'ai essayé msysGit et Git sur Cygwin. Les deux fonctionnent très bien en soi et les deux exécutent gitk et git-gui parfaitement.

Maintenant, comment diable puis-je configurer un outil de fusion ? (Vimdiff fonctionne sur Cygwin, mais je voudrais de préférence quelque chose d'un peu plus convivial pour certains de nos collègues qui aiment Windows).

0 votes

4 votes

Git Extensions a une interface utilisateur git qui possède un outil de fusion assez bon et convivial pour les utilisateurs de Windows.

0 votes

On dirait que vous avez besoin de TortoiseGit ?

320voto

Milan Gardian Points 6596

Pour faire suite à la réponse de Charles Bailey, voici ma configuration git qui utilise les éléments suivants p4merge (outil de fusion à trois gratuit et multiplateforme) ; testé sur l'installation de msys Git (Windows) :

git config --global merge.tool p4merge
git config --global mergetool.p4merge.cmd 'p4merge.exe \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"'

ou, à partir d'un shell Windows cmd.exe, la deuxième ligne devient :

git config --global mergetool.p4merge.cmd "p4merge.exe \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\""

Les changements (par rapport à Charles Bailey) :

  • ajouté à la configuration globale de git, c'est-à-dire valable pour tous les projets git et pas seulement pour le projet en cours
  • la valeur de la configuration de l'outil personnalisé se trouve dans "mergetool.[tool].cmd", et non dans "merge.[tool].cmd" (je suis bête, j'ai passé une heure à chercher pourquoi git se plaignait d'un outil inexistant).
  • ajout de guillemets pour tous les noms de fichiers afin que les fichiers avec des espaces puissent toujours être trouvés par l'outil de fusion (j'ai testé cela dans msys Git à partir de Powershell)
  • Notez que par défaut Perforce ajoutera son répertoire d'installation à PATH, il n'est donc pas nécessaire de spécifier le chemin complet de p4merge dans la commande.

Télécharger : http://www.perforce.com/product/components/perforce-visual-merge-and-diff-tools


EDIT (février 2014)

Comme l'a souligné @Gregory Pakosz , le dernier msys git supporte désormais "nativement" les p4merge (testé sur 1.8.5.2.msysgit.0 ).

Vous pouvez afficher la liste des outils pris en charge en exécutant :

git mergetool --tool-help

Vous devriez voir p4merge soit dans disponible sur o valide la liste. Si ce n'est pas le cas, veuillez mettre à jour votre git.

Si p4merge a été répertorié comme disponible sur c'est dans votre PATH et vous n'avez qu'à définir outil.de.fusion :

git config --global merge.tool p4merge

Si elle a été répertoriée comme valide vous devez définir mergetool.p4merge.path en plus de outil.de.fusion :

git config --global mergetool.p4merge.path c:/Users/my-login/AppData/Local/Perforce/p4merge.exe
  • Le chemin ci-dessus est un exemple de chemin d'accès lorsque p4merge a été installé pour l'utilisateur actuel, et non pour l'ensemble du système (ne nécessite pas de droits d'administrateur ou d'élévation de l'UAC).
  • Bien que ~ devrait s'étendre jusqu'au répertoire personnel de l'utilisateur actuel (donc en théorie le chemin devrait être ~/AppData/Local/Perforce/p4merge.exe ), cela n'a pas fonctionné pour moi
  • Il aurait été encore mieux de tirer parti d'une variable d'environnement (par ex. $LOCALAPPDATA/Perforce/p4merge.exe ), git ne semble pas développer les variables d'environnement pour les chemins (si vous savez comment faire pour que cela fonctionne, merci de me le faire savoir ou de mettre à jour cette réponse).

0 votes

Hmm - en essayant ceci - la première configuration fonctionne bien, la suivante affiche juste le texte d'aide pour la configuration git. Je ne sais pas trop pourquoi.

1 votes

Je l'ai - ces guillemets simples me semblent suspects. Il suffit de les doubler pour qu'elles fonctionnent.

13 votes

Paramètre mergetool.p4merge.cmd ne fonctionnera plus depuis que Git a commencé à essayer de supporter p4merge, voir libexec/git-core/git-mergetool--lib . au lieu de cela, il utilise directement mergetool.p4merge.path

90voto

Zyan Points 812

La configuration de mergetool.p4merge.cmd ne fonctionnera plus depuis que Git a commencé à essayer de supporter p4merge, voir libexec/git-core/git-mergetool--lib.donc nous devons juste spécifier le chemin de mergetool pour git,par exemple le p4merge :

git config --global mergetool.p4merge.path 'C:\Program Files\Perforce\p4merge.exe'
git config --global merge.tool p4merge

Alors, ça marchera.

1 votes

Fonctionne également avec Beyond Compare 3. Utilisez simplement le chemin d'accès à BComp.exe à la place. Merci !

4 votes

Je sais que c'est un vieux sujet, mais je n'arrive pas à faire fonctionner ce chemin. Je suis un peu confus sur la façon dont le chemin est censé être échappé étant donné l'interaction de cmd/msys... EDIT Le passage aux guillemets doubles a réglé le problème !

1 votes

Merci Gitninja ! Notez que vous pouvez taper ceci dans Git Bash, mais si vous utilisez la commande Prompt vous devez changer le guillemet simple par le guillemet double

61voto

Davïd Points 577

J'utilise Portable Git sur WinXP (qui fonctionne à merveille !), et j'avais besoin de résoudre un conflit survenu lors de la création de branches. De tous les gui's que j'ai vérifié, KDiff3 s'est avéré être le plus transparent à utiliser.

Mais j'ai trouvé les instructions dont j'avais besoin pour le faire fonctionner dans Windows dans cet article de blog qui diffèrent légèrement des autres approches présentées ici. Il s'agissait essentiellement d'ajouter les lignes suivantes à mon fichier .gitconfig fichier :

[merge]
    tool = kdiff3

[mergetool "kdiff3"]
    path = C:/YourPathToBinaryHere/KDiff3/kdiff3.exe
    keepBackup = false
    trustExitCode = false

Ça marche bien maintenant !

13 votes

Sur mon PC Win7, j'ai dû utiliser path = C:\\Program Files (x86)\\KDiff3\\kdiff3.exe (remarquez les doubles barres obliques inversées)

0 votes

J'ai obtenu une erreur comme celle-ci : "L'outil de diff meld n'est pas disponible comme ' D:\software\melddiff\Meld.exe '"

0 votes

Savez-vous s'il y a une différence dans l'ordre où chaque section est ajoutée ? Je veux dire, si [merge] serait après [mergetool] ?

20voto

splicer Points 2807

Sous Cygwin, le sólo La chose qui a fonctionné pour moi est la suivante :

git config --global merge.tool myp4merge
git config --global mergetool.myp4merge.cmd 'p4merge.exe "$(cygpath -wla $BASE)" "$(cygpath -wla $LOCAL)" "$(cygpath -wla $REMOTE)" "$(cygpath -wla $MERGED)"'
git config --global diff.tool myp4diff
git config --global difftool.myp4diff.cmd 'p4merge.exe "$(cygpath -wla $LOCAL)" "$(cygpath -wla $REMOTE)"'

J'aime aussi désactiver le message d'invite pour difftool :

git config --global difftool.prompt false

17voto

Charles Bailey Points 244082

git mergetool est entièrement configurable, de sorte que vous pouvez pratiquement choisir votre outil préféré.

La documentation complète est ici : http://www.kernel.org/pub/software/scm/git/docs/git-mergetool.html

En bref, vous pouvez définir un mergetool par défaut en définissant la variable de configuration utilisateur merge.tool .

Si l'outil de fusion est l'un de ceux qui sont supportés nativement par le logiciel, il vous suffit de définir mergetool.<tool>.path au chemin complet de l'outil (remplacer <tool> par ce que vous avez configuré merge.tool pour être.

Sinon, vous pouvez définir mergetool.<tool>.cmd à un bout de shell qui sera évalué au moment de l'exécution avec les variables du shell $BASE, $LOCAL, $REMOTE, $MERGED dans les fichiers appropriés. Vous devez faire attention à l'échappement, que vous modifiez directement un fichier de configuration ou que vous définissiez la variable avec la commande git config commandement.

Quelque chose comme ceci devrait donner une idée de ce que vous pouvez faire ('mymerge' est un outil fictif).

git config merge.tool mymerge
git config merge.mymerge.cmd 'mymerge.exe --base "$BASE" "$LOCAL" "$REMOTE" -o "$MERGED"'

Une fois que vous avez configuré votre outil de fusion préféré, il suffit d'exécuter git mergetool chaque fois que vous avez des conflits à résoudre.

L'outil p4merge de Perforce est un très bon outil de fusion autonome.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X