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

11813
quanticle

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

hg diff 

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

19

3 ответа на вопрос

23
cschol

Из 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 открывает левую сторону только для чтения
Я не использую TortoiseHG и не использую Mercurial под Cygwin. Я использую установщик Mercurial по умолчанию из http://mercurial.berkwood.com. Ваше решение сработало в том смысле, что я могу набрать 'hg winmerge'чтобы увидеть разницу между ним и предыдущей версией, но' hg diff 'все еще поднимает тот же (довольно уродливый) инструмент сравнения. Тем не менее, это лучше, чем ничего. quanticle 15 лет назад 0
Я думаю, что этот ответ предполагает, что вы отредактируете Mercurial.ini в каталоге TortoiseHg (например, C: \ Program Files \ TortoiseHg). Если вы отредактируете файл в каталоге Mercurial (например, C: \ Program Files \ Mercurial), то это не сработает (по крайней мере, для меня это не сработало). Ashley Davis 14 лет назад 0
также c: \ Program Files (x86) \ WinMerge \ WinMergeU.exe Avram 11 лет назад 0
Убедитесь, что вы не ставите кавычки вокруг пути к WinMerge в файле конфигурации, иначе он не будет работать. Drealmer 6 лет назад 0
7
renfeng

Вот как это работает для меня - чисто ртутная командная строка, кроме 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 ...»

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

Ну, ответы, данные ранее, не дают мне желаемого эффекта. Они не позволяют вносить изменения в редакцию и редактировать на месте (я имею в виду ту же функциональность, которая доступна для 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