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
Обновление:
Проблема появляется даже при ручном слиянии. Действия:
И вот оно! Родитель 1 (центр столбец) содержит 'dest', 'source' как часть файла. Но в этом файле таких строк не было.
Похоже, что HG дает файлу kdiff некоторую различную информацию, которую Kdiff не может/не должен понимать.
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