Сравнение текстов и кода — базовая операция в разработке: code review, слияние веток, аудит конфигураций, проверка договоров. В этой статье рассмотрим алгоритмы, инструменты и практические методы сравнения.
Для быстрого сравнения двух текстов или фрагментов кода используйте Diff Checker на rechecker.ru.
Зачем нужно сравнение текстов
| Сценарий | Описание |
|---|---|
| Code review | Поиск изменений между коммитами |
| Слияние веток | Разрешение конфликтов при merge |
| Аудит конфигураций | Сравнение dev и prod настроек |
| Документы | Сравнение версий договоров |
| Локализация | Проверка переводов |
| Плагины/темы | Поиск изменений после обновления |
Алгоритмы сравнения
Longest Common Subsequence (LCS)
Классический алгоритм находит наибольшую общую подпоследовательность. Сложность O(n*m), где n и m — длины строк.
Файл A: ABCDEF
Файл B: ACDEFG
LCS: ACDEF
Myers diff
Оптимизированный алгоритм, используемый в Git. Минимизирует количество изменений в выводе. Сложность O(ND), где N — сумма длин, D — размер diff.
Patience diff
Вариант для кода: сначала сопоставляет уникальные строки, затем заполняет остальное. Даёт более читаемые diff для рефакторинга.
Форматы вывода
Unified diff (стандарт)
--- file1.txt
+++ file2.txt
@@ -1,4 +1,4 @@
-старая строка
+новая строка
без изменений
без изменений
Символы изменений
| Символ | Значение |
|---|---|
| Без изменений (контекст) |
- | Удалено |
+ | Добавлено |
! | Изменено (в некоторых форматах) |
Context diff
*** file1.txt
--- file2.txt
***************
*** 1,4 ****
- старый текст
общий контекст
--- 1,4 ----
+ новый текст
общий контекст
Инструменты командной строки
diff
diff file1.txt file2.txt
diff -u file1.txt file2.txt # unified
diff -r dir1/ dir2/ # рекурсивно
diff -w file1 file2 # игнорировать пробелы
git diff
git diff HEAD~1 # последний коммит
git diff branch1 branch2 # между ветками
git diff --word-diff # по словам
git diff --stat # статистика
colordiff
colordiff file1 file2 # цветной вывод
Онлайн-инструменты
Онлайн diff-сервисы удобны для:
- Сравнения без установки Git
- Работы с конфигурациями и логами
- Быстрой проверки при code review
- Сравнения выводов из разных источников
Diff Checker rechecker.ru поддерживает сравнение текста и кода с подсветкой синтаксиса и посимвольным режимом.
Сравнение по словам и символам
По строкам (по умолчанию)
Каждая строка — единица сравнения. Подходит для кода и структурированного текста.
По словам
Было: "старый текст"
Стало: "новый текст"
Diff: "старый" -> "новый" (остальное без изменений)
По символам
Используется для коротких строк, паролей, хешей. Показывает точные различия.
Практические сценарии
Сравнение конфигураций Nginx
diff -u /etc/nginx/sites-available/default /etc/nginx/sites-available/backup
Сравнение JSON
diff <(jq -S . file1.json) <(jq -S . file2.json)
Сортировка ключей (jq -S) убирает влияние порядка полей.
Игнорирование пробелов
diff -w file1 file2 # все пробелы
diff -B file1 file2 # пустые строки
diff -b file1 file2 # пробелы в конце строк
Интеграция в CI/CD
Сравнение файлов входит в пайплайны сборки:
# Пример: проверка изменений конфигурации
- name: Compare configs
run: |
diff -u config.prod.yaml config.staging.yaml || true
# Git diff в отчёте
- name: Generate diff report
run: git diff HEAD~1 --stat > diff-report.txt
Сравнение трёх и более версий
Для слияния изменений из нескольких веток используется трёхстороннее сравнение (3-way merge). Инструменты: diff3, meld, kdiff3, встроенные в Git.
diff3 ours.txt base.txt theirs.txt
Сравнение в IDE
| IDE | Горячие клавиши | Функция |
|---|---|---|
| VS Code | Ctrl+Shift+P → "Compare" | Сравнение двух файлов |
| PhpStorm | Ctrl+D на файле | Compare with... |
| Sublime | Ctrl+Shift+P | File: Compare |
| Vim | :diffthis | Режим сравнения |
Рекомендации
- Используйте unified format — читаемее и стандартен для патчей
- Игнорируйте несущественное — пробелы, регистр, где уместно
- Ограничивайте контекст — для больших файлов показывайте только изменённые участки
- Сохраняйте кодировку — UTF-8 для корректного отображения кириллицы
- Нормализуйте перед сравнением — сортировка ключей в JSON, удаление trailing whitespace
Для регулярного сравнения конфигов, логов и фрагментов кода Diff Checker на rechecker.ru даёт быстрый результат без установки дополнительного ПО.