delta превращает вывод git diff в подсвеченный текст с номерами строк, боковым сравнением и выделением перемещённых блоков. Это не замена git, а pager: git отдаёт патч, delta его перерисовывает. Утилита написана на Rust, работает в любом терминале с поддержкой цвета и заметно ускоряет чтение ревью, особенно в больших коммитах.
Установка
Пакет есть в Debian, Ubuntu, Fedora и Arch. Версия в репозитории обычно достаточна; если нужны свежие темы и исправления, собирайте через cargo. Перед настройкой проверьте, что версия git не ниже 2.20, а терминал поддерживает 256 цветов.
sudo apt install git-delta
sudo dnf install git-delta
sudo pacman -S git-delta
delta --version
Бинарник называется delta. Если команда не находится, проверьте путь установки: cargo кладёт её в ~/.cargo/bin, и этот каталог должен быть в PATH.
Подключение к git
Достаточно назначить delta внешним пейджером. Ключ interactive.diffFilter включает подсветку внутри git add -p, а merge.conflictStyle = zdiff3 делает конфликты понятнее. Настройки пишутся в ~/.gitconfig и действуют для всех репозиториев.
git config --global core.pager delta
git config --global interactive.diffFilter "delta --color-only"
git config --global delta.navigate true
git config --global merge.conflictStyle zdiff3
После этого git diff, git show и git log -p открываются в delta. Если вывод остался прежним, проверьте переменную GIT_PAGER: она перекрывает настройку. Переменная PAGER используется только тогда, когда core.pager не задан.
Настройки, которые стоит включить
delta читает секцию [delta] из git config. Разумный минимум: номера строк, боковое сравнение, подсветка перемещённых строк и гиперссылки в поддерживающих терминалах. Не включайте всё сразу: на узком экране боковой режим ломает читаемость.
git config --global delta.line-numbers true
git config --global delta.side-by-side true
git config --global delta.hyperlinks true
git config --global diff.colorMoved default
Боковое сравнение удобно на экране от 120 колонок. Для ноутбука оставьте обычный режим и включите его точечно: git diff | delta —side-by-side. Перемещённые блоки подсвечиваются разными цветами, если включён diff.colorMoved — это помогает увидеть перестановку функций, а не «удаление и добавление».
Навигация и чтение больших патчей
delta.large-file-threshold задаёт размер, после которого подсветка отключается ради скорости. Для многотысячных диффов полезно ограничить контекст и открыть файл по частям. В пейджере работают стандартные клавиши less: пробел, b, /поиск, n и N.
git diff --stat
git diff --unified=5 -- src/main.c
git log -p --follow -- src/main.c
git show HEAD~2 --stat
Если патч огромный, начните со —stat, затем смотрите конкретный файл. delta не меняет содержимое патча, поэтому копировать строки из него безопасно: цвета — это только оформление. Для машинной обработки отключайте оформление: git diff —no-color.
Работа вне git
delta умеет сравнивать два файла напрямую, без репозитория. Это удобно для конфигов, SQL-дампов и заметок. Поддерживаются также unified diff из stdin, поэтому утилита стыкуется с diff, patch и выводом других программ.
delta file1.txt file2.txt
diff -u old.conf new.conf | delta
git show HEAD:etc/app.conf | delta --side-by-side
delta --no-gitconfig --help
Ключ —no-gitconfig игнорирует пользовательские настройки: удобно, когда нужно сравнить поведение «как есть» и с вашей конфигурацией. Для сравнения с учётом синтаксиса языка укажите расширение файла — delta подберёт тему автоматически.
Темы и читаемость
Цветовая схема задаётся параметром delta.syntax-theme; список тем печатает сам delta. Светлые и тёмные темы стоит выбирать под фон терминала, иначе подсветка сливается. Переменная BAT_THEME действует на общий движок подсветки.
delta --show-syntax-themes
git config --global delta.syntax-theme TwoDark
BAT_THEME="Monokai Extended" delta file1.txt file2.txt
git config --global delta.minus-style "syntax #340001"
Не гонитесь за контрастом: слишком яркие цвета утомляют на длинных сессиях. Если терминал не поддерживает truecolor, delta автоматически упростит палитру, но часть оттенков станет неразличимой.
delta и другие просмотрщики diff
delta раскрашивает обычный unified diff и потому совместим с любым инструментом, который этот формат выдаёт. diff-so-fancy решает похожую задачу, но развивается медленнее и не умеет боковое сравнение. difftastic сравнивает синтаксические деревья и лучше показывает смысловые изменения, однако его вывод нельзя применить патчем. Встроенный git diff —color-moved тоже выделяет перемещения, но не добавляет номера строк.
На практике инструменты сочетают: difftastic — для разбора сложного рефакторинга, delta — для повседневного git diff и ревью. Настройка пейджера остаётся одной и той же, а выбор задаётся отдельной командой или переменной окружения.
git config --global diff.tool difftastic
git config --global difftool.difftastic.cmd 'difft "$LOCAL" "$REMOTE"'
git difftool --tool=difftastic HEAD~1
GIT_PAGER=delta git log -p
- delta — оформление и навигация по обычному патчу.
- diff-so-fancy — минимальная альтернатива без бокового режима.
- difftastic — смысловое сравнение, несовместимое с patch.
Если сомневаетесь, начните с delta: он не меняет рабочий процесс и легко отключается. difftastic стоит пробовать, когда рефакторинг затрагивает много файлов и обычный патч читать долго.
Ограничения и производительность
delta — только просмотрщик. Он не заменяет difftastic, который сравнивает синтаксические деревья, и не умеет разрешать конфликты. На очень больших файлах подсветка заметно замедляет вывод: отключайте её через large-file-threshold или запускайте git diff без пейджера.
- Не подходит для генерации патчей в скриптах.
- Не сохраняет побочные артефакты и ничего не пишет в репозиторий.
- Требует терминал; в CI вывод останется текстовым.
- Настройки хранятся в git config, а не в отдельном файле.
Диагностика
Типичные проблемы: git не использует пейджер, цвета выглядят блёкло, вывод ломается в tmux. Проверяйте окружение и версию терминала. В tmux может понадобиться режим truecolor и корректный TERM.
git config --get core.pager
echo "$GIT_PAGER $PAGER $TERM"
git --no-pager diff | delta
delta --version
Если git diff работает, а git log — нет, ищите алиас или локальную настройку репозитория: git config —show-origin —get core.pager покажет, откуда взялось значение. Для отладки запускайте delta напрямую и смотрите код возврата.
Итог
delta — минимальная настройка, которая делает ревью в терминале заметно приятнее: номера строк, боковое сравнение, подсветка перемещений и темы под ваш терминал. Начните с core.pager и interactive.diffFilter, остальное добавляйте по мере необходимости. Помните, что это оформление, а не анализ кода: смысл изменений всё равно проверяет человек.