53 инструментов разработчика, всегда актуальны — новые выпуски появляются в apt в течение нескольких часов. Присоединиться к Discord

📅 С для доступа к apt-зеркалу потребуется подписка. Посмотреть цены · 🆓 Есть вечно бесплатное зеркало

🔀 Установка последней версии difftastic в Debian

Структурный diff, который сравнивает файлы по синтаксису, а не построчно

Последняя версия: 0.70.0 · обновлено 2026-08-18
ИсточникВерсия
deb.griffo.io0.70.0 ✅
Официальный Debian🚫 не упакован
← Вернуться на главную
📌 Устанавливаете на конкретный выпуск? Debian 12 (bookworm) · Debian 13 (trixie) · Debian 14 (forky) · Debian Sid

Что такое difftastic?

difftastic — команда называется difft — это структурный diff. Вместо построчного сравнения он разбирает оба файла с помощью tree-sitter, строит синтаксическое дерево для каждой стороны и показывает, какие именно части синтаксиса изменились. Переформатирование блока, перенос списка аргументов или сдвинутая скобка перестают быть изменением, а переименованная переменная среди переформатированного кода сразу бросается в глаза.

🚀 Почему важна последняя версия: difftastic понимает код через грамматики tree-sitter, а они поставляются вместе с каждым выпуском. Годовалая сборка разбирает языки прошлого года: новый синтаксис превращается в ошибки разбора, а файл со слишком многими ошибками молча откатывается к обычному построчному diff — ровно то, от чего вы и ставили difftastic. Каждый выпуск также улучшает алгоритм и расход памяти на больших файлах.

⚡ Ключевые возможности difftastic

🌳 Diff с учётом синтаксиса

Обе стороны разбираются в синтаксические деревья и сравниваются как структура: шум форматирования исчезает, реальные изменения видны.

🧩 Более 30 языков

Rust, Python, TypeScript, Go, C, C++, Java, Ruby, YAML, JSON, HTML, CSS, Markdown и многие другие — difft --list-languages печатает полный список с расширениями.

🪟 Рядом или в одну колонку

--display выбирает side-by-side, side-by-side-show-both, inline или машиночитаемый JSON.

🔗 Прямая замена в Git

Работает как внешняя команда diff для git, а также для Mercurial, Jujutsu и Fossil.

🚦 Честный откат

Неизвестное расширение, огромный файл или слишком много ошибок разбора — вместо отказа будет построчный diff с подсветкой по словам.

🗂️ Каталоги и конфликты

Сравнивайте два каталога одной командой или передайте файл с маркерами конфликта слияния и читайте конфликт как diff.

🚀 Всегда впереди официальных архивов: Debian и Ubuntu замораживают версии пакетов при выпуске релиза — этот репозиторий публикует новые версии обычно в течение нескольких часов. Простое apt upgrade держит вас на последней версии.

📦 Установка из deb.griffo.io

Запуск команд

Шаг 1: Добавить репозиторий

sudo install -d -m 0755 /etc/apt/keyrings
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | sudo gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(lsb_release -sc 2>/dev/null) main" | sudo tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
sudo apt update
install -d -m 0755 /etc/apt/keyrings
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(lsb_release -sc 2>/dev/null) main" | tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
apt update
sudo apt install extrepo
sudo extrepo enable griffo
sudo apt update

🆓 Есть вечно бесплатное зеркало. deb-free.griffo.io раздаёт пакеты бесплатно навсегда — без аккаунта, без подписки, не более 2 месяцев позади upstream, исправления безопасности сразу. Сейчас там cliamp, Ghostty, lazydocker, Oh My Posh и Zed; difftastic среди них нет, поэтому репозиторий выше — единственный способ установить его сегодня; попросите, и его можно добавить.

Как работает бесплатное зеркало →

🧩 О варианте extrepo. extrepo — штатный инструмент Debian для внешних репозиториев: он создаёт файл sources и устанавливает ключ подписи, предварительно сверив его с подписанными метаданными. Этот репозиторий зарегистрирован в нём как griffo, а бесплатное навсегда зеркало — как griffo-free, поэтому в Debian (bookworm, trixie, forky и sid) команды выше и есть вся настройка.

extrepo настраивает только файл sources и ключ — учётные данные подписки по-прежнему прописываются в /etc/apt/auth.conf.d/deb.griffo.io.conf. Ubuntu не поддерживается, так как extrepo публикует метаданные только для выпусков Debian: там используйте команды с sudo или от root.

Шаг 2: Установить difftastic

# Установить последнюю версию difftastic
sudo apt install difftastic

# Проверить установку
difft --version
# Установить последнюю версию difftastic
apt install difftastic

# Проверить установку
difft --version

Шаг 3: Подключить к git

# Сравнить два файла напрямую
difft old.py new.py

# Или пусть git вызывает difftastic для каждого diff
git config --global diff.external difft

# Обычный git diff по-прежнему в одном флаге
git --no-ext-diff diff

# Man-страница входит в пакет
man difft

🎯 Базовые примеры использования

Сравнение файлов и каталогов:

# Два файла, рядом
difft before.rs after.rs

# Одна колонка, ближе к традиционному diff
difft --display inline before.ts after.ts

# Два каталога, пропуская неизменившиеся файлы
difft old/ new/ --skip-unchanged --sort-paths

# Какие языки понимает эта сборка?
difft --list-languages

В роли git diff:

# Разово: difftastic только для этого diff
GIT_EXTERNAL_DIFF=difft git diff

# Структурные diff по всей истории
GIT_EXTERNAL_DIFF=difft git log -p --ext-diff

# Зарегистрировать как difftool
git config --global difftool.difftastic.cmd 'difft "$LOCAL" "$REMOTE"'
git difftool --tool difftastic

# Псевдоним git для структурного лога
git config --global alias.dlog '!GIT_EXTERNAL_DIFF=difft git log -p --ext-diff'

Настройка вывода:

# Игнорировать изменения только в комментариях
difft --ignore-comments a.go b.go

# Больше контекста и табуляция в два пробела
difft --context 5 --tab-width 2 a.py b.py

# Для скриптов: было ли синтаксическое изменение?
difft --check-only --exit-code a.json b.json

# Значения по умолчанию для каждого запуска — из окружения
export DFT_DISPLAY=inline DFT_BACKGROUND=light

🔧 Интеграция с другими инструментами

difftastic встраивается в инструменты, которые и так показывают вам diff:

  • git: GIT_EXTERNAL_DIFF, diff.external или запись difftool — с --ext-diff это работает и для git log -p, и для git show
  • Jujutsu: задайте его командой diff в jj и получите структурные diff в Git-совместимом процессе
  • Mercurial и Fossil: оба принимают внешнюю команду diff, так что один бинарник обслуживает все ваши репозитории
  • Переменные окружения: DFT_DISPLAY, DFT_BACKGROUND, DFT_WIDTH и прочие задают ваши значения по умолчанию
  • CI и скрипты: --check-only с --exit-code отвечает «изменился ли синтаксис?» без вывода diff, а --display json сделан для разбора

🚀 Почему стоит выбрать deb.griffo.io?

📊 Сравнение репозиториев:
  • Официальный Debian: вообще не содержит difftastic — на стандартной системе устанавливать нечего
  • cargo install difftastic: свежая версия, но это долгая сборка с множеством грамматик tree-sitter, вне apt и без man-страницы
  • Архив upstream: официальный бинарник, который придётся скачивать вручную к каждому выпуску
  • deb.griffo.io: последняя версия с автоматическими обновлениями

📦 Репозиторий сборки пакета

Пакеты для Debian собираются и поддерживаются автоматически в этом репозитории GitHub:

🔗 Похожие пакеты

Также доступны в deb.griffo.io:

🎯 Идеально подходит для: разбора рефакторинга, который перенёс код, чтения коммита форматтера без боли в глазах, различения настоящего изменения API и переотступов, и любой кодовой базы, где «файл изменился целиком» обычно неправда.

📦 Последние релизы этого репозитория

❓ Часто задаваемые вопросы

Есть ли difftastic в официальных репозиториях Debian?

Нет, difftastic не упакован в официальных архивах Debian. Этот репозиторий сейчас единственный источник apt и предлагает difftastic 0.70.0.

Как установить последнюю версию difftastic в Debian?

Добавьте репозиторий deb.griffo.io один раз по инструкции выше, затем выполните: sudo apt install difftastic. Новые версии приходят через обычный sudo apt upgrade.

Подписаны ли пакеты и как они собираются?

Каждый пакет подписан GPG-ключом репозитория (EA0F721D231FDD3A0A17B9AC7808B4DD62C41256) и собирается из релизов upstream в публичных репозиториях GitHub, которые может проверить любой.

Какие версии Debian поддерживаются?

Debian 12 Bookworm, Debian 13 Trixie, Forky и Sid.