Из Википедии, бесплатной энциклопедии
  (Перенаправлено из утилиты Diff )
Перейти к навигации Перейти к поиску

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

Обычно diff используется для отображения изменений между двумя версиями одного и того же файла. Современные реализации также поддерживают двоичные файлы . [1] Вывод называется «diff» или патч , так как вывод может быть применен с патчем программы Unix . Вывод аналогичных утилит сравнения файлов также называется «различием»; подобно использованию слова « grep » для описания процесса поиска, слово diff стало общим термином для вычисления разницы в данных и их результатов. [2] Стандарт POSIX определяет поведение «diff» и «patch».утилиты и их форматы файлов.[3]

История [ править ]

diff был разработан в начале 1970-х годов в операционной системе Unix, которая разрабатывалась Bell Labs в Мюррей-Хилле, штат Нью-Джерси. Финальная версия, [ цитата необходима ], впервые представленная с 5-м изданием Unix в 1974 году, была полностью написана Дугласом Макилроем . [ необходима цитата ] Это исследование было опубликовано в статье 1976 года, написанной в соавторстве с Джеймсом У. Хантом, который разработал начальный прототип diff . [4] [ неудачная проверка ] Алгоритм, описанный в этой статье, стал известен как алгоритм Ханта – Шимански .

Работа Макилрой предшествовала и под влиянием Стива Джонсона «программы сравнения s на GECOS и Майк Леск » s доказательство программы. Proof также возник в Unix и, как и diff , производил построчные изменения и даже использовал угловые скобки («>» и «<») для представления вставок и удалений строк в выводе программы. Однако эвристика, использованная в этих ранних приложениях, была признана ненадежной. Потенциальная полезность инструмента сравнения спровоцировала Макилроя на исследование и разработку более надежного инструмента, который можно было бы использовать в различных задачах, но хорошо справляться с обработкой и ограничениями размера PDP-11.оборудование. Его подход к проблеме стал результатом сотрудничества также с сотрудниками Bell Labs, включая Альфреда Ахо , Эллиота Пинсона, Джеффри Уллмана и Гарольда С. Стоуна.

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

В конце 1984 года Ларри Уолл создал отдельную утилиту, патч , освобождая его исходный код на mod.sources и net.sources телеконференций. [5] [6] [7] Эта программа обобщила и расширила возможность изменения файлов с помощью вывода из diff .

Режимы в Emacs также позволяют конвертировать формат патчей и даже редактировать патчи в интерактивном режиме.

В первые годы работы с diff обычным применением было сравнение изменений в исходном коде программного обеспечения и разметки технических документов, проверка результатов отладки программ, сравнение списков файловых систем и анализ кода сборки компьютера. Выходные данные, предназначенные для ed, были мотивированы для обеспечения сжатия для последовательности изменений, внесенных в файл. Система управления исходным кодом (SCCS) и ее способность архивировать ревизии появились в конце 1970-х как следствие хранения сценариев редактирования из файла diff .

Алгоритм [ править ]

Операция diff основана на решении самой длинной общей проблемы подпоследовательности . [4]

В этой задаче заданы две последовательности элементов:

 б  с  д  е  г ч J д г
 б  с  д е е  г я J krxy г

и мы хотим найти самую длинную последовательность элементов, которая присутствует в обеих исходных последовательностях в том же порядке. То есть мы хотим найти новую последовательность, которую можно получить из первой исходной последовательности, удалив некоторые элементы, и из второй исходной последовательности, удалив другие элементы. Мы также хотим, чтобы эта последовательность была как можно более длинной. В данном случае это

abcdfgjz

От самой длинной общей подпоследовательности это всего лишь небольшой шаг, чтобы получить результат, похожий на diff : если элемент отсутствует в подпоследовательности, но присутствует в первой исходной последовательности, он должен быть удален (на что указывают знаки '-' ниже ). Если он отсутствует в подпоследовательности, но присутствует во второй исходной последовательности, он должен быть вставлен (как обозначено знаком «+»).

ehiqkrxy+ - + - + + + +

Использование [ править ]

diffКоманда вызывается из командной строки, передавая ему имена двух файлов: . Выходные данные команды представляют изменения, необходимые для преобразования исходного файла в новый файл.diff original new

Если исходный и новый каталоги, то diff будет запущен для каждого файла, который существует в обоих каталогах. Опция ,, будет рекурсивно спускаться по любым совпадающим подкаталогам для сравнения файлов между каталогами.-r

В любом из примеров в статье используются следующие два файла, оригинальный и новый :

В этом традиционном формате вывода аозначает добавленное ,dдля удаленных иcдля изменилось . Номера строк исходного файла отображаются переда/d/cи те из нового файла появляются после. Знаки « меньше» и « больше» (в начале строк, которые добавляются, удаляются или изменяются) указывают, в каком файле появляются эти строки. Строки добавления добавляются к исходному файлу, чтобы они отображались в новом файле. Строки удаления удаляются из исходного файла и отсутствуют в новом файле.

По умолчанию общие для обоих файлов строки не отображаются. Перемещенные линии отображаются как добавленные в новом местоположении и как удаленные из старого местоположения. [8] Однако некоторые инструменты сравнения выделяют перемещенные строки.

Выходные вариации [ править ]

Редактировать скрипт [ править ]

Скрипт редактора все еще может быть создан с помощью современных версий диффа с -eопцией. В результате скрипт редактирования для этого примера выглядит следующим образом:

24 аЭтот параграф содержит важные новые дополнения к этому документу..17 c проверьте этот документ. На.11,15 d
0 a Это важное замечание! Поэтому он должен быть расположен в начале этого документа!.

Чтобы преобразовать содержимое исходного файла в содержимое нового файла с помощью ed , мы должны добавить две строки в этот файл сравнения, одну строку, содержащую команду (запись), и одну, содержащую команду (выйти) (например, с помощью ). Здесь мы дали файлу diff имя mydiff, и преобразование произойдет при запуске .wqprintf "w\nq\n" >> mydiffed -s original < mydiff

Формат контекста [ править ]

В дистрибутиве Unix в Беркли был добавлен контекстный формат ( -c) и возможность рекурсии в структурах каталогов файловой системы ( -r), добавлены эти функции в 2.8 BSD, выпущенной в июле 1981 года. Контекстный формат diff, представленный в Беркли, помог с распространением патчи для исходного кода, которые могли быть изменены минимально.

В контекстном формате любые измененные строки отображаются рядом с неизмененными строками до и после. Включение любого количества неизмененных строк обеспечивает контекст для исправления. Контекст состоит из линий, которые не изменились между двумя файлами и служат в качестве ссылки , чтобы найти место линий в модифицированном файле и найти предполагаемое место для изменения , которые должны применяться независимо от того, до сих пор ли номера строк соответствуют. Контекстный формат обеспечивает большую удобочитаемость для людей и надежность при применении исправления, а также вывод, который принимается в качестве входных данных для программы исправления . Такое интеллектуальное поведение невозможно с традиционным выводом diff.

Количество неизмененных строк, отображаемых над и под фрагментом изменения, может быть определено пользователем, даже равным нулю, но обычно по умолчанию используется три строки. Если контекст неизмененных строк в фрагменте перекрывается с соседним фрагментом, тогда diff будет избегать дублирования неизмененных строк и объединить фрагменты в один фрагмент.

Знак " !" представляет собой изменение между строками, соответствующими в двух файлах. А « +» представляет собой добавление линии, в то время как пустое пространство представляет собой линию без изменений. В начале патча находится информация о файле, включая полный путь и отметку времени, разделенную символом табуляции. В начале каждого фрагмента указаны номера строк, относящиеся к соответствующему изменению в файлах. Диапазон номеров, появляющийся между наборами из трех звездочек, применяется к исходному файлу, в то время как наборы из трех тире применяются к новому файлу. Диапазоны фрагментов указывают номера начальной и конечной строк в соответствующем файле.

Команда diff -c original newпроизводит следующий вывод:

*** / путь / к / исходной отметке времени --- / путь / к / новой отметке времени****************** 1,3 ****--- 1,9 ---- + Это важное + примечание! Поэтому он должен + располагаться в + начале этого + документа! + Эта часть документ остался то же самое от версии к****************** 8,20 **** сжать размер изменения.- Этот абзац содержит - устаревший текст. - Он будет удален в ближайшее время. Важно написать по буквам! проверьте этот документ. На с другой стороны, слово с ошибкой не конец мира.--- 14,21 ---- сжать размер изменения. Важно написать по буквам! проверьте этот документ. На с другой стороны, слово с ошибкой не конец мира.****************** 22,24 ****--- 23,29 ---- этот абзац должен быть изменен. Вещи могут быть добавленным после него.+ + Этот параграф содержит + важные новые добавления + к этому документу.

Примечание. Здесь вывод различий показан с помощью цветов, чтобы его было легче читать. Утилита diff не выводит цветной вывод; его вывод - простой текст . Однако многие инструменты могут отображать результат в цвете, используя подсветку синтаксиса .

Единый формат [ править ]

Унифицированный формат (или Унифицированный ) [9] [10] наследует технические улучшения , сделанные в формате контекст, но дает меньший дифференциал со старым и новым текстом , представленным в непосредственной близости. Унифицированный формат обычно вызывается с помощью « -u» параметр командной строки . Этот вывод часто используется как ввод для программы исправления . Многие проекты специально требуют, чтобы «различия» были представлены в едином формате, что делает единый формат различий наиболее распространенным форматом для обмена между разработчиками программного обеспечения.

Различия в унифицированном контексте были первоначально разработаны Уэйном Дэвисоном в августе 1990 года (в unidiff, который появился в томе 14 comp.sources.misc). Ричард Столмен добавил поддержку унифицированных различий в утилиту diff проекта GNU через месяц, и эта функция дебютировала в GNU diff 1.15, выпущенном в январе 1991 года. С тех пор GNU diff обобщил контекстный формат, чтобы разрешить произвольное форматирование различий.

Формат начинается с того же двухстрочного заголовка, что и контекстный формат, за исключением того, что исходному файлу предшествует "---"и новому файлу предшествует"+++". За ним следуют один или несколько блоков изменений, которые содержат различия строк в файле. Неизмененным контекстным строкам предшествует символ пробела, перед добавляемыми строками стоит знак плюс , а перед строками удаления - знак минус .

Блок начинается с информации о диапазоне, за которым сразу следует добавление строк, удаление строк и любое количество контекстных строк. Информация о диапазоне окружена двойными знаками at и объединяется в одну строку, что отображается на двух строках в контекстном формате (см. Выше ). Формат строки информации о диапазоне следующий:

@@ -l, s + l, s @@ необязательный заголовок раздела

Информация о диапазоне фрагментов содержит два диапазона фрагментов. Диапазону фрагмента исходного файла предшествует символ минус, а диапазону нового файла предшествует символ плюс. Каждый диапазон фрагментов имеет формат l, s, где l - номер начальной строки, а s - количество строк, к которым применяется фрагмент изменения для каждого соответствующего файла. Во многих версиях GNU diff каждый диапазон может опускать запятую и конечное значение s , и в этом случае s по умолчанию равно 1. Обратите внимание, что единственное действительно интересное значение - это номер строки l первого диапазона; все остальные значения могут быть вычислены из diff.

Диапазон фрагментов оригинала должен быть суммой всех контекстных и удаляемых (включая измененные) строк фрагментов. Диапазон фрагментов для нового файла должен быть суммой всех контекстных и добавляемых (включая измененные) строк фрагментов. Если информация о размере блока не соответствует количеству строк в блоке, то различие может считаться недействительным и отклоняться.

При желании за диапазоном фрагментов может следовать заголовок раздела или функции, частью которых является фрагмент. Это в основном полезно для облегчения чтения различий. При создании diff с помощью GNU diff заголовок идентифицируется сопоставлением регулярного выражения . [11]

Если строка изменена, она отображается как удаление и добавление. Поскольку фрагменты исходного и нового файла появляются в одном фрагменте, такие изменения будут отображаться рядом друг с другом. [12] В примере ниже это происходит:

-проверьте этот документ. На+ проверьте этот документ. На

Команда diff -u original newпроизводит следующий вывод:

--- / path / to / original timestamp +++ / path / to / new timestamp @@ -1,3 +1,9 @@ + Это важное + примечание! Поэтому он должен + располагаться в + начале этого + документа! + Эта часть документ остался то же самое от версии к@@ -8,13 +14,8 @@ сжать размер изменения.-Этот абзац содержит -текст, который устарел. -Он будет удален в ближайшем будущем. - Важно написать по буквам-проверьте этот документ. На + проверить этот документ. На с другой стороны, слово с ошибкой не конец мира.@@ -22,3 +23,7 @@ этот абзац должен быть изменен. Вещи могут быть добавленным после него.+ + Этот параграф содержит + важные новые добавления + к этому документу.

Примечание. Здесь вывод различий показан с помощью цветов, чтобы его было легче читать. Утилита diff не выводит цветной вывод; его вывод - простой текст . Однако многие инструменты могут отображать результат в цвете, используя подсветку синтаксиса .

Обратите внимание, что для успешного отделения имен файлов от временных меток разделителем между ними является символ табуляции. Это невидимо на экране и может быть потеряно при копировании / вставке различий с экранов консоли / терминала.

Существуют некоторые модификации и расширения форматов diff, которые используются и понимаются определенными программами и в определенных контекстах. Например, некоторые системы контроля версий, такие как Subversion, указывают номер версии, «рабочую копию» или любой другой комментарий вместо или в дополнение к метке времени в разделе заголовка diff.

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

Индекс: путь / к / file.cpp

Особый случай файлов, которые не заканчиваются символом новой строки, не обрабатывается. Ни утилита unidiff, ни стандарт POSIX diff не определяют способ обработки файлов этого типа. (Действительно, такие файлы не являются «текстовыми» файлами в соответствии со строгими определениями POSIX. [13] ) Программа patch не знает даже о выходных данных diff для конкретной реализации.

Реализации и сопутствующие программы[ редактировать ]

Изменения с 1975 года включают улучшения основного алгоритма, добавление полезных функций к команде и разработку новых форматов вывода. Базовый алгоритм описан в статьях «Разностный алгоритм O (ND) и его вариации » Юджина У. Майерса [14] и в «Программе сравнения файлов » Уэбба Миллера и Майерса. [15] Алгоритм был независимо обнаружен и описан в « Алгоритмах приблизительного сопоставления строк » Эско Укконена . [16] Первые выпуски программы diff были разработаны для сравнения строк текстовых файлов, ожидающих новой строки.символ для разделения строк. К 1980-м годам поддержка двоичных файлов привела к сдвигу в дизайне и реализации приложения.

GNU diff и diff3 включены в пакет diffutils вместе с другими утилитами, относящимися к diff и patch . [17] В настоящее время также существует пакет patchutils , который может комбинировать, переупорядочивать, сравнивать и исправлять контекстные различия и унифицированные различия. [18]

Форматировщики и внешние интерфейсы [ править ]

Постпроцессоры sdiff и diffmk отображают параллельные списки различий и применяют метки изменений к печатным документам соответственно. Оба были разработаны в другом месте в Bell Labs в 1981 году или раньше. [ Необходима цитата ] [ обсудить ]

Diff3 сравнивает один файл с двумя другими файлами путем согласования двух различий. Первоначально он был задуман Полом Дженсеном для согласования изменений, внесенных двумя людьми, редактирующими общий источник. Он также используется системами контроля версий, например RCS , для слияния . [19]

В Emacs есть Ediff для отображения изменений, которые патч обеспечит в пользовательском интерфейсе, который сочетает в себе возможности интерактивного редактирования и слияния файлов патчей.

Vim предоставляет vimdiff для сравнения от двух до восьми файлов, причем различия выделяются цветом. [20] Исторически вызывая программу diff, современный vim использует git -вилку кода библиотеки xdiff (LibXDiff), что обеспечивает повышенную скорость и функциональность. [21]

GNU Wdiff [22] - это интерфейс для diff, который показывает слова или фразы, которые изменились в текстовом документе на письменном языке, даже при наличии переноса слов или разной ширины столбцов.

colordiff - это оболочка Perl для 'diff', выводящая тот же результат, но с красивой подсветкой «синтаксиса». [23]

Алгоритмические производные [ править ]

Утилиты, сравнивающие исходные файлы по их синтаксической структуре, были созданы в основном как инструменты исследования для некоторых языков программирования; [24] [25] [26] некоторые из них доступны как коммерческие инструменты. [27] [28] Кроме того, бесплатные инструменты, выполняющие различие с учетом синтаксиса, включают:

  • C ++: зограф, на основе AST. [29]
  • HTML: Daisydiff, [30] HTML- разн .
  • XML: xmldiffpatch от Microsoft и xmldiffmerge для IBM. [31] [32]
  • JavaScript : astii (на основе AST).
  • Многоязычный: Pretty Diff (код формата, а затем diff) [33]

Spiff представляет собой вариант дифференциала , который игнорирует различия в вычислениях с плавающей точкой с ошибками округления и пробелами , оба из которых , как правило , не имеет отношение к сравнению с исходным кодом. Bellcore написал оригинальную версию. [34] [35] HPUX порт является самым актуальным публичным релизом. spiff не поддерживает двоичные файлы. Spiff выводит на стандартный вывод в стандартном формате различий и принимает входные сигналы в C , Bourne оболочки , Fortran , Modula-2 и лисповских языков программирования . [36] [37] [34][38] [35]

LibXDiff - это библиотека LGPL, которая обеспечивает интерфейс для многих алгоритмов с 1998 года. Первоначально был реализован улучшенный алгоритм Майерса с отпечатком Рабина (в последней версии 2008 года) [39], но с тех пор git и вилка libgit2 расширили репозиторий. со многими собственными. Один алгоритм, называемый «гистограммой», обычно считается намного лучше исходного алгоритма Майерса как по скорости, так и по качеству. [40] [41] Это современная версия LibXDiff, используемая Vim. [21]

См. Также [ править ]

  • Сравнение инструментов сравнения файлов
  • Дельта-кодирование
  • Оператор разницы
  • Изменить расстояние
    • Расстояние Левенштейна
  • История управления конфигурацией программного обеспечения
  • Самая длинная общая проблема подпоследовательности
  • Сравнение файлов Microsoft
  • Ревизионный контроль
  • Управление конфигурацией программного обеспечения

Другие бесплатные инструменты для сравнения файлов [ править ]

  • cmp
  • комм
  • Kompare
  • tkdiff
  • WinMerge (Microsoft Windows)
  • объединить
  • Pretty Diff

Ссылки [ править ]

  1. ^ Маккензи и др. «Двоичные файлы и принудительное сравнение текста» в сравнении и слиянии файлов с помощью GNU Diff и Patch . Загружено 28 апреля 2007 г. [1]
  2. ^ Эрик С. Раймонд (редактор), "diff" , The Jargon File , версия 4.4.7
  3. ^ IEEE Computer Society ; Открытая группа (26 сентября 2008 г.). Стандарт информационных технологий - Базовые спецификации интерфейса переносимой операционной системы (POSIX), выпуск 7 . С. 2599–2607.IEEE Std. 1003.1-2001 определяет традиционные форматы вывода, форматы вывода "ed script" и context diff; IEEE Std. 1003.1-2008 добавил (к тому времени более распространенный) унифицированный формат.
  4. ^ а б Джеймс У. Хант; М. Дуглас Макилрой (июнь 1976 г.). «Алгоритм дифференциального сравнения файлов» (PDF) . Технический отчет по вычислительной науке, Bell Laboratories . 41 .
  5. Ларри Уолл (9 ноября 1984 г.). "Аппарат патча - ЭТО ВЫ ХОТИТЕ !!!" . Группа новостейnet.sources . Usenet: [email protected] . Проверено 11 мая 2015 года . 
  6. Ларри Уолл (29 ноября 1984 г.). «патч версии 1.2 - ЭТО ВЫ ХОТИТЕ» . Группа новостейnet.sources . Usenet: [email protected] . Проверено 11 мая 2015 года . 
  7. Ларри Уолл (8 мая 1985 г.). «патч версии 1.3» . Группа новостейnet.sources . Usenet: [email protected] . Проверено 11 мая 2015 года . 
  8. ^ Дэвид Маккензи; Пол Эггерт; Ричард Столмен (1997). Сравнение и объединение файлов с помощью GNU Diff и Patch . Бристоль: Теория сети. ISBN 978-0-9541617-5-0.
  9. ^ «Подробное описание единого формата» . GNU Diffutils (версия 3.7, 7 января 2018 г.) .
  10. ^ ван Россум, Гвидо. «Единый формат различий» . Все вещи Pythonic .
  11. ^ 2.2.3 Отображение различий в разделах, руководство по GNU diffutils
  12. Unified Diff Format , Гвидо ван Россум , 14 июня 2006 г.
  13. ^ http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_403 Раздел 3.206
  14. ^ Э. Майерс (1986). «Разностный алгоритм O (ND) и его варианты». Алгоритмика . 1 (2): 251–266. CiteSeerX 10.1.1.4.6927 . DOI : 10.1007 / BF01840446 . S2CID 6996809 .  
  15. ^ Уэбб Миллер; Юджин В. Майерс (1985). «Программа сравнения файлов». Программное обеспечение - практика и опыт . 15 (11): 1025–1040. CiteSeerX 10.1.1.189.70 . DOI : 10.1002 / spe.4380151102 . 
  16. ^ Esko Ukkonen (1985). «Алгоритмы приблизительного сопоставления строк» . Информация и контроль . 64 (1–3): 100–118. DOI : 10.1016 / S0019-9958 (85) 80046-2 .
  17. ^ Утилиты GNU Diff . Сделано доступным Фондом свободного программного обеспечения . Бесплатная документация. Бесплатный исходный код.
  18. Во, Тим (12 июня 2020 г.). "twaugh / patchutils" .
  19. ^ "слияние (GNU RCS 5.10.0)" . gnu.org . Проверено 22 января 2021 года .
  20. ^ Moolenaar, Брэм . «Документация Vim: diff» . vimdoc.sourceforge.net . Дата обращения 1 мая 2020 . Самый простой способ начать редактирование в режиме сравнения - использовать команду "vimdiff". Это запускает Vim как обычно и дополнительно настраивает для просмотра различий между аргументами. Это эквивалентно:vimdiff file1 file2 [file3] [file4] [...file8]vim -d file1 file2 [file3] [file4] [...file8]
  21. ^ a b Брабандт, Кристиан (1 декабря 2018 г.). «Сила различий» . Vimways . Архивировано 2 декабря 2018 года . Дата обращения 1 мая 2020 .
  22. ^ "gnu.org" . www.gnu.org .
  23. ^ "colordiff" . www.colordiff.org .
  24. Хорвиц, Сьюзен (июнь 1990 г.). «Выявление семантических и текстовых различий между двумя версиями программы» . Уведомления ACM SIGPLAN . 25 (6): 234–245. CiteSeerX 10.1.1.49.3377 . DOI : 10.1145 / 93548.93574 . 
  25. ^ Ян, Wuu (июль 1991). «Выявление синтаксических различий между двумя программами». Программное обеспечение: практика и опыт . 21 (7): 739–755. CiteSeerX 10.1.1.13.9377 . DOI : 10.1002 / spe.4380210706 . 
  26. ^ Трава. Cdiff: синтаксис Diff для программ на C ++. Труды USENIX C ++ Conf., Стр. 181-193, 1992
  27. ^ Compare ++, http://www.coodesoft.com/ Архивировано 29ноября2011 г. на Wayback Machine
  28. ^ SmartDifferencer, http://www.semanticdesigns.com/Products/SmartDifferencer
  29. ^ "xaizek / zograscope" . GitHub . 26 мая 2020.
  30. ^ DaisyDiff , https://code.google.com/p/daisydiff/
  31. ^ xmldiffpatch , http://msdn.microsoft.com/en-us/library/aa302294.aspx
  32. ^ xmldiffmerge , http://www.alphaworks.ibm.com/tech/xmldiffmerge
  33. ^ Чейни, Остин. Pretty Diff - Документация . http://prettydiff.com/documentation.php Архивировано 31 июля 2012 г. на Wayback Machine
  34. ^ a b dontcallmedotcom. "шикарный" . Проверено 16 июня 2013 .
  35. ^ a b Nachbar, Daniel W (1999-12-01). «Перенос и архивирование HP-UX» . Великобритания . Проверено 13 июня 2013 .
  36. ^ "SPIFF 1" . 1988-02-02 . Проверено 16 июня 2013 .
  37. ^ Nachbar, Daniel W (1988-02-02). "Справочная страница" . Великобритания . Проверено 16 июня 2013 .
  38. Davide (28 сентября 2009 г.). "stackoverflow" . Проверено 16 июня 2013 .
  39. ^ Либензи, Давиде. «LibXDiff» . SourceForge FreshMeat .
  40. ^ Нугрохо, Юсуф Сулистио; Хата, Хидеаки; Мацумото, Кеничи (январь 2020 г.). «Насколько различаются различные алгоритмы сравнения в Git ?: Используйте --histogram для изменения кода» . Эмпирическая программная инженерия : 790–823. DOI : 10.1007 / s10664-019-09772-Z . S2CID 59608676 . 
  41. ^ "алгоритм - В чем разница между 'git diff --patience' и 'git diff --histogram'?" . Переполнение стека . Это действительно показывает, что разница гистограммы немного превосходит Майерса, в то время как терпение намного медленнее, чем другие.

Дальнейшее чтение [ править ]

  • Пол Хекель (апрель 1978 г.). «Методика выявления различий между файлами». Коммуникации ACM . 21 (4): 264–268. DOI : 10.1145 / 359460.359467 . S2CID  207683976 .Методика выявления различий между файлами
  • Общая реализация алгоритма Майерса SES / LCS с уточнением линейного пространства Хиршберга (исходный код C)

Внешние ссылки [ править ]

  • diff: сравнить два файла - Справочник по командам и служебным программам, Единая спецификация UNIX , Выпуск 7 от Open Group
  • diff(1) -  Руководство программиста Plan 9 , том 1
  • diff(1) -  Руководство по общим командам Inferno
  • Сравнение файлов в Curlie
  • Реализация JavaScript