Kdiff и hg: неразрешенные конфликты после автоматического слияния


Мы используем Mercurial (+Tortoise Hg)в качестве VCS и Kdiff в качестве инструмента diff и merge.

Некоторые файлы объединяются автоматически, и иногда этот результат автоматического слияния является wierd:

    public static Method()
<<<<<<< local
    {
        DoSmth();
    }
=======
    {
        DoSmth2();
    }
>>>>>>> other

Похоже, что kdiff ничего не сделал с неразрешенным конфликтом в файле, но отметил его как разрешенный. Может быть, kdiff иногда не понимает формата файлов diff? Какая-то ошибка в интеграции hg и kdiff?

Также кажется, что эта проблема появилась недавно, может быть проблема с новой версией hg / черепаха hg / kdiff?

Мы используем:

  • Windows 7 x64
  • TortoiseHg и Mercurial 3.6.1
  • Kdiff 0.9.98

Из меркуриала.ini:

[ui]
merge = kdiff3

[tortoisehg]
editor=VisualStudio
vdiff=meld

[merge-tools]
meld.executable = C:Program Files (x86)Meldmeld.exe
meld.priority = 1
meld.premerge = False
meld.args = $local $base $other

[diff]
git = True

Обновление:

Проблема появляется даже при ручном слиянии. Действия:

  • начало перебазирования
  • Черепаха Hg говорит: "есть конфликты" Слияние не удалось
  • нажав "Tool resolve", откроется Kdiff Kdiff nuans

И вот оно! Родитель 1 (центр столбец) содержит 'dest', 'source' как часть файла. Но в этом файле таких строк не было.

Похоже, что HG дает файлу kdiff некоторую различную информацию, которую Kdiff не может/не должен понимать.

3 2

3 ответа:

Это ошибка в Mercurial 3.6.0 и 3.6.1. Это было исправлено в 3.6.2.

  • решение: восстановить .ориг только после слияния полностью завершен (Issue 4952)

Цитирую первоначальный доклад:

Джонатан Литтл 2015-11-13 17: 41: 55 UTC

Я столкнулся со следующей проблемой, введенной в Mercurial 3.6. Я использую версию 3.6+20151109 с TortoiseHG 3.6, но проблема, похоже, находится в ядре hg (см. мой отчет об ошибке THG: https://bitbucket.org/tortoisehg/thg/issues/4354 ) поведение, которое я вижу:

  • установить инструмент слияния ([ui] merge in .hgrc / mercurial.ini) к внутреннему: merge
  • Создайте репозиторий с двумя отдельными ветвями, с изменением на каждой ветви таким образом, чтобы изменения конфликтовали друг с другом.
  • объедините две головки ветвей. внутренний: слияние оставит конфликтующий файл с маркерами конфликтов.
  • запустите "HG resolve -- tool=kdiff3".

Ожидается результат: KDiff3 корректно отображает содержимое общего предка и две конфликтующие ревизии (см.формат JPG).

Фактический результат: KDiff3 корректно отображает ревизию общего предка и" другую " конфликтующую ревизию, но локальная конфликтующая ревизия содержит маркеры слияния из internal: merge(см.формат JPG).

Проблема возникает с конфигурацией THG, встроенной в KDiff3, и со встроенной конфигурацией KDiff3 из mercurial / default.д/mergetools.дистанционное управление. Это не происходит с конфигурация barebones, состоящая только из kdiff3.исполняемый файл, но начинает возникать при добавлении аргументов и использовании $local. Таким образом, обработка $local изменилась, чтобы просто использовать текущее локальное содержимое файла, а не содержимое родительского элемента слияния из локальной ветви.

Это поведение началось с версии 3.6.0.

Результат слияния, который вы показываете, очень похож на результат другого инструмента слияния, а именно внутреннего: merge

Поскольку вы можете настроить различные инструменты слияния для разных типов файлов или файлов - или явно дать инструмент слияния для определенного слияния - вы уверены, что не использовали другой инструмент слияния, чем kdiff? Возможно, новая версия tortoiseHG (re-)определила некоторые настройки инструмента слияния.

Проверьте конфигурацию инструмента слияния в файле конфигурации. Видеть https://www.mercurial-scm.org/wiki/KDiff3 для того, как он должен выглядеть для kdiff3. Цитата для удобства:

[extensions]
hgext.extdiff =

[extdiff]
cmd.kdiff3 =

[merge-tools]
kdiff3.args = $base $local $other -o $output

Мы используем Mercurial (+Tortoise Hg)в качестве VCS и Kdiff в качестве инструмента diff и merge.

Покажи это! я хочу увидеть скриншот THG Global Setting - TortoiseHG вкладка (или специфичные для репозитория настройки THG), или соответствующая часть ini-файла (лучше, короче). Вот часть моего меркуриала.ini с p4merge в качестве глобального инструмента diff-merge

[ui]
merge = p4merge
...
[tortoisehg]
vdiff = p4merge

Некоторые файлы объединяются автоматически, и иногда этот результат автоматического слияния является wierd

<<<<<<< и >>>>>>> строки являются знаки для другого слияния: внутреннего: слияние 3 с маркерами конфликтов

Это обычно не рекомендуется, так как Mercurial не получает прямой обратной связи при успешном завершении слияний, и это не очень удобно по сравнению с современными инструментами.

Вы должны правильно настроить выбранный инструмент: KDiff3-это GUI-инструмент, который будет появляться на экране каждый раз , когда слияние не может быть выполнено автоматически (есть конфликты) и это ваша обязанность-выполнить ручную работу по редактированию результата в окне KDiff