53 个开发者工具,始终保持最新 — 上游每次发布后数小时内即可通过 apt 获取。 加入 Discord

📅 自 起,使用本 apt 镜像将需要订阅。 查看价格 · 🆓 有一个永久免费的镜像

🔀 在 Ubuntu 上安装最新版 difftastic

按语法而非按行比较文件的结构化 diff 工具

最新版本:0.70.0 · 更新于 2026-08-18
来源版本
deb.griffo.io0.70.0 ✅
官方 Ubuntu🚫 未收录
← 返回首页

什么是 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

既可作为 git 的外部 diff 命令,也同样适用于 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

🆓 有一个永久免费的镜像。 deb-free.griffo.io 永久免费提供软件包 — 无需账号、无需订阅,最多落后上游 2 个月,安全修复立即发布。目前收录 cliamp、Ghostty、lazydocker、Oh My Posh 和 Zed;difftastic 不在其中,因此今天只能通过上面的仓库安装 — 提出请求即可将其加入。

免费镜像的工作方式 →

第 2 步:安装 difftastic

# 安装最新版 difftastic
sudo apt install difftastic

# 验证安装
difft --version
# 安装最新版 difftastic
apt install difftastic

# 验证安装
difft --version

第 3 步:接入 git

# 直接比较两个文件
difft old.py new.py

# 或者让 git 在每次 diff 时调用 difftastic
git config --global diff.external difft

# 原生的 git diff 依然只差一个参数
git --no-ext-diff diff

# 手册页随软件包一起安装
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 使用:

# 临时:仅本次 diff 使用 difftastic
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_DIFFdiff.external 或一个 difftool 配置;加上 --ext-diff 还能用于 git log -pgit show
  • Jujutsu:jj 中把它设为 diff 命令,就能在兼容 Git 的工作流里获得结构化 diff
  • Mercurial 与 Fossil:两者都支持外部 diff 命令,同一个二进制文件即可服务你所有仓库
  • 环境变量:DFT_DISPLAYDFT_BACKGROUNDDFT_WIDTH 等变量一次设定好默认行为
  • CI 与脚本:--check-only 搭配 --exit-code 可在不输出 diff 的情况下回答“语法是否变了”,而 --display json 本就为解析而设计

🚀 为什么选择 deb.griffo.io?

📊 仓库对比:
  • 官方 Ubuntu:完全没有 difftastic 这个软件包——标准系统上无从安装
  • cargo install difftastic:版本较新,但要编译大量 tree-sitter 语法,装在 apt 之外,也没有手册页
  • 上游压缩包:官方二进制文件,但每个版本都要手动重新下载
  • deb.griffo.io:最新版本,并自动更新

📦 软件包构建仓库

Ubuntu 软件包在这个 GitHub 仓库中自动构建和维护:

🔗 相关软件包

deb.griffo.io 同样提供:

🎯 特别适合: 审查移动了代码位置的重构、读懂格式化工具提交的改动、把真正的 API 变更与重新缩进区分开,以及任何“整个文件都变了”通常并不成立的代码库。

📦 本仓库最近发布

❓ 常见问题

difftastic 在官方 Ubuntu 软件源中吗?

不在, 官方 Ubuntu 源没有打包 difftastic。本仓库目前是唯一的 apt 来源,提供 difftastic 0.70.0。

如何在 Ubuntu 上安装最新版 difftastic?

按上方说明一次性添加 deb.griffo.io 仓库,然后运行:sudo apt install difftastic。之后通过常规的 sudo apt upgrade 获取新版本。

软件包是否有签名?如何构建?

每个软件包都使用仓库的 GPG 密钥(EA0F721D231FDD3A0A17B9AC7808B4DD62C41256)签名,并基于上游发布在公开的 GitHub 仓库中构建,任何人都可以审查。

支持哪些 Ubuntu 版本?

Ubuntu 22.04 Jammy、24.04 Noble、25.10 Questing 和 26.04 Resolute。