Как использовать WinMerge в качестве инструмента Diff для Mercurial

19

Я использую распределенную систему управления версиями Mercurial, и мне интересно, как я могу настроить ее для использования WinMerge вместо ее собственного внутреннего инструмента сравнения. У меня уже есть WinMerge в качестве инструмента слияния, но я хочу, чтобы Mercurial использовал WinMerge при вводе:

hg diff

Есть ли способ сделать это, или я застрял с внутренним инструментом сравнения Mercurial?

quanticle
источник

Ответы:

24

Из FAQ ЧерепахиHg :

Добавьте эти строки в ваш личный файл Mercurial.ini

[расширения]
extdiff =

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

Теперь запустите инструмент глобальных настроек. На вкладке TortoiseHg вы должны увидеть winmerge, доступный в раскрывающемся списке для Visual Diff Command. Выберите winmerge, примените, затем закройте.

Этот же подход можно использовать для добавления практически любого визуального инструмента сравнения, но имейте в виду, что ваш инструмент сравнения должен иметь возможность поддерживать различия каталога, если он будет использоваться TortoiseHg, если вы не используете версию 0.8 или более позднюю.

Джоэл также предоставил решение здесь в случае , если вы запускаете Mercurial под Cygwin.

Объяснение аргументов командной строки WinMerge здесь . Резюме:

  • /e позволяет закрыть WinMerge одним нажатием клавиши Esc
  • /x закрывает WinMerge (после отображения информационного диалога) при запуске сравнения идентичных файлов
  • /u запрещает WinMerge добавлять любой путь (левый или правый) в список «Последние использованные» (MRU)
  • /wl открывает левую сторону только для чтения
cschol
источник
Я не использую TortoiseHG и не использую Mercurial под Cygwin. Я использую установщик Mercurial из командной строки по умолчанию из mercurial.berkwood.com . Ваше решение сработало, в том смысле, что я могу набрать 'hg winmerge <file>', чтобы увидеть разницу между ним и предыдущей версией, но 'hg diff <file>' по-прежнему вызывает тот же (довольно уродливый) diff инструмент. Тем не менее, это лучше, чем ничего.
кв.
Я думаю, что этот ответ предполагает, что вы отредактируете Mercurial.ini в каталоге TortoiseHg (например, C: \ Program Files \ TortoiseHg). Если вы отредактируете файл в каталоге Mercurial (например, C: \ Program Files \ Mercurial), это не сработает (по крайней мере, для меня это не сработало).
Эшли Дэвис
также c: \ Program Files (x86) \ WinMerge \ WinMergeU.exe
Аврам
Убедитесь, что вы не ставите кавычки вокруг пути к WinMerge в файле конфигурации, иначе он не будет работать.
Drealmer
7

Вот как это работает для меня - чисто ртутная командная строка, кроме tortoisehg

Сначала отредактируйте файл (под 64-битными окнами)

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

Затем вы можете использовать «hg winmerge ...» вместо «hg diff ...»

renfeng
источник
Я считаю полезным запускать winmerge в фоновом режиме, чтобы я мог просматривать изменения во время установки сообщения фиксации, а также отображать статистику изменений файлов в командной строке. Для этого поместите пакетный файл в каталог mercurial, который содержит start / b hg winmerge <NEWLINE> hg diff --stat
danio
3

Ну, ответы, данные ранее, не дают мне желаемого эффекта. Они не позволяют вносить изменения и редактировать на месте (я имею в виду ту же функциональность, которая доступна для TortoiseSVN из коробки). Для этого я добавил в mercurial.ini этот раздел:

[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

Это взято из http://blog.stevehorn.cc/blog/easy-mercurial-visual-diff-between-two.html

alehro
источник