一款命令行工具,对项目代码质量打分,覆盖 14 种语言,并按文件给出排名报告。
Rafaelpta/dupehound
本地运行、结果确定的重复代码检测工具,可识别被 AI 重复编写的函数,即使标识符已被改名。
- Star
- 102
- Fork
- 10
- 未关闭 Issue
- 3
- 最近提交
- 2个月前
这是什么?
dupehound 是一个命令行重复代码检测工具,面向大量代码由 AI 智能体编写的代码库。它使用 tree-sitter 解析每个函数,将标识符和字面量归一化后对代码结构做指纹,因此即使函数被改名,副本仍能与原函数匹配。
工具提供三个命令:scan 输出重复代码簇和仓库级别的 slop 分数;history 沿 git 历史绘制重复率曲线,定位重复开始增长的时间点;check 用于 CI 或 pre-commit,当改动与已有代码重复时失败退出,并指出可复用的原函数。整个过程完全离线,无需 API 密钥或 AI 模型,同一输入每次结果一致。
项目还提供 MCP 服务模式,让编码智能体在编辑过程中直接调用 check 和 scan 工具。支持的语言包括 TypeScript、Python、Rust、Go、Java、C#、Kotlin 等。
核心功能
- 01通过对代码结构而非文本做指纹,识别改名后的重复副本
- 02scan 输出重复代码簇和仓库级 slop 分数
- 03history 沿 git 提交记录绘制重复率变化曲线
- 04check 在 CI 和 pre-commit 中拦截新增的重复代码
- 05完全离线、结果确定,无需 AI 或网络
- 06以 MCP 工具形式提供 check 和 scan,供编码智能体调用
适用场景
- 防止 AI 编码智能体重复实现仓库中已有的函数
- 在 CI 中拦截合并请求里新增的重复代码
- 追踪大型代码库历史中重复代码的增长趋势
快速上手
- 1
使用 cargo 安装
cargo install dupehound - 2
对目录运行重复代码扫描
dupehound scan [path]
使用前须知
- history 和 check 命令需要 git 位于 PATH 中。
- --include-classes 和 --containment 参数为实验性功能,需主动开启。
收录于专题
标签
常见问题
- dupehound 是什么?
- 本地运行、结果确定的重复代码检测工具,可识别被 AI 重复编写的函数,即使标识符已被改名。 dupehound 是一个命令行重复代码检测工具,面向大量代码由 AI 智能体编写的代码库。它使用 tree-sitter 解析每个函数,将标识符和字面量归一化后对代码结构做指纹,因此即使函数被改名,副本仍能与原函数匹配。
- dupehound 可以免费使用吗?用的什么许可证?
- dupehound 以 MIT 许可证开源。用于商业产品前,请先确认许可证条款。
- dupehound 还在维护吗?
- 半年内有更新。dupehound 最近一次提交是在 2026年9月21日。
- dupehound 适合用来做什么?
- 防止 AI 编码智能体重复实现仓库中已有的函数 在 CI 中拦截合并请求里新增的重复代码 追踪大型代码库历史中重复代码的增长趋势
- dupehound 怎么安装和运行?
- 使用 cargo 安装: cargo install dupehound 对目录运行重复代码扫描: dupehound scan [path]
- 在哪里获取 dupehound?
- 源代码和安装说明在 GitHub 上:https://github.com/Rafaelpta/dupehound
概要由 AI 根据项目 README 生成;GitHub 数据每日更新。
相关项目
7295330TypeScriptMIT更新于 2个月前
自托管的代码质量与安全平台,扫描项目中的缺陷、漏洞和可维护性问题,并可在 CI 流程中设置质量门禁。
1.1万+28 本周2244JavaLGPL-3.0更新于 前天
AI 代码审查命令行工具,结合确定性流程与 LLM Agent,对 Git 差异生成精确到行的审查意见。
5万+451 本周3637GoApache-2.0维护活跃更新于 昨天
Ix 将代码仓库解析为持久化的符号、调用与导入关系图,供开发者和 AI 编程代理查询结构。
1142+4 本周92TypeScriptApache-2.0维护活跃更新于 20小时前
开源 AI 代码审查工具,可用任意大模型对 GitHub PR 和本地分支改动进行审查。
464+8 本周45PythonMIT维护活跃更新于 上个月
将整个代码仓库打包成单个 AI 友好文件,方便输入给 Claude、ChatGPT 等大模型的命令行与网页工具。
2.9万+84 本周1627TypeScriptMIT更新于 前天