Jump to content

разница

(Перенаправлено из утилиты Diff )
разница
Оригинальный автор(ы) Дуглас Макилрой
( AT&T Bell Laboratories )
Разработчик(и) Различные с открытым исходным кодом и коммерческие разработчики разработчики
Первоначальный выпуск июнь 1974 г .; 50 лет назад ( 1974-06 )
Написано в С
Операционная система Unix , Unix-подобные , V , Plan 9 , Inferno
Платформа Кросс-платформенный
Тип Команда
Лицензия План 9: МОЯ лицензия

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

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

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

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

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

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

Руководство по переносимости X/Open, выпуск 2, 1987 г., включает в себя различия. Контекстный режим был добавлен в POSIX.1-2001 (выпуск 6). Унифицированный режим был добавлен в POSIX.1-2008 (выпуск 7). [9]

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

Алгоритм

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

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

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

a b c d f g h j q z
a b c d e f g i j k r x y z

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

a b c d  f  g  j  z

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

e   h i   q   k r x y
+   - +   -   + + + +

Использование

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

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

Если original и new — каталоги, то diff будет запущен для каждого файла, существующего в обоих каталогах. Вариант, -r, рекурсивно спустится по всем совпадающим подкаталогам для сравнения файлов между каталогами.

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

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

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

Варианты вывода

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

Редактировать сценарий

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

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

24a

This paragraph contains
important new additions
to this document.
.
17c
check this document. On
.
11,15d
0a
This is an important
notice! It should
therefore be located at
the beginning of this
document!

.

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

Формат контекста

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

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

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

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

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

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

*** /path/to/original	timestamp
--- /path/to/new	timestamp
***************
*** 1,3 ****
--- 1,9 ----
+ This is an important
+ notice! It should
+ therefore be located at
+ the beginning of this
+ document!
+
  This part of the
  document has stayed the
  same from version to
***************
*** 8,20 ****
  compress the size of the
  changes.

- This paragraph contains
- text that is outdated.
- It will be deleted in the
- near future.

  It is important to spell
! check this dokument. On
  the other hand, a
  misspelled word isn't
  the end of the world.
--- 14,21 ----
  compress the size of the
  changes.

  It is important to spell
! check this document. On
  the other hand, a
  misspelled word isn't
  the end of the world.
***************
*** 22,24 ****
--- 23,29 ----
  this paragraph needs to
  be changed. Things can
  be added after it.
+
+ This paragraph contains
+ important new additions
+ to this document.

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

Единый формат

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

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

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

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

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

@@ -l,s +l,s @@ optional section heading

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

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

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

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

-check this dokument. On
+check this document. On

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

--- /path/to/original	timestamp
+++ /path/to/new	timestamp
@@ -1,3 +1,9 @@
+This is an important
+notice! It should
+therefore be located at
+the beginning of this
+document!
+
 This part of the
 document has stayed the
 same from version to
@@ -8,13 +14,8 @@
 compress the size of the
 changes.

-This paragraph contains
-text that is outdated.
-It will be deleted in the
-near future.
-
 It is important to spell
-check this dokument. On
+check this document. On
 the other hand, a
 misspelled word isn't
 the end of the world.
@@ -22,3 +23,7 @@
 this paragraph needs to
 be changed. Things can
 be added after it.
+
+This paragraph contains
+important new additions
+to this document.

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

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

Расширения

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

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

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

Index: path/to/file.cpp

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

Программа исправлений не обязательно распознает выходные данные различий, специфичные для конкретной реализации. Однако известно, что патч GNU распознает патчи git и действует немного по-другому. [18]

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

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

GNU diff и diff3 включены в пакет diffutils вместе с другими утилитами, связанными с различиями и исправлениями . [22]

Форматеры и интерфейсы

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

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

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

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

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

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

colordiff — это Perl-оболочка для diff, которая выдает тот же результат, но с раскраской добавленных и удаленных битов. [27] diff-so-fancy и diff-highlight — более новые аналоги. [28] «дельта» — это переписанная версия Rust, которая одновременно выделяет изменения и основной код. [29]

Patchutils содержит инструменты, которые объединяют, переупорядочивают, сравнивают и исправляют контекстные и унифицированные различия. [30]

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

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

Утилиты, сравнивающие исходные файлы по их синтаксической структуре, были созданы в основном как инструменты исследования некоторых языков программирования; [31] [32] [33] некоторые доступны в качестве коммерческих инструментов. [34] [35] Кроме того, к бесплатным инструментам, выполняющим различия с учетом синтаксиса, относятся:

  • C++: зограф, на основе AST. [36]
  • HTML: Дейзидифф, [37] html-разница.
  • XML: xmldiffpatch от Microsoft и xmldiffmerge от IBM. [38] [39]
  • JavaScript : astii (на основе AST).
  • Многоязычность: Pretty Diff (форматирование кода, а затем сравнение) [40]

spiff — это вариант diff , который игнорирует различия в вычислениях с плавающей запятой с ошибками округления и пробелами , которые обычно не имеют отношения к сравнению исходного кода. Bellcore написала оригинальную версию. [41] [42] Порт HPUX — это самая последняя общедоступная версия. spiff не поддерживает двоичные файлы. spiff выводит на стандартный вывод в стандартном формате diff и принимает входные данные на C , Bourne Shell , Fortran , Modula-2 и Lisp языках программирования . [43] [44] [41] [45] [42]

LibXDiff — это библиотека LGPL , которая обеспечивает интерфейс для многих алгоритмов 1998 года. Первоначально был реализован улучшенный алгоритм Майерса с отпечатком Рабина (по состоянию на финальную версию 2008 года), [46] но форк git и libgit2 с тех пор расширил репозиторий множеством своих собственных. Один алгоритм, называемый «гистограммой», обычно считается намного лучшим, чем исходный алгоритм Майерса, как по скорости, так и по качеству. [47] [48] Это современная версия LibXDiff, используемая Vim. [25]

См. также

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

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

[ редактировать ]
  1. ^ Маккензи и др. «Двоичные файлы и принудительное сравнение текста» в книге « Сравнение и объединение файлов с помощью GNU Diff and Patch» . Загружено 28 апреля 2007 г. [1] Архивировано 19 декабря 2017 г. на Wayback Machine.
  2. ^ Эрик С. Рэймонд (редактор), «diff». Архивировано 31 января 2014 г. в Wayback Machine , The Jargon File , версия 4.4.7.
  3. ^ Компьютерное общество IEEE ; Открытая группа (26 сентября 2008 г.). Стандарт информационных технологий — базовые спецификации интерфейса портативной операционной системы (POSIX), выпуск 7 . стр. 2599–2607. Стандарт IEEE. 1003.1-2001 определяет традиционные форматы вывода «ed script» и контекстного сравнения; Стандарт IEEE. 1003.1-2008 добавил (к тому времени более распространенный) унифицированный формат.
  4. ^ https://minnie.tuhs.org/cgi-bin/utree.pl?file=V5/usr/source/s1/diff1.c
  5. ^ Перейти обратно: а б Джеймс В. Хант; М. Дуглас Макилрой (июнь 1976 г.). «Алгоритм дифференциального сравнения файлов» (PDF) . Технический отчет по вычислительной технике, Bell Laboratories . 41 . Архивировано (PDF) из оригинала 26 декабря 2014 г. Проверено 6 мая 2015 г.
  6. ^ Ларри Уолл (9 ноября 1984 г.). «Аппликатор патчей – ВЫ ХОТИТЕ ЭТО!!!» . Группа новостей : net.sources . Usenet:   [электронная почта защищена] . Архивировано из оригинала 19 февраля 2022 года . Проверено 11 мая 2015 г.
  7. ^ Ларри Уолл (29 ноября 1984 г.). «Патч версии 1.2 — ВЫ ХОТИТЕ ЭТОГО» . Группа новостей : net.sources . Usenet:   [электронная почта защищена] . Архивировано из оригинала 21 марта 2020 года . Проверено 11 мая 2015 г.
  8. ^ Ларри Уолл (8 мая 1985 г.). «патч версии 1.3» . Группа новостей : net.sources . Usenet:   [электронная почта защищена] . Архивировано из оригинала 19 февраля 2022 года . Проверено 11 мая 2015 г.
  9. ^ diff – Справочник по оболочке и утилитам, Единая спецификация UNIX , версия 4 от Open Group.
  10. ^ Дэвид Маккензи; Пол Эггерт; Ричард Столлман (1997). Сравнение и объединение файлов с помощью GNU Diff и Patch . Бристоль: Теория сетей. ISBN  978-0-9541617-5-0 . Архивировано из оригинала 31 марта 2015 г. Проверено 17 марта 2015 г.
  11. ^ «Подробное описание единого формата» . GNU Diffutils (версия 3.7, 7 января 2018 г.) . Архивировано из оригинала 18 января 2020 года . Проверено 29 января 2020 г.
  12. ^ ван Россум, Гвидо. «Единый формат различий» . Все вещи Pythonic . Архивировано из оригинала 25 декабря 2019 г. Проверено 29 января 2020 г.
  13. ^ 2.2.3 Показать, в каких разделах имеются различия , руководство GNU diffutils
  14. Единый формат различий , автор: Гвидо ван Россум , 14 июня 2006 г.
  15. ^ http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_403 . Архивировано 29 апреля 2013 г. в Wayback Machine . разделе 3.206
  16. ^ «Неполные строки (сравнение и объединение файлов)» . www.gnu.org .
  17. ^ "git: apply.c" . Гит. 8 мая 2023 г.
  18. ^ «patch.c\src — patch.git — патч GNU» . git.savannah.gnu.org . В различиях в стиле git состояние «до» каждого патча относится к начальному состоянию перед изменением каких-либо файлов.
  19. ^ Э. Майерс (1986). «Алгоритм разности O (ND) и его варианты». Алгоритмический . 1 (2): 251–266. CiteSeerX   10.1.1.4.6927 . дои : 10.1007/BF01840446 . S2CID   6996809 .
  20. ^ Уэбб Миллер; Юджин В. Майерс (1985). «Программа сравнения файлов». Программное обеспечение: практика и опыт . 15 (11): 1025–1040. CiteSeerX   10.1.1.189.70 . дои : 10.1002/спе.4380151102 . S2CID   15489614 .
  21. ^ Эско Укконен (1985). «Алгоритмы приблизительного сопоставления строк» . Информация и контроль . 64 (1–3): 100–118. дои : 10.1016/S0019-9958(85)80046-2 .
  22. ^ Утилиты GNU Diff. Архивировано 16 марта 2015 г. на Wayback Machine . Доступно Фондом свободного программного обеспечения . Бесплатная документация. Бесплатный исходный код.
  23. ^ «слияние (GNU RCS 5.10.0)» . gnu.org . Архивировано из оригинала 18 сентября 2019 года . Проверено 22 января 2021 г.
  24. ^ Муленаар, Брэм . «Документация Vim: разница» . vimdoc.sourceforge.net . Архивировано из оригинала 16 февраля 2020 года . Проверено 1 мая 2020 г. Самый простой способ начать редактирование в режиме сравнения — с помощью команды «vimdiff». При этом Vim запускается как обычно, а дополнительно настраивается на просмотр различий между аргументами. vimdiff file1 file2 [file3] [file4] [...file8] Это эквивалентно: vim -d file1 file2 [file3] [file4] [...file8]
  25. ^ Перейти обратно: а б Брабандт, Кристиан (1 декабря 2018 г.). «Сила различия» . Вимвейс . Архивировано из оригинала 2 декабря 2018 года . Проверено 1 мая 2020 г.
  26. ^ «gnu.org» . www.gnu.org . Архивировано из оригинала 11 августа 2020 г. Проверено 12 сентября 2020 г.
  27. ^ «Цветоразличение» . www.colordiff.org . Архивировано из оригинала 14 июня 2018 г. Проверено 14 июня 2018 г.
  28. ^ "разница такая причудливая" . Так необычно. 6 мая 2023 г.
  29. ^ Дэвисон, Дэн (8 мая 2023 г.). «дандависон/дельта» . Гитхаб .
  30. ^ Во, Тим (12 июня 2020 г.). "twaugh/patchutils" . Гитхаб . Архивировано из оригинала 1 октября 2020 года . Проверено 28 июня 2020 г.
  31. ^ Хорвиц, Сьюзен (июнь 1990 г.). «Выявление смысловых и текстовых различий между двумя версиями программы» . Уведомления ACM SIGPLAN . 25 (6): 234–245. CiteSeerX   10.1.1.49.3377 . дои : 10.1145/93548.93574 . Архивировано из оригинала 12 июня 2010 г. Проверено 1 ноября 2017 г.
  32. ^ Ян, У (июль 1991 г.). «Определение синтаксических различий между двумя программами». Программное обеспечение: практика и опыт . 21 (7): 739–755. CiteSeerX   10.1.1.13.9377 . дои : 10.1002/спе.4380210706 . S2CID   10853673 .
  33. ^ Трава. Cdiff: синтаксис, ориентированный на Diff для программ C++. Материалы конференции USENIX C++, стр. 181–193, 1992 г.
  34. ^ Compare++, http://www.coodesoft.com/. Архивировано 29 ноября 2011 г. на Wayback Machine.
  35. ^ SmartDifferencer, http://www.semanticdesigns.com/Products/SmartDifferencer. Архивировано 14 октября 2009 г. в Wayback Machine.
  36. ^ «хаизек/зографоскоп» . Гитхаб . 26 мая 2020 года. Архивировано из оригинала 21 декабря 2020 года . Проверено 27 июня 2020 г.
  37. ^ DaisyDiff , https://code.google.com/p/daisydiff/. Архивировано 19 марта 2015 г. в Wayback Machine.
  38. ^ xmldiffpatch , http://msdn.microsoft.com/en-us/library/aa302294.aspx. Архивировано 27 октября 2009 г. на Wayback Machine.
  39. ^ xmldiffmerge , http://www.alphaworks.ibm.com/tech/xmldiffmerge. Архивировано 24 сентября 2009 г. на Wayback Machine.
  40. ^ Чейни, Остин. Pretty Diff — Документация . http://prettydiff.com/documentation.php. Архивировано 31 июля 2012 г. в Wayback Machine.
  41. ^ Перейти обратно: а б неколлмедотком. "спиф" . Гитхаб . Архивировано из оригинала 26 марта 2015 г. Проверено 16 июня 2013 г.
  42. ^ Перейти обратно: а б Нахбар, Дэниел В. (1 декабря 1999 г.). «Портирование и архивирование HP-UX» . Великобритания. Архивировано из оригинала 5 сентября 2012 г. Проверено 13 июня 2013 г.
  43. ^ «СПИФФ 1» . 2 февраля 1988 г. Архивировано из оригинала 2 октября 2016 г. Проверено 16 июня 2013 г.
  44. ^ Нахбар, Дэниел В. (2 февраля 1988 г.). «Страница руководства» . Великобритания. Архивировано из оригинала 10 сентября 2012 г. Проверено 16 июня 2013 г.
  45. ^ Давиде (28 сентября 2009 г.). «переполнение стека» . Архивировано из оригинала 19 февраля 2022 г. Проверено 16 июня 2013 г.
  46. ^ Либензи, Давиде. «LibXDiff» . SourceForge FreshMeat . Архивировано из оригинала 01 июля 2020 г. Проверено 28 июня 2020 г.
  47. ^ Нугрохо, Юсуф Сулистё; Хата, Хидеаки; Мацумото, Кеничи (январь 2020 г.). «Насколько различаются разные алгоритмы сравнения в Git?: Используйте --histogram для изменений кода» . Эмпирическая разработка программного обеспечения : 790–823. arXiv : 1902.02467 . дои : 10.1007/s10664-019-09772-z . S2CID   59608676 .
  48. ^ «Алгоритм. В чем разница между «git diff --patience» и «git diff --histogram»?» . Переполнение стека . Архивировано из оригинала 19 февраля 2022 г. Проверено 28 июня 2020 г. Это действительно показывает, что разница гистограмм немного превосходит Майерса, а терпение намного медленнее, чем у других.

Дальнейшее чтение

[ редактировать ]
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 7009c60a47ee6ff5b1993a5688661b6a__1722012660
URL1:https://arc.ask3.ru/arc/aa/70/6a/7009c60a47ee6ff5b1993a5688661b6a.html
Заголовок, (Title) документа по адресу, URL1:
diff - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)