Введение

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

История и реализация

первоначально появилась в Unix версии 7 в 1979 году. Очень похожая версия была найдена в Berkeley Software Distribution (BSD) и унаследована OpenBSD и, вероятно, Solaris. На большинстве современных Unix-подобных систем, включая производные от BSD, такие как FreeBSD и NetBSD, diff3 представляет собой версию GNU из пакета diffutils (ранее GNU Tools). Эта версия способна самостоятельно объединять файлы, не требуя внутренних вызовов для сравнения, но может использовать и другие совместимые инструменты. Команда доступна как отдельный пакет для Microsoft Windows в составе коллекции UnxUtils, включающей в себя нативные Win32 порты распространенных Unix-подобных утилит GNU. "Diff3" также стало общеупотребительным названием для алгоритма трехстороннего слияния, особенно для алгоритма, основанного на согласовании двух различных наборов изменений, полученных из исходного файла.

Слияние от общего предка

Когда два человека внесли изменения в копии одного и того же файла, diff3 может создать объединенный результат, содержащий оба набора изменений вместе с предупреждениями о конфликтах. diff3 может объединять три или более наборов изменений в файл, объединяя по два набора за один раз. diff3 может включать изменения из двух измененных версий в общую предыдущую версию. Это позволяет пользователям объединять наборы изменений, представленные двумя новыми файлами. Это можно сделать, используя команду, например: diff3 mine older yours. Это аналогично вычитанию файла older из файла yours и добавлению результата к файлу mine, или, иными словами, объединению в mine изменений, которые преобразуют older в yours. Такое объединение корректно, пока mine и older совпадают в окрестностях каждого изменения. Это не выполняется, когда все три входных файла различаются или когда отличается только older – в этом случае возникает конфликт. Когда все три входных файла различаются, конфликт представляет собой перекрытие. diff3 располагает несколькими способами обработки перекрытий и конфликтов. Он может пропускать перекрытия или конфликты, выбирать только перекрытия или помечать конфликты специальными строками <<<<<<< и >>>>>>>. diff3 может выводить результаты объединения в виде скрипта ed, который можно применить к первому файлу для получения объединенного результата. Однако, непосредственная генерация объединенного результата позволяет избежать некоторых проблем, связанных с ed.