difit
v3.1.15
Published
A lightweight command-line tool that spins up a local web server to display Git commit diffs in a GitHub-like Files changed view
Maintainers
Readme

difit 是一个让你使用 GitHub 风格查看器查看和审查本地 git 差异的 CLI 工具。除了清晰的视觉效果外,评论还可以作为 AI 提示进行复制。AI 时代的本地代码审查工具!
⚡ 快速开始
先试用一下
npx difit # 在 WebUI 中查看最新提交的差异安装后使用
npm install -g difit
difit # 在 WebUI 中查看最新提交的差异使其可供 AI 代理使用
npx skills add yoshiko-pg/difit # 为代理添加 Skill🚀 使用方法
基本用法
difit <target> # 查看单个提交差异
difit <target> [compare-with] # 比较两个提交/分支单个提交审查
difit # HEAD(最新)提交
difit 6f4a9b7 # 特定提交
difit feature # feature 分支上的最新提交比较两个提交
difit @ main # 与 main 分支比较(@ 是 HEAD 的别名)
difit feature main # 比较分支
difit . origin/main # 比较工作目录与远程 main特殊参数
difit 支持常见差异场景的特殊关键字:
difit . # 所有未提交的更改(暂存区 + 未暂存)
difit staged # 暂存区更改
difit working # 仅未暂存的更改GitHub PR
difit --pr https://github.com/owner/repo/pull/123--pr 模式会在内部执行 gh pr diff --patch 来获取补丁。
认证由 GitHub CLI 处理:
- 先登录一次(推荐):
gh auth login - 令牌认证(CI/非交互环境):设置
GH_TOKEN或GITHUB_TOKEN
GitHub Enterprise Server
对于 Enterprise Server PR,请先让 GitHub CLI 认证到 Enterprise 主机:
gh auth login --hostname YOUR-ENTERPRISE-SERVER- 或设置
GH_HOST=YOUR-ENTERPRISE-SERVER,并配置GH_TOKEN/GITHUB_TOKEN
标准输入
通过使用管道通过标准输入传递统一差异,您可以使用 difit 查看来自任何工具的差异。
# 查看来自其他工具的差异
diff -u file1.txt file2.txt | difit
# 审查保存的补丁
cat changes.patch | difit
# 与合并基础比较
git diff --merge-base main feature | difit
# 将整个现有文件视为新添加进行审查
git diff -- /dev/null path/to/file | difit
# 显式标准输入模式
git diff --cached | difit -标准输入模式按“意图优先”规则选择:
-会显式启用标准输入模式- 当提供 positional 参数(
<target>/[compare-with])、--pr或--tui时,difit 会按 Git/PR/TUI 模式处理,不会自动读取 stdin - 只有在未显式选择模式且 stdin 为 pipe/file/socket 时,才会自动进入标准输入模式
⚙️ CLI 选项
| 标志 | 默认值 | 描述 |
| --------------------- | --------- | ---------------------------------------------------------------------- |
| <target> | HEAD | 提交哈希、标签、HEAD~n、分支或特殊参数 |
| [compare-with] | - | 要比较的可选第二个提交(显示两者之间的差异) |
| --pr <url> | - | 要审查的 GitHub PR URL(例如:https://github.com/owner/repo/pull/123) |
| --port | 4966 | 首选端口;如果被占用则回退到 +1 |
| --host | 127.0.0.1 | 绑定服务器的主机地址(使用 0.0.0.0 进行外部访问) |
| --no-open | false | 不自动打开浏览器 |
| --mode | split | 显示模式:unified 或 split |
| --tui | false | 使用终端 UI 模式而不是 WebUI |
| --clean | false | 启动时清除所有现有评论和已查看的文件 |
| --include-untracked | false | 自动将 untracked 文件包含在 diff 中(仅在 . 或 working 时有效) |
| --keep-alive | false | 浏览器断开后保持服务器运行(使用 Ctrl+C 手动停止) |
💬 评论系统
difit 包含一个审查评论系统,便于向 AI 编码代理提供反馈:
- 添加评论:单击任何差异行上的评论按钮或拖动选择范围
- 编辑评论:使用编辑按钮编辑现有评论
- 生成提示:评论包含"复制提示"按钮,可为 AI 编码代理格式化上下文
- 复制全部:使用"复制所有提示"以结构化格式复制所有评论
- 持久存储:评论按每个提交保存在浏览器 localStorage 中
评论提示格式
src/components/Button.tsx:L42 # 此行自动添加
使此变量名更具描述性对于范围选择:
src/components/Button.tsx:L42-L48 # 此行自动添加
此部分是不必要的🤖 从代理调用
你可以通过以下命令安装 Skill,以便使用 difit 向用户请求审查:
npx skills add yoshiko-pg/difit代理编辑代码后,将会启动 difit 服务器。
🎨 语法高亮语言
- JavaScript/TypeScript:
.js,.jsx,.ts,.tsx - Web 技术:HTML, CSS, JSON, XML, Markdown
- Shell 脚本:
.sh,.bash,.zsh,.fish - 后端语言:PHP, SQL, Ruby, Java, Scala, Perl
- 系统语言:C, C++, C#, Rust, Go
- 移动语言:Swift, Kotlin, Dart
- 基础设施即代码:Terraform (HCL)
- 其他:Python, Protobuf, YAML, Solidity, Vim Script
🔍 自动折叠文件
difit 自动识别并折叠某些文件以保持视图整洁:
- 已删除文件:已删除的文件不需要详细审查,因此自动折叠
- 自动生成文件:自动生成的代码默认折叠。这包括:
- 锁定文件 (
package-lock.json,go.mod,Cargo.lock,Gemfile.lock等) - 压缩文件 (
*.min.js,*.min.css) - 源映射 (
*.map) - 生成的代码:
- Orval (
*.msw.ts,*.zod.ts,*.api.ts) - Dart (
*.g.dart,*.freezed.dart) - C# (
*.g.cs,*.designer.cs) - Protobuf (
*.pb.go,*.pb.cc,*.pb.h)
- Orval (
- 框架:
- Ruby on Rails (
db/schema.rb) - Laravel (
_ide_helper.php) - Gradle (
gradle.lockfile) - Python (
uv.lock,pdm.lock)
- Ruby on Rails (
- 通用生成文件 (
*.generated.cs,*.generated.ts,*.generated.js) - 基于内容的检测:
- 包含
@generated标记的文件 - 包含
DO NOT EDIT标头的文件 - 特定语言的生成标头 (Go, Python 等)
- 包含
- 锁定文件 (
🛠️ 开发
# 安装依赖
pnpm install
# 启动开发服务器(带热重载)
# 这会同时运行 Vite 开发服务器和 CLI,NODE_ENV=development
pnpm run dev
# 构建并启动生产服务器
pnpm run start <target>
# 构建生产版本
pnpm run build
# 运行测试
pnpm test
# 运行 typecheck、lint 和格式化
pnpm run check
pnpm run format开发工作流程
pnpm run dev:同时启动 Vite 开发服务器(带热重载)和 CLI 服务器pnpm run start <target>:构建所有内容并启动生产服务器(用于测试最终构建)- 开发模式:使用 Vite 的开发服务器进行热重载和快速开发
- 生产模式:提供构建的静态文件(供 npx 和生产构建使用)
🏗️ 架构
- CLI:使用 Commander.js 进行参数解析,具有全面的验证
- 后端:Express 服务器配合 simple-git 进行差异处理
- GitHub 集成:使用 GitHub CLI(
gh pr diff --patch)获取 PR 补丁 - 前端:React 18 + TypeScript + Vite
- 样式:Tailwind CSS v4,带有类似 GitHub 的深色主题
- 语法高亮:Prism.js 带动态语言加载
- 测试:Vitest 用于单元测试,测试文件与源代码放在一起
- 质量:oxlint、oxfmt、lefthook 预提交钩子
📋 要求
- Node.js ≥ 21.0.0
- 包含要审查的提交的 Git 仓库
- 使用
--pr模式时需要 GitHub CLI(gh)
📄 许可证
MIT
