GNU Diff3 (трехстороннее объединение) дает неожиданный результат
Вопрос
Предположим, что файлы мои и ваши потомки старого.
File_mine =
ABC Def Ghi.
File_old =
ABC JKL GHI.
File_yours =
ABC Def Ghi.
Команда diff3 -m MIND OLD YOURS
дает:
ABC <<<<<<< Старый JKL ======= DEF >>>>>>> ваш GHI
Diff3 не может решить эту мою, а ваша сделала идентичные изменения.
Почему? И есть ли способ решить эту проблему?
Щекотать твой мозг с этим:
diff OLD MIND
а также diff OLD YOURS
иметь одинаковые блюда на их выходе.
2C2 <JKL ---> Def
Должны ли эти гулять не «отменить» во время трехстороннего слива?
Решение
Что вы ожидали иметь?
Как то Статья, описывающая утилиту Diff3 говорит:
... это (слияние) не может быть правдой Когда все три входных файла отличаются или Когда только старше отличается; мы называем это конфликт. Отказ Когда все три входных файла отличаются, мы называем конфликт перекрывать
Поэтому описанный вами случай относится к конфликту. 'Почему так?' Вы можете спросить. Из-за дифференциала алгоритма. Описание Вы можете найти на той же странице:
Вы можете думать об этом (слияние) как вычитание старшая от ваша и добавление результата к мой, или как слияние в мои изменения изменения, которые станут старше в ваш
Он не может неправильно разрешить различия, потому что он не имеет правильного контекста внесения изменений.
Я бы согласился с вами, если вы собираетесь сказать, что он должен работать с использованием другого подхода. Но что есть, то есть. diff3 не идеален, я бы порекомендовал использовать другие инструменты, если вы хотите сделать это правильно, как описано в статья