Сравнение текстов (diff)

Построчный diff конфигов, логов и кода на LCS: подсветка добавленных и удалённых строк, символьный уровень в изменениях, копирование unified-вывода.

Вид результатаВид:

-

Построчный результат

Красным — удалённые строки, зелёным — добавленные; номера строк показаны слева от текста.

Diff считается в браузере

Сравнение — построчное на LCS-алгоритме, завершающий перевод строки и различия только в CRLF/LF не считаются изменением. Тексты не покидают вкладку: в ссылку «Поделиться» попадают лишь вид и опции, но не содержимое полей.

Последние сравнения

В историю сохраняются только сводки («+N −M») последних сравнений — содержимое текстов не записывается никогда. Записи живут в этом браузере и не попадают в экспорт на странице «Закладки».

Готовые примеры

Найдено: 5 из 5

Что это и как пользоваться

Сравнение идёт по алгоритму наибольшей общей подпоследовательности: страница находит минимальный набор добавлений и удалений, а не переписывает весь текст заново. Результат смотрится в двух видах — двумя колонками (split) или одним блоком с метками + и - (unified).

В режиме split обе версии идут рядом, и одинаковые строки выравниваются по вертикали; в unified всё идёт одним блоком, как в git diff. Для коротких текстов разница косметическая, для длинных split удобнее при чтении глазами.

Внутри изменённой строки различия подсвечиваются по символам: если в длинной строке поменялся один символ, видно какой, а не «строка заменена целиком». Для этого идёт отдельный, более дешёвый проход с меньшим лимитом.

Unified-вывод печатается в привычном виде: шапка --- a/… и +++ b/…, затем ханки @@ -1,4 +1,5 @@ с префиксами +, - и пробелом. Такой блок можно сохранить в .patch и применить утилитой patch.

Лимиты заданы явно: до 500 000 знаков на входе, до 2 млн ячеек таблицы LCS для построчного режима и до 200 000 для посимвольного. За этими числами сравнение не запускается, чтобы вкладка не зависла.

Когда пригодится

  • Сравнить две версии конфига и увидеть, какие строки реально изменились.
  • Разобрать правку в логе или коде: подсветка показывает добавления и удаления отдельно.
  • Найти перепутанный символ в длинной строке — посимвольный проход покажет его точнее построчного.
  • Получить патч для коллеги в формате, который принимает patch или git apply.
  • Сравнить два ответа API до и после релиза и увидеть, какие поля изменились.
  • Сравнить текст до и после автозамены и убедиться, что она не задела лишние строки.

Чего инструмент не делает

  • Текст сравнивается как последовательность символов, а не по смыслу: перестановка абзацев покажет удаление и вставку.
  • Изменения не объединяются и патч не применяется — страница только показывает различия.
  • Бинарные файлы не сравниваются: для них нет ни строк, ни символов в том виде, в каком их ждёт алгоритм.
  • Очень большие тексты упираются в лимит ячеек, и вместо результата страница сообщает, что сравнение слишком тяжёлое.

Примеры

Вход
                    строка А:
apple
birch
строка Б:
apple
cherry
                  
Выход
                      apple
- birch
+ cherry
                  
Вход
                    два блока кода
                  
Выход
                    @@ -1,2 +1,2 @@
 apple
-birch
+cherry