# difit **Repository Path**: mirrors_trending/difit ## Basic Information - **Project Name**: difit - **Description**: A lightweight command-line tool that spins up a local web server to display Git commit diffs in a GitHub-like Files changed view - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-07-15 - **Last Updated**: 2026-03-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

difit

English | 日本語 | 简体中文 | 한국어

![difit screenshot](docs/images/screenshot.png) **difit** 是一个让你使用 GitHub 风格查看器查看和审查本地 git 差异的 CLI 工具。除了清晰的视觉效果外,评论还可以作为 AI 提示进行复制。AI 时代的本地代码审查工具! ## ⚡ 快速开始 先试用一下 ```bash npx difit # 在 WebUI 中查看最新提交的差异 ``` 安装后使用 ```bash npm install -g difit difit # 在 WebUI 中查看最新提交的差异 ``` 使其可供 AI 代理使用 ```bash npx skills add yoshiko-pg/difit # 为代理添加 Skill ``` ## 🚀 使用方法 ### 基本用法 ```bash difit # 查看单个提交差异 difit [compare-with] # 比较两个提交/分支 ``` ### 单个提交审查 ```bash difit # HEAD(最新)提交 difit 6f4a9b7 # 特定提交 difit feature # feature 分支上的最新提交 ``` ### 比较两个提交 ```bash difit @ main # 与 main 分支比较(@ 是 HEAD 的别名) difit feature main # 比较分支 difit . origin/main # 比较工作目录与远程 main ``` ### 特殊参数 difit 支持常见差异场景的特殊关键字: ```bash difit . # 所有未提交的更改(暂存区 + 未暂存) difit staged # 暂存区更改 difit working # 仅未暂存的更改 ``` ### GitHub PR ```bash difit --pr https://github.com/owner/repo/pull/123 ``` `--pr` 模式会在内部执行 `gh pr diff --patch` 来获取补丁。 认证由 GitHub CLI 处理: 1. **先登录一次**(推荐):`gh auth login` 2. **令牌认证**(CI/非交互环境):设置 `GH_TOKEN` 或 `GITHUB_TOKEN` #### GitHub Enterprise Server 对于 Enterprise Server PR,请先让 GitHub CLI 认证到 Enterprise 主机: 1. `gh auth login --hostname YOUR-ENTERPRISE-SERVER` 2. 或设置 `GH_HOST=YOUR-ENTERPRISE-SERVER`,并配置 `GH_TOKEN` / `GITHUB_TOKEN` ### 标准输入 通过使用管道通过标准输入传递统一差异,您可以使用 difit 查看来自任何工具的差异。 ```bash # 查看来自其他工具的差异 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 参数(`` / `[compare-with]`)、`--pr` 或 `--tui` 时,difit 会按 Git/PR/TUI 模式处理,不会自动读取 stdin - 只有在未显式选择模式且 stdin 为 pipe/file/socket 时,才会自动进入标准输入模式 ## ⚙️ CLI 选项 | 标志 | 默认值 | 描述 | | --------------------- | --------- | ---------------------------------------------------------------------- | | `` | HEAD | 提交哈希、标签、HEAD~n、分支或特殊参数 | | `[compare-with]` | - | 要比较的可选第二个提交(显示两者之间的差异) | | `--pr ` | - | 要审查的 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 编码代理提供反馈: 1. **添加评论**:单击任何差异行上的评论按钮或拖动选择范围 2. **编辑评论**:使用编辑按钮编辑现有评论 3. **生成提示**:评论包含"复制提示"按钮,可为 AI 编码代理格式化上下文 4. **复制全部**:使用"复制所有提示"以结构化格式复制所有评论 5. **持久存储**:评论按每个提交保存在浏览器 localStorage 中 ### 评论提示格式 ```sh src/components/Button.tsx:L42 # 此行自动添加 使此变量名更具描述性 ``` 对于范围选择: ```sh src/components/Button.tsx:L42-L48 # 此行自动添加 此部分是不必要的 ``` ## 🤖 从代理调用 你可以通过以下命令安装 Skill,以便使用 difit 向用户请求审查: ```sh 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, Elixir - **系统语言**: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`) - 框架: - Ruby on Rails (`db/schema.rb`) - Laravel (`_ide_helper.php`) - Gradle (`gradle.lockfile`) - Python (`uv.lock`, `pdm.lock`) - 通用生成文件 (`*.generated.cs`, `*.generated.ts`, `*.generated.js`) - 基于内容的检测: - 包含 `@generated` 标记的文件 - 包含 `DO NOT EDIT` 标头的文件 - 特定语言的生成标头 (Go, Python 等) ## 🛠️ 开发 ```bash # 安装依赖 pnpm install # 启动开发服务器(带热重载) # 这会同时运行 Vite 开发服务器和 CLI,NODE_ENV=development pnpm run dev # 构建并启动生产服务器 pnpm run start # 构建生产版本 pnpm run build # 运行测试 pnpm test # 运行 typecheck、lint 和格式化 pnpm run check pnpm run format ``` ### 开发工作流程 - **`pnpm run dev`**:同时启动 Vite 开发服务器(带热重载)和 CLI 服务器 - **`pnpm run start `**:构建所有内容并启动生产服务器(用于测试最终构建) - **开发模式**:使用 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