Сравнение текстов

Точно видно, что изменилось между двумя версиями.

ВидПодсветка

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

Вставьте одну версию слева, другую справа — какая сторона какая, решаете вы, — или перетащите файл в любое из полей, и различия появятся на месте полей: удалённые строки подкрашены красным слева, добавленные — зелёным справа, а внутри изменённой строки отмечены именно те слова, которые отличаются. Построчное сравнение устроено так же, как в git: строки, встречающиеся по одному разу с каждой стороны, служат якорями, а промежутки заполняет алгоритм Майерса, поэтому журнал на 100 000 строк с несколькими правками сравнивается за доли секунды на вашем устройстве.

Два вида, три точности. «Рядом» ставит версии в две колонки с собственной нумерацией строк; «Единый» — одноколоночный формат git и инструментов ревью кода с префиксами − и +. Точность определяет, как подсвечивается изменённая строка: «Строка» выделяет всю строку, «Слово» — отличающиеся слова (по умолчанию), «Символ» — отдельные символы, что нужно для хешей, идентификаторов и чисел. Ничего не покидает браузер: без загрузки, без сохранённой ссылки, без аккаунта.

Как пользоваться

Введите или вставьте текст в оба поля либо нажмите «Выбрать файл» с любой стороны — имя файла появится в заголовке этой стороны и в заголовке diff, так что помнить, какой файл куда попал, не нужно. Результат занимает место полей; «Правка» возвращает их, а двойной щелчок по строке результата сразу переводит к этой строке для правки. «Поменять» меняет стороны местами, «Загрузить пример» заполняет оба поля короткой конфигурацией, чтобы показать, как выглядит результат. Панель под полями содержит переключатели: «Без учёта регистра» считает A и a одинаковыми; «Без учёта пробелов» сжимает последовательности пробелов и табуляций и игнорирует пробелы в начале и конце строки — то, что нужно для переформатированного кода; «Только изменения» сворачивает одинаковые строки до трёх строк контекста с каждой стороны, а полоса между ними разворачивается по щелчку.

Строка над результатом показывает число добавленных и удалённых строк и количество блоков изменений. ‹ › переходят от блока к блоку — клавиши n и p делают то же, когда результат в фокусе, — и блок, на который вы перешли, получает жёлтую метку в колонке номеров строк. «Копировать diff» помещает стандартный unified diff в буфер обмена; «Скачать .diff» сохраняет тот же текст файлом, который принимают git apply и patch. Если тексты в сумме больше 2 МБ, вместо пересчёта при каждом нажатии появляется кнопка «Сравнить».

Какие файлы можно сравнивать

Любые, внутри которых текст. Документы и заметки: .txt, .md, .rtf как простой текст, субтитры .srt или .vtt. Выгрузки данных: два файла JSON, два CSV или TSV, XML и YAML — самый быстрый способ увидеть, что изменилось между двумя ответами API или двумя дампами базы. Конфигурация: .ini, .toml, .env, .properties, .conf, Dockerfile, конфиг nginx или Apache — параметр, сломавший развёртывание, сразу бросается в глаза. Исходный код на любом языке: .js, .ts, .py, .go, .java, .c, .cpp, .rs, .php, .sql, .sh, а также .html и .css. Патчи и журналы: .diff, .patch, .log. Word, PDF и Excel — не текст: их содержимое упаковано в двоичный контейнер, поэтому здесь они отклоняются, а не выводятся как мусор; сначала экспортируйте их в простой текст или CSV.

Что стоит знать

Diff — это выбор, а не факт: если блок строк можно объяснить и как перемещённый, и как удалённый и добавленный заново, любой алгоритм выбирает одно прочтение, и два инструмента могут показать одну и ту же правку по-разному. Этот инструмент предпочитает прочтение, при котором уникальные строки остаются выровненными, — того же ждут от git. «Без учёта пробелов» сравнивает строки со сжатыми пробелами, но в результате показывает исходные отступы. Очень длинные строки — минифицированный JavaScript, экспорт JSON в одну строку — длиннее 4000 символов сравниваются целиком: пословное сравнение строки в 200 КБ не даст ничего читаемого. Таблица результата показывает до 8000 строк; дальше включите «Только изменения» или скачайте .diff — он всегда полный. Файлы проверяются перед загрузкой: двоичное содержимое и файлы больше 20 МБ отклоняются с сообщением, а не выводятся как мусор.

Немного истории: откуда взялся diff

Программа diff появилась вместе с Unix в 1974 году; её написали Дуглас Макилрой и Джеймс Хант, и её формат вывода — строки с префиксами < и > — до сих пор печатает команда diff. Единый (unified) формат с префиксами − и + и заголовками блоков @@ предложил Уэйн Дэвисон в 1990 году, его принял GNU diff, и он стал языком патчей: именно его показывают git show, pull request на GitHub и все инструменты ревью кода. Юджин Майерс опубликовал алгоритм различий O(ND) в 1986 году; он находит кратчайший сценарий правок и лежит в основе GNU diff, git и большинства редакторов. Брэм Коэн описал вариант patience около 2004 года — привязка к строкам, встречающимся ровно один раз с каждой стороны, затем сравнение промежутков, — потому что на реальном коде он даёт результат, который легче читать. Этот инструмент использует якоря patience с алгоритмом Майерса внутри промежутков и записывает единый формат для копирования и скачивания.

Где это нужно

Проверить, что коллега изменил в договоре или регламенте, прежде чем согласовать; сравнить два экспорта конфигурации и найти параметр, сломавший развёртывание; сопоставить два журнала — удачного и неудачного запуска; сверить сгенерированный файл с предыдущей версией; убедиться, что перевод сохранил каждую строку оригинала. Если нужны подсчёты, а не различия, Счётчик слов покажет слова, символы и время чтения; тексты, различающиеся только письменностью, Конвертер китайского приведёт к одному виду до сравнения. Скачанный здесь .diff применяется через git apply или patch в любой системе.

Частые вопросы

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

Нет. Сравнение выполняется в браузере, ничего не отправляется, не сохраняется и не публикуется по ссылке. Закройте вкладку — и всё исчезнет.

Что именно делает «Без учёта пробелов»?

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

Можно сравнить два файла, а не вставлять текст?

Да. Нажмите «Выбрать файл» с каждой стороны или перетащите файл в поле. Подходит любой текстовый файл: .txt, .md, .json, .csv, .log, исходный код. Двоичные файлы и файлы больше 20 МБ отклоняются.

Какие типы файлов можно сравнивать?

Любой текстовый файл: .txt, .md, .json, .csv, .xml, .yaml, .ini, .env, .log, .diff и исходный код на любом языке. Word, PDF и Excel — двоичные контейнеры, они отклоняются: сначала экспортируйте их в простой текст или CSV.

Что за .diff можно скачать?

Стандартный unified diff — формат git и patch. Команда git apply changes.diff на исходном файле даёт изменённую версию.

Почему подсветка меняется при переключении на «Символ»?

Точность «Слово» выделяет слова целиком; «Символ» — только отличающиеся символы. Для изменённого идентификатора или хеша посимвольный вид точнее; для обычного текста пословный читается легче.