KDiff3 — свободная программа для сравнения и слияния файлов и каталогов из проекта KDE. Она показывает различия построчно, умеет работать с тремя версиями одновременно и хорошо подходит для разбора конфликтов Git. В отличие от простого diff, здесь есть графический интерфейс, синхронная прокрутка и наглядные панели, поэтому ошибку в конфиге или коде заметно быстрее.
Зачем нужен KDiff3
Сравнение файлов требуется в трёх типичных ситуациях: проверить, что изменилось между версиями конфигурации, слить правки двух веток и понять, почему после обновления пакета сломался рабочий файл. KDiff3 решает все три задачи одним инструментом. Он не хранит историю и не заменяет Git, а работает как наглядный просмотрщик и редактор слияния.
- Двустороннее сравнение любых текстовых файлов.
- Трёхстороннее слияние с общей базой и двумя изменёнными копиями.
- Сравнение каталогов с подсветкой добавленных, удалённых и изменённых файлов.
- Интеграция с Git, Mercurial и другими системами контроля версий.
Программа понимает разные кодировки и переносы строк, поэтому ей можно сравнивать файлы, созданные в Windows и Linux. Для двоичных файлов сравнение ограничивается сообщением о различии, что ожидаемо: построчный diff для них не имеет смысла.
Установка
В большинстве дистрибутивов KDiff3 есть в основном репозитории. В Debian и Ubuntu пакет ставится одной командой, в Fedora используется dnf, в Arch — pacman. Версию стоит проверить сразу: старые сборки могут иначе работать с кодировками.
sudo apt install kdiff3
kdiff3 --version
sudo dnf install kdiff3
sudo pacman -S kdiff3
Если графическая версия не нужна, для быстрой проверки различий достаточно утилиты diff. Но для слияния, где нужно видеть общий предок и обе стороны, KDiff3 экономит время и снижает риск потерять чужую правку.
Сравнение двух файлов
Запустите программу с двумя путями. Слева и справа появятся панели, а различия будут подсвечены цветом. Синхронная прокрутка удерживает одинаковые строки на одном уровне, поэтому взгляд не теряет контекст.
kdiff3 old.conf new.conf
kdiff3 ./src/main.c ./backup/main.c
Цвета означают тип изменения: добавленные строки, удалённые строки и изменённые фрагменты. Кнопки перехода к следующему и предыдущему различию позволяют быстро пройти весь файл. Если строки отличаются только пробелами, включите в настройках игнорирование пробелов — иначе шум будет мешать.
Для сохранения результата сравнения используйте «Сохранить как» и не перезаписывайте исходник без резервной копии. KDiff3 не создаёт автоматических бэкапов, ответственность за сохранность файла лежит на пользователе.
Трёхстороннее слияние
Слияние — главная функция программы. Ей нужны три файла: общая база, ваша версия и версия из другой ветки. Четвёртым параметром указывается файл результата. В интерфейсе появляются три входные панели и панель вывода, где собирается итоговый текст.
kdiff3 base.txt ours.txt theirs.txt -o merged.txt
kdiff3 -o merged.conf base.conf local.conf remote.conf
Конфликтующие фрагменты подсвечиваются, и программа предлагает выбрать вариант A, B или C. Кнопка A переносит блок из общей базы, B — из вашей версии, а C — из второй ветки. Для нетривиальных случаев блок можно отредактировать прямо в панели вывода.
Автоматическое слияние безопасно только там, где изменения не пересекаются. Если обе стороны правили одну и ту же строку, решение принимает человек. Перед сохранением пролистайте результат целиком: иногда конфликт выглядит разрешённым, но логика файла уже нарушена.
Интеграция с Git
Git умеет вызывать внешний инструмент слияния. Настройка делается один раз и действует для всех репозиториев пользователя. После неё команда git mergetool открывает KDiff3 для каждого конфликтного файла.
git config --global merge.tool kdiff3
git config --global mergetool.kdiff3.cmd 'kdiff3 "$BASE" "$LOCAL" "$REMOTE" -o "$MERGED"'
git mergetool
В команде важны кавычки: пути могут содержать пробелы, а переменные Git подставляют временные файлы. После закрытия KDiff3 Git спросит, успешно ли прошло слияние, и предложит удалить временные файлы. Проверьте результат командой git diff —check, чтобы поймать оставшиеся маркеры конфликта.
KDiff3 также можно назначить инструментом сравнения для git diff. Это удобно, когда нужно посмотреть изменения перед коммитом в графическом виде, а не в терминале.
git config --global diff.tool kdiff3
git difftool --dir-diff HEAD~1
git diff --check
Сравнение каталогов
Если передать два каталога, KDiff3 покажет дерево файлов и статус каждого: только слева, только справа, изменён или совпадает. Двойной клик открывает сравнение содержимого. Это удобно для проверки резервной копии, переноса сайта или сверки двух версий конфигурации.
kdiff3 /etc/nginx /backup/nginx
kdiff3 ~/project ~/project.bak
При синхронизации каталогов внимательно читайте направление операции. Копирование «слева направо» затрёт файлы справа, если они отличаются. Сначала сделайте снимок каталога или коммит, затем выполняйте массовые действия.
Настройки и полезные приёмы
Параметры хранятся в файле ~/.config/kdiff3rc. Через графические настройки можно задать шрифт, цветовую схему, поведение при закрытии, кодировку по умолчанию и правила игнорирования пробелов. Для регулярной работы стоит включить сохранение позиции окна и автоматический переход к следующему различию после выбора блока. Если файл открылся в неверной кодировке, выберите её вручную в меню и сохраните результат в UTF-8.
- Для конфигов с длинными строками включите перенос по словам.
- Для кода отключите игнорирование регистра, иначе имена переменных будут сравниваться неверно.
- Для файлов с Windows-переносами включите нормализацию CRLF, чтобы не видеть ложные различия.
- Перед слиянием всегда сохраняйте исходные версии в отдельном каталоге.
Ещё один приём — сравнивать не только текст, но и метаданные каталога. KDiff3 показывает размер и время изменения, однако решение о том, какая копия новее, лучше принимать по содержимому и истории Git, а не по timestamp.
Чек-лист
- KDiff3 установлен и открывает файлы в нужной кодировке.
- Для слияния подготовлены база, локальная и удалённая версии.
- Git настроен на вызов KDiff3, временные файлы не удаляются до проверки.
- После слияния выполнен поиск маркеров конфликта и тестовый запуск.
- Исходные файлы сохранены до массовой синхронизации каталогов.
Итог
KDiff3 — небольшой, но очень практичный инструмент, который закрывает сравнение и слияние без лишних слоёв. Он помогает понять изменения в конфигурации, аккуратно разрешить конфликт Git и сверить каталоги перед копированием. Если вы работаете с текстовыми файлами и хотите видеть различия глазами, а не угадывать по выводу diff, программа заслуживает места в системе.