diff3 не может различить неконфликтующие изменения в последовательных строках

Пытаясь применить diff3 для объединения изменений в некоторых файлах, я заметил, что он не может автоматически объединять различия, возникающие в последовательных строках.

Чтобы проиллюстрировать это, предположим следующие три файла old, new1, new2:

старый:

строка 1
строка 2

new1:

строка 1 изменена
строка 2

new2:

строка 1
строка 2 изменена

Ясно, что разные строки были изменены в new1 и new2, поэтому из этого следует, что изменения не являются конфликтующими. Теперь я хочу объединить изменения как из new1, так и из new2 относительно старого. Я ожидаю получить объединенный вывод с этим контентом:

строка 1 изменена
строка 2 изменена

Тем не менее, запуск diff3 производит это:

$ diff3 -m new1 old new2
<<<<<<< new1
line 1 changed
line 2
||||||| old
line 1
line 2
=======
line 1
line 2 changed
>>>>>>> new2

Так что diff3 помечает изменения как конфликтующие. Очевидно, у него есть проблемы с распознаванием изменений, которые происходят в контексте других изменений. Чтобы проверить это предположение, я изменил мои примеры файлов, чтобы они содержали по три строки в каждой, и внес изменения в непоследовательные строки:

старый:

строка 1
строка 2
строка 3

new1:

строка 1 изменена
строка 2
строка 3

new2:

строка 1
строка 2
строка 3 изменена

Запуск diff3:

$ diff3 -m new1 old new2
line 1 changed
line 2
line 3 changed

Ожидаемый объединенный результат произведен. Видимо, diff3 использует 2 строки контекста на изменение.

В отличие от diff, у diff3 нет опции командной строки для изменения количества строк контекста, поэтому у diff3, по-видимому, есть ограничение на невозможность обнаружить неконфликтующие изменения в последовательных строках текста. Это правильный вывод, и что я могу с этим сделать, если я хочу объединить изменения, как в первом примере выше? Поскольку мне приходится вносить изменения в несколько десятков файлов, возможно, более одного раза, я не хочу делать эти изменения вручную.

Для полноты: я использую diff3 (GNU diffutils) 3.6 в системе Ubuntu.

0 ответов

Другие вопросы по тегам