Git sous Windows : Comment configurer un outil de fusion ?

Git sous Windows : Comment configurer un outil de fusion ?

Pour compléter la réponse de Charles Bailey, voici ma configuration Git qui utilise p4merge (outil de fusion 3 voies multiplateforme gratuit) ; testée sur une installation msys Git (Windows) :

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

ou, depuis un shell cmd.exe Windows, 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 Git globale, c’est-à-dire valide pour tous les projets Git et pas seulement le projet courant

  • la valeur de configuration de l’outil personnalisé se trouve dans “mergetool.[tool].cmd”, pas “merge.[tool].cmd” (quelle bêtise, j’ai passé une heure à résoudre pourquoi Git se plaignait d’un outil inexistant)

  • ajout de guillemets doubles pour tous les noms de fichiers afin que les fichiers avec des espaces puissent encore être trouvés par l’outil de fusion (j’ai testé cela dans msys Git depuis PowerShell)

  • notez que par défaut Perforce ajoutera son répertoire d’installation au PATH, donc pas besoin de spécifier le chemin complet vers p4merge dans la commande

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

MODIFICATION (fév. 2014)

Comme l’a souligné @Gregory Pakosz, la dernière version de msys git supporte maintenant “nativement” p4merge (testé sur 1.8.5.2.msysgit.0).

Vous pouvez afficher la liste des outils supportés en exécutant :

git mergetool --tool-help

Vous devriez voir p4merge dans la liste available ou valid. Sinon, veuillez mettre à jour votre Git.

Si p4merge était listé comme available, il est dans votre PATH et vous n’avez qu’à définir merge.tool :

git config --global merge.tool p4merge

S’il était listé comme valid, vous devez définir mergetool.p4merge.path en plus de merge.tool :

`

(Réponse tronquée)