Comment utiliser WinMerge comme outil Diff pour Mercurial

19

J'utilise le système de contrôle de version distribué Mercurial et je me demande comment le configurer pour utiliser WinMerge au lieu de son propre outil de diff interne. J'ai déjà WinMerge comme outil de fusion, mais je veux que Mercurial utilise WinMerge lorsque je tape:

hg diff

Y a-t-il un moyen de le faire, ou suis-je coincé avec l'outil de diff interne de Mercurial?

quantique
la source

Réponses:

24

De la FAQ TortoiseHg :

Ajoutez ces lignes à votre fichier Mercurial.ini personnel

[extensions]
extdiff =

[extdiff]
cmd.winmerge = C: \ Program Files \ WinMerge \ WinMergeU.exe
opts.winmerge = / e / x / u / wl

Exécutez maintenant l'outil Paramètres globaux. Sous l'onglet TortoiseHg, vous devriez voir winmerge disponible dans la liste déroulante pour Visual Diff Command. Sélectionnez winmerge, appliquez, puis fermez.

Cette même approche peut être utilisée pour ajouter presque n'importe quel outil de diff visuel, mais sachez que votre outil de diff doit pouvoir prendre en charge les différences de répertoire s'il doit être utilisé par TortoiseHg, sauf si vous utilisez la version 0.8 ou ultérieure.

Joel a également fourni une solution ici au cas où vous exécuteriez Mercurial sous Cygwin.

Explication des arguments de la ligne de commande WinMerge ici . Sommaire:

  • /e vous permet de fermer WinMerge d'une simple pression sur la touche Échap
  • /x ferme WinMerge (après avoir affiché une boîte de dialogue d'informations) lorsque vous démarrez une comparaison de fichiers identiques
  • /u empêche WinMerge d'ajouter l'un ou l'autre chemin (gauche ou droit) à la liste des derniers fichiers utilisés (MRU)
  • /wl ouvre le côté gauche en lecture seule
cschol
la source
Je n'utilise pas TortoiseHG, et je n'exécute pas Mercurial sous Cygwin. J'utilise le programme d'installation par défaut de la ligne de commande Mercurial de mercurial.berkwood.com . Votre solution a fonctionné, dans le sens où je suis capable de taper 'hg winmerge <fichier>' pour voir le diff entre elle et la version précédente, mais 'hg diff <fichier>' fait toujours apparaître le même (plutôt moche) diff outil. Pourtant, c'est mieux que rien.
quanticle
Je pense que cette réponse suppose que vous éditerez Mercurial.ini dans le répertoire TortoiseHg (par exemple C: \ Program Files \ TortoiseHg). Si vous modifiez celui du répertoire Mercurial (par exemple C: \ Program Files \ Mercurial), cela ne fonctionnera pas (du moins, ce n'est pas le cas pour moi).
Ashley Davis,
également c: \ Program Files (x86) \ WinMerge \ WinMergeU.exe
Avram
Assurez-vous de ne pas mettre de guillemets autour du chemin vers WinMerge dans le fichier de configuration, sinon cela ne fonctionnera pas.
Drealmer
7

Voici comment cela fonctionne pour moi - ligne de commande mercurielle pure autre que tortoisehg

Tout d'abord, modifiez le fichier (sous une fenêtre 64 bits)

C: \ Program Files (x86) \ Mercurial \ Mercurial.ini

[extensions]
; must uncomment this line
extdiff =

[extdiff]
; i'm using winmerge unicode version
cmd.winmerge = C:\Program Files (x86)\WinMerge\WinMergeU.exe
; it explains winmerge command line parameters here: http://winmerge.org/docs/manual/CommandLine.html
opts.winmerge = /r /e /x /u /wl

Ensuite, vous pouvez utiliser "hg winmerge ..." au lieu de "hg diff ..."

renfeng
la source
Je trouve utile d'exécuter winmerge en arrière-plan afin que je puisse regarder les modifications tout en définissant le message de validation et également afficher les statistiques sur les fichiers modifiés sur la ligne de commande. Pour ce faire, placez un fichier batch dans le répertoire mercurial qui contient start / b hg winmerge <NEWLINE> hg diff --stat
danio
3

Eh bien, les réponses données plus tôt ne me donnent pas les effets souhaités. Ils ne permettent pas de faire des révisions différentes et de les modifier sur place (je veux dire la même fonctionnalité qui est disponible pour TortoiseSVN dans la boîte). Pour ce faire, j'ai ajouté en plus à mercurial.ini cette section:

[merge-tools]
winmerge.regkey=Software\Thingamahoochie\WinMerge\
winmerge.regname=Executable
winmerge.priority=-10
winmerge.args=/e /x /wl /ub /dl other /dr local $other $local $output
winmerge.fixeol=True
winmerge.checkchanged=True
winmerge.gui=True
winmerge.diffargs=/r /e /x /ub /wl /dl '$plabel1' /dr '$clabel' $parent $child
winmerge.diff3args=
winmerge.dirdiff=True

Ceci est tiré de http://blog.stevehorn.cc/blog/easy-mercurial-visual-diff-between-two.html

alehro
la source