bitlvl
RU

Инструмент diff

Вставьте старую и новую версии. Результат показывает каждую изменённую строку с отмеченными изменёнными символами, плюс unified diff, готовый для patch -p0.

Скачать .patch

Unified diff

  

Результаты и сообщения этого инструмента выводятся на английском языке.

Как работает diff

Diff находит наименьший набор вставок и удалений, который превращает одну последовательность строк в другую. Классический алгоритм (Майерс, 1986; используется в git и GNU diff) находит наибольшую общую подпоследовательность за время, пропорциональное числу различий, поэтому сравнение двух почти одинаковых больших файлов выполняется быстро. Эта страница запускает его сначала по строкам, а затем по символам внутри каждой изменённой пары — именно поэтому правка одного слова отображается как одно подсвеченное слово, а не как две целые строки.

Как читать unified diff

--- old.txt
+++ new.txt
@@ -12,7 +12,8 @@
 строка контекста
-удалённая строка
+добавленная строка
+ещё одна добавленная строка
 строка контекста

Заголовок @@ указывает номер строки и длину фрагмента (hunk) в каждом файле. Строки, начинающиеся с пробела, — неизменённый контекст, - есть только в старом файле, + — только в новом. patch -p0 < changes.patch применяет его; git apply тоже работает. Строки контекста позволяют patch найти нужное место, даже если файл сдвинулся.

Параметры

Игнорирование пробелов считает одинаковыми строки, различающиеся только пробелами или табуляцией, что скрывает шум от переформатирования и показывает реальные изменения. Игнорирование регистра делает то же для заглавных букв. Unified diff по-прежнему показывает исходные строки; параметры влияют только на то, какие строки считаются изменёнными.

Ограничения

Всё выполняется в вашем браузере; несколько тысяч строк сравниваются гораздо быстрее, чем за секунду. Очень большие входные данные (более примерно 2 000 строк с каждой стороны при большом числе различий) отклоняются, чтобы страница оставалась отзывчивой; для них используйте diff или git diff --no-index a b локально.

Вопросы

Как сравнить два файла?

Откройте каждый в редакторе и скопируйте содержимое в два поля. Для файлов на сервере diff -u old new или git diff --no-index old new выдают тот же unified-формат, не покидая терминал.

Что означает подсветка внутри строки?

Внутри пары изменённых строк отмечены различающиеся символы; неизменённые показаны обычным текстом. Это второй diff, выполненный на уровне символов для этой пары.

Можно ли сравнивать JSON или код?

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

Мой текст куда-то загружается?

Нет. Сравнение выполняется на JavaScript в вашем браузере. У сайта нет бэкенда, который мог бы его получить.