返回市场
差异块

差异块

作者:peteretelej8 星标更新:2025-07-19

项目介绍

diffchunk

CI codecov PyPI version Python 3.10+ License: MIT Ruff uv

MCP服务器,使LLMs能够高效地浏览大型差异文件。LLMs无需顺序读取整个差异文件,而是可以通过基于模式的导航直接跳转到相关更改。

问题

大型差异文件超出LLM上下文限制,并浪费令牌在无关更改上。一个超过50k行的差异文件无法直接处理,手动拆分会丢失文件关系。

解决方案

配备4个导航工具的MCP服务器:

  • load_diff - 使用自定义设置解析差异文件(可选)
  • list_chunks - 显示块概述及文件映射(自动加载)
  • get_chunk - 获取特定块内容(自动加载)
  • find_chunks_for_files - 根据文件模式定位块(自动加载)

配置

前提条件: 安装uv(一个极快的Python包管理器),提供uvx命令。

添加到您的MCP客户端配置中:

{
  "mcpServers": {
    "diffchunk": {
      "command": "uvx",
      "args": ["--from", "diffchunk", "diffchunk-mcp"]
    }
  }
}

使用

现在您的AI助手可以处理之前导致Cline、Roocode、Cursor等工具失败的大规模变更集。

与AI助手一起使用

一旦配置完成,您的AI助手可以使用diffchunk分析大型提交、分支或差异。

以下是一些示例用例:

分支比较:

  • “检查develop分支中不在主分支中的所有更改是否有任何错误”
  • “告诉我我尚未合并的所有更改”
  • “在staging分支中添加了哪些新功能?”
  • “总结过去两周内此仓库的所有更改”

代码审查:

  • “使用diffchunk检查我的特性分支中的安全漏洞”
  • “使用diffchunk在合并到生产环境前查找任何破坏性更改”
  • “使用diffchunk审查这个大型重构以发现潜在问题”

变更分析:

  • “使用diffchunk显示需要运行的所有数据库迁移”
  • “使用diffchunk查找可能影响我们移动应用的API更改”
  • “使用diffchunk分析最近添加的所有新依赖项”

直接文件分析:

  • “使用diffchunk分析/tmp/changes.diff中的差异并查找任何错误”
  • “创建我的未提交更改的差异并进行审查”
  • “比较我的本地分支与远程分支并突出显示冲突”

提示:AI助手规则

添加到您的AI助手的自定义指令以实现自动使用:

当审查大型变更集或Git提交时,使用diffchunk处理大型差异文件。
根据需要创建临时差异文件和跟踪文件,并在分析后清理。

工作原理

当您要求AI助手分析更改时,它会战略性地使用diffchunk的工具:

  1. 创建差异文件(例如,git diff main..develop > /tmp/changes.diff)基于您的问题
  2. **使用list_chunks**获取差异结构概览及总范围
  3. **使用find_chunks_for_files**当您询问特定文件类型的相关部分时定位它们
  4. **使用get_chunk**查看特定部分而无需将整个差异加载到上下文中
  5. 系统地追踪通过大型变更集,逐块分析
  6. 分析完成后清理临时文件

这使得您的AI助手能够处理通常会导致其他工具崩溃的大型差异文件,同时提供全面分析而不丢失上下文。

工具使用模式

首先概览:

list_chunks("/tmp/changes.diff")
# → 跨越12个文件的5个块,总计3,847行

针对特定文件:

find_chunks_for_files("/tmp/changes.diff", "*.py")
# → [1, 3, 5] - Python文件块

get_chunk("/tmp/changes.diff", 1)
# → 第一个Python块的内容

系统化分析:

# 按顺序处理每个块
get_chunk("/tmp/changes.diff", 1)
get_chunk("/tmp/changes.diff", 2)
# ... 继续处理所有块

配置

路径要求

  • 仅绝对路径/home/user/project/changes.diff
  • 跨平台:Windows (C:\path) 和 Unix (/path)
  • 家目录扩展~/project/changes.diff

自动加载默认设置

工具自动加载优化设置:

  • max_chunk_lines: 1000
  • skip_trivial: true(仅空白字符)
  • skip_generated: true(锁定文件,构建工件)

自定义设置

使用load_diff进行非默认行为:

load_diff(
    "/tmp/large.diff",
    max_chunk_lines=2000,
    include_patterns="*.py,*.js",
    exclude_patterns="*test*"
)

支持的格式

  • Git差异输出(git diffgit show
  • 统一差异格式(diff -u
  • 单个差异中的多个文件
  • 二进制文件更改指示符

性能

  • 高效处理10万行以上的差异文件
  • 内存高效的流式传输
  • 文件更改时自动重新加载

文档

  • 设计 - 架构和实现细节
  • 贡献 - 开发设置和工作流程

许可证

MIT