Mise à jour de juin 2015, 6 ans plus tard :
Comme détaillé dans " git mergetool winmerge ", un simple git config diff.tool winmerge
sera suffisant.
Git 2.5+ (Q2, 2015) est maintenant conscient de Winmerge comme outil de diff ou de fusion !
Réponse originale (2009-2012)
(msysgit, 1.6.5, session DOS)
La première partie (utilisation de winmerge) est décrite dans " Comment visualiser la sortie de 'git diff' avec le programme visual diff ? "
C:\myGitRepo>git config --replace --global diff.tool winmerge
C:\myGitRepo>git config --replace --global difftool.winmerge.cmd "winmerge.sh \"$LOCAL\" \"$REMOTE\""
C:\myGitRepo>git config --replace --global difftool.prompt false
Avec winmerge.sh
stocké dans un répertoire faisant partie de votre PATH
:
#!/bin/sh
echo Launching WinMergeU.exe: $1 $2
"$PROGRAMFILES/WinMerge/WinMergeU.exe" -e -u -dl "Local" -dr "Remote" "$1" "$2"
(voir Options de la ligne de commande de WinMerge )
git difftool
va maintenant lancer WinMerge.
Si vous voulez git diff
pour lancer WinMerge, il suffit de le définir :
set GIT_EXTERNAL_DIFF=winmerge.sh
Mais la véritable valeur ajoutée vient de la possibilité d'utiliser ce même outil de comparaison pour présenter toutes les différences en un seul lot au lieu de les présenter séquentiellement, ce qui vous oblige à fermer les fenêtres de l'outil de comparaison un fichier à la fois.
Mise à jour juin 2012 (2 ans et demi plus tard) :
La comparaison de répertoires au lieu de fichiers par fichiers sera bientôt disponible :
Voir [ANNONCE] Git 1.7.11.rc1 :
" git difftool
" a appris le " --dir-diff
option " pour lancer des outils de diff externes qui peuvent comparer deux hiérarchies de répertoires à la fois après avoir rempli deux répertoires temporaires, au lieu d'exécuter une instance de l'outil externe une fois par paire de fichiers .
Voir " Patch difftool
Enseignements difftool
pour gérer les différences de répertoire ", et la réponse " Comparaison des répertoires des branches Git "pour plus de détails.
Difftool original par répertoires script (décembre 2009)
Comme Seba Illingworth mentions dans sa réponse un script git-diffall.sh (également placé dans le chemin) peut faire exactement cela :
#!/bin/sh
git diff --name-only "$@" | while read filename; do
git difftool "$@" --no-prompt "$filename" &
done
Mais cela ne fonctionne qu'en ouvrant n Windows pour n (si vous essayez d'utiliser les fichiers -s
de WinMerge, cela ne fonctionnera pas car les fichiers temporaires seront supprimés trop tôt par l'outil de comparaison).
C'est pourquoi j'aime l'approche de GitDiff.bat - la diffusion en puissance avec GI qui vous permet de passer en revue la liste des fichiers présentant une différence, avant d'en sélectionner un pour examiner ses différences internes.
Je l'ai modifié pour qu'il n'utilise que des commandes DOS.
@echo off
setlocal
if "%1" == "-?" (
echo GitDiff - enables diffing of file lists, instead of having to serially
echo diff files without being able to go back to a previous file.
echo Command-line options are passed through to git diff.
echo If GIT_FOLDER_DIFF is set, it is used to diff the file lists. Default is windff.
goto END
)
if "%GIT_DIFF_COPY_FILES%"=="" (
rd /s /q %TEMP%\GitDiff
mkdir %TEMP%\GitDiff
mkdir %TEMP%\GitDiff\old
mkdir %TEMP%\GitDiff\new
REM This batch file will be called by git diff. This env var indicates whether it is
REM being called directly, or inside git diff
set GIT_DIFF_COPY_FILES=1
set GIT_DIFF_OLD_FILES=%TEMP%\GitDiff\old
set GIT_DIFF_NEW_FILES=%TEMP%\GitDiff\new
set GIT_EXTERNAL_DIFF=%~dp0\GitDiff.bat
echo Please wait and press q when you see "(END)" printed in reverse color...
call git diff %*
if defined GIT_FOLDER_DIFF (
REM This command using GIT_FOLDER_DIFF just does not work for some reason.
%GIT_FOLDER_DIFF% %TEMP%\GitDiff\old %TEMP%\GitDiff\new
goto END
)
if exist "%ProgramFiles%\Beyond Compare 2\BC2.exe" (
set GIT_FOLDER_DIFF="%ProgramFiles%\Beyond Compare 2\BC2.exe"
"%ProgramFiles%\Beyond Compare 2\BC2.exe" %TEMP%\GitDiff\old %TEMP%\GitDiff\new
goto END
)
"%ProgramFiles(x86)%\WinMerge\WinMergeU.exe" -r -e -dl "Local" -dr "Remote" %TEMP%\GitDiff\old %TEMP%\GitDiff\new
goto END
)
REM diff is called by git with 7 parameters:
REM path old-file old-hex old-mode new-file new-hex new-mode
copy %TEMP%\%~nx2 %GIT_DIFF_OLD_FILES%\%1
copy %5 %GIT_DIFF_NEW_FILES%
:END
Il n'est pas assez robuste pour gérer des fichiers ayant le même nom dans différents répertoires, mais il vous donne une idée générale de ce qui est possible :
Ici, un seul WinMerge s'ouvrira, avec la liste des fichiers ayant des différences internes. Vous pouvez cliquer sur ceux que vous voulez examiner, puis un simple ESC fermera le tout WinMerge-diff
session.
0 votes
Voir stackoverflow.com/questions/636253/
0 votes
Article connexe - Comment faire configurer un outil de diff dans Git en général .