Hunk 中文教程:让人和 Agent 看同一份终端 Diff
Hunk 把 Git、Jujutsu、Sapling、两个文件或 stdin patch 放进一个终端审查界面。它有多文件侧栏、split/unified 布局、历史浏览和行级评论,也能让 coding agent 通过本地会话读取审查结构、移动焦点和留下意见。它不会替你提交、合并或批准远程 PR。
v0.22.0,官方 changelog 标注 2026-09-10。0.22 加入交互式历史、多 commit 选择、线程回复与多行评论锚点。1. 选一个能核对来源的安装方法
Homebrew、mise、Nix 和官方 release 都有明确的包来源。官方 curl 脚本会安装到 ~/.hunk 并可能修改 shell PATH;只有发布了 SHA256SUMS 且本机有校验工具时才执行校验,否则警告后仍会继续。不要直接管道执行未读脚本。
curl -fsSLo install-hunk.sh https://hunk.dev/install.sh
less install-hunk.sh
DO_NOT_TRACK=1 HUNK_VERSION=0.22.0 \
sh install-hunk.sh --no-modify-path
~/.hunk/bin/hunk --version
npm 路线需要 Node.js 22+;standalone、Homebrew、mise 和 Nix 不需要 Node.js。x86-64 CPU 还要支持 SSE4.2。
2. 先直接运行,不改全局 pager
cd /path/to/test-repo
hunk diff
hunk show HEAD~1
hunk log
hunk diff 默认包含 working tree 的 untracked 文件。逐个检查侧栏文件、折行、行号、主题、退出后终端状态和大文件占位。管道或重定向时,Hunk 应输出静态文本而不是打开 TUI。
3. watch 与历史各有边界
hunk diff --watch 会观察文件系统并自动刷新;Jujutsu 和 Sapling 当前用轮询。hunk log 可浏览 commit 和选择连续范围,但它仍是只读历史界面,不负责 branch、merge 或 rebase。大仓库先观察 CPU 和文件描述符,再决定是否长期启用 watch。
4. 接 Agent 前先理解本地会话
TUI 启动后会向 loopback session daemon 注册。CLI 使用所有者私有的凭据和签名请求,官方源码在 Unix 上要求运行时目录为 0700、凭据文件为 0600,并拒绝符号链接或非所有者路径。先用结构化输出确认目标会话:
hunk session list
hunk session get --repo .
hunk session review --repo . --json
只有 agent 确实需要原始 diff 时才加 --include-patch。评论、reload 和删除评论会改变当前审查会话;批量操作前先展示计划。代码文件本身由 agent 的其他工具修改,Hunk 主要承担审查定位与意见记录。
5. 仓库扩展按本地代码处理
TypeScript extension 能加命令、VCS backend、pane,也能改写 changeset。用户目录扩展和显式 --extension 都应先读源码;仓库内 .hunk/extensions/ 只在明确信任后加载。临时排查可用 --no-extensions。
6. 更新查询不是完全无网络
curl 安装来源的版本解析、自动更新检查和 hunk update 默认访问 updates.hunk.dev,传请求来源与当前版本;官方文档说不发送安装 ID、仓库、主机名、cookie 或请求体。设置 HUNK_DISABLE_ANALYTICS=1 或 DO_NOT_TRACK=1 后直接查 GitHub。npm 和 Homebrew 则查询各自渠道。
7. 同类对比:Hunk 与 delta
相比 delta,Hunk 有多文件侧栏、交互 history、鼠标操作和 agent 评论会话,适合主动走查整个 changeset;delta 更接近成熟的 Git pager,启动和配置路径简单,也没有本地评论 daemon。只想美化 git diff/git show 时用 delta;要让人和 agent 围绕同一处改动协作时用 Hunk。
8. 最后再接入 Git
先用 alias,避免一次修改影响所有仓库:
git config --global alias.hdiff '-c core.pager="hunk pager" diff'
git config --global alias.hshow '-c core.pager="hunk pager" show'
确认 pager 在 TTY、管道、SSH、tmux 和大 diff 下都正常,再考虑设置 core.pager。回滚前记录原值。
9. 验证状态与商业边界
未验证:release checksum、安装脚本、终端兼容、渲染、VCS adapter、daemon 认证、agent 评论、性能、Windows 和社区扩展。README 底部有带 UTM 的 Modem 赞助链接,但 Hunk 核心没有付费套餐、账户、积分或转售门槛,因此保留并明确披露。
这里仅补原教程没有展开的事实和边界。安装命令与操作步骤仍以前文为准。
先判断这个项目是否适合你
近期变化与关注原因
0.22 系列把 hunk log 扩展成可交互历史浏览器,加入多 commit 选择、线程回复、持久多行选择与扩展元数据;稳定版 v0.22.0 于 2026-09-10 发布。
适合谁用
适合在终端里逐文件审查较大的本地改动、commit 或 patch,让人和 agent 围绕同一份 diff 留下定位准确的评论。只需要彩色分页输出时 delta 更轻;需要 AST 级结构比较时 difftastic 更合适;真正的合并、提交和远程 PR 审批仍由 VCS/托管平台完成。
原教程未展开的系统信息
架构与数据流
CLI 根据命令选择 Git、Jujutsu、Sapling、文件或 patch adapter,解析为统一 changeset,再由 OpenTUI/Pierre diff renderer 展示。live review 通过仅监听 loopback 的 session broker 暴露有限命令;caller、producer 与 daemon 使用 Ed25519 身份和带范围的 grant,Unix 运行时目录/凭据要求所有者私有权限。扩展运行在 Hunk 进程内,可改写 changeset 和添加命令,因此信任边界等同本地代码。
技术栈和运行条件
语言
TypeScript/Bun 应用,OpenTUI 终端渲染,VCS adapter 与本地 HTTP/WebSocket session broker
框架
OpenTUI、@pierre/diffs、Bun standalone binary、npm/Homebrew/mise/Nix 分发
关键依赖
- macOS、Linux 或 Windows;x86-64 需要 SSE4.2
- npm 安装需要 Node.js 22+;standalone/Homebrew/mise/Nix 不需要 Node.js
- Git 为常用流程所需,Jujutsu 与 Sapling 由对应 adapter 调用
运行环境
本地 TUI 和 loopback daemon;curl 安装来源的更新查询默认经过 updates.hunk.dev,可用 HUNK_DISABLE_ANALYTICS=1 或 DO_NOT_TRACK=1 改为直接 GitHub;MIT 许可
常见问题
Hunk 会把代码上传到云端吗?
核心 diff 和 live session 在本机运行。curl 安装来源的更新检查默认请求 updates.hunk.dev,只发送请求来源和当前版本字段;设置 HUNK_DISABLE_ANALYTICS=1 或 DO_NOT_TRACK=1 后改为直接查询 GitHub。
agent 能通过 Hunk 修改代码吗?
Hunk 的 session 命令主要读取审查结构、导航、reload 和管理评论;代码修改仍由 agent 的其他文件工具完成。reload 和评论会改变当前审查会话,所以仍应限定仓库和授权范围。
是否要立刻把 Hunk 设为全局 Git pager?
不建议第一步就全局修改。先直接运行 hunk diff,再用 Git alias 试验;确认管道、退出和终端恢复正常后,才考虑修改 core.pager。
Hunk 与 difftastic 的区别是什么?
Hunk 侧重多文件交互审查、历史浏览和评论;difftastic 用语法结构比较代码。大重排或结构变化可用 difftastic 辅助,完整 changeset 走查用 Hunk。
仓库里的 .hunk/extensions 可以直接加载吗?
不要盲目加载。TypeScript extension 在 Hunk 进程内执行,可添加命令和改写 changeset;只对已审阅并信任的仓库授权,临时禁用可使用 --no-extensions。