Existe-t-il un moyen d'utiliser Winmerge à l'intérieur de git pour faire des Diffs ?
Il serait utile d'avoir quelqu'un qui explique les significations de $LOCAL
et $REMOTE
.
Existe-t-il un moyen d'utiliser Winmerge à l'intérieur de git pour faire des Diffs ?
Puisque le fil de discussion devient confus et bifurqué, voici des instructions consolidées pour la méthode WinMerge de Directory Listing "--dir-diff" pour msysgit Git Windows.
Étape 1 - Créez un fichier nommé winmerge.sh à un emplacement accessible par votre chemin d'accès (tel que /home/bin/winmerge.sh) avec le contenu suivant.
#!/bin/sh
echo Launching WinMergeU.exe: $1 $2
"$PROGRAMFILES/WinMerge/WinMergeU.exe" -r -ub -dl "Remote" -dr "Local" "$1" "$2"
Étape 2 - Tapez les commandes suivantes dans Git Bash pour indiquer à git d'utiliser winmerge.sh comme difftool (ces options sont stockées dans /home/.gitconfig) :
git config --replace --global diff.tool winmerge
git config --replace --global difftool.winmerge.cmd "winmerge.sh \"$LOCAL\" \"$REMOTE\""
git config --replace --global difftool.prompt false
Étape 3 - Maintenant vous pouvez tester en tapant la commande suivante dans Git Bash pour lancer votre diff WinMerge :
git difftool --dir-diff
Étape 4 - Pour un accès plus rapide, créez un alias pour cette commande en ajoutant cette ligne au fichier .bashrc dans votre dossier personnel (ou créez le fichier .bashrc avec cette ligne si le fichier n'existe pas déjà) :
alias diffdir='git difftool --dir-diff'
Étape 5 - Maintenant vous pouvez rapidement voir une différence dans WinMerge juste en tapant la commande suivante dans Git Bash
diffdir
Je ne comprenais pas pourquoi la solution était présentée sous la forme d'un fichier batch DOS, car mon installation de Git était fournie avec un shell bash. Je n'ai pas non plus réussi à faire fonctionner un contexte DOS à partir de bash, j'ai donc tenté d'adapter ce qui avait été partagé précédemment dans un contexte bash.
Depuis git diff
semble exécuter la commande spécifiée une fois pour chaque fichier, j'ai divisé ma solution en deux scripts bash :
Tout d'abord, configurez gitprepdiff.sh
pour être le difftool comme mentionné précédemment
#!/bin/sh
#echo ...gitprepdiff.sh
cp -v $1 "$TMP/GitDiff/old/$2"
cp -v $2 "$TMP/GitDiff/new"
J'ai également noté que les résultats de la git configure
peuvent être trouvées et modifiées directement dans C:\Users\<username>\.gitconfigure
gitdiff.sh
est ensuite exécuté en ligne de commande, là où vous appelleriez normalement git diff
#!/bin/sh
#echo Running gitdiff.sh...
DIFFTEMP=$TMP/GitDiff
echo Deleting and re-creating $DIFFTEMP...
rm -rf $DIFFTEMP;
mkdir $DIFFTEMP;
echo Creating $DIFFTEMP/old...
mkdir $DIFFTEMP/old;
echo Creating $DIFFTEMP/new...
mkdir $DIFFTEMP/new;
git diff --name-only "$@" | while read filename; do
git difftool "$@" --no-prompt "$filename";
done
"$PROGRAMFILES\WinMerge\WinMergeU.exe" -r -e -dl "Repository" -dr "Working" $LOCALAPPDATA\\Temp\\1\\GitDiff\\old $LOCALAPPDATA\\Temp\\1\\GitDiff\\new
Il faut aussi noter que, sur mon installation, /tmp
(dans bash) mappé à %LOCALAPPDATA%\Temp\1\
(dans Windows), c'est pourquoi j'utilise ce dernier dans mon appel à WinMerge.
J'ai changé gitprepdiff.sh
pour #!/bin/sh #echo ...gitprepdiff.sh mkdir -vp "$TMP/GitDiff/old/$(dirname $2)" cp -v $1 "$TMP/GitDiff/old/$2" cp -v --parents $2 "$TMP/GitDiff/new"
Merci !
Il semble ridicule de devoir franchir autant d'obstacles pour que cela fonctionne, mais c'est le cas. Vous obtenez toutes les différences de fichiers en une seule fois comme il se doit. J'ai dû faire les changements mentionnés par @dobau aussi pour gérer correctement les fichiers dans les sous-répertoires.
git config --global diff.tool winmerge
git config --global difftool.winmerge.cmd "\"$PROGRAMFILES\\WinMerge\\WinMergeU.exe\" -u -dl \"Local\" -dr \"Remote\" \"\$LOCAL\" \"\$REMOTE\""
git config --global difftool.prompt false
Conformément à la Manuel de ligne de commande de WinMerge : "Les paramètres sont préfixés par un caractère barre oblique ( / ) ou tiret ( - )".
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.
0 votes
Voir stackoverflow.com/questions/636253/
0 votes
Article connexe - Comment faire configurer un outil de diff dans Git en général .