怎么给仓库做代码查重:从建任务到看出重复函数

简介: 要知道一个仓库里有多少代码和其他项目重复,可以在 AngusGit 的代码溯源里建一个溯源任务:选好目标仓库和被溯源仓库,设置相似度阈值并运行,再从重复率、相似度分档一路看到具体重复的文件和函数。报告可以导出,跑不出结果时也能对照排查。

这篇讲怎么查一个仓库里的代码和其他项目重复了多少。看完你可以建一个代码溯源任务,选好要检查的仓库和拿来比对的仓库,设好相似度阈值,从重复率、相似度分档看到具体重复的文件和函数。

两个说法会贯穿全文:溯源目标 是你要检查的代码,这里用的是一个仓库;被溯源仓库是拿来跟它比对的仓库,一次最多选 50 个。

代码溯源在团队版和企业版中提供;社区版没有 溯源 菜单。

一次查重:创建溯源,完成后看重复率,再对比代码并决定怎么处理

对照时以已经跑完的任务 fixture: source vs dup (repo) 为例:溯源目标是仓库 xlliu/test-trace-source-example,被溯源仓库是 xlliu/test-trace-dup-example。溯源列表页上另外三条任务用的是同一套示例数据,分别是以文件 InvoicePriceCalculator 为目标、以函数 calculateInvoiceTotal 为目标,以及和 xlliu/test-trace-unique-example 做的对照。

1. 创建任务

  1. 打开代码溯源

    在侧栏点 高级 → 溯源,进入标题为 代码溯源 的页面,再点右上角的 创建溯源,打开一个分四步的创建向导。

  2. 第 1 步:基本信息

    溯源名称 必填,写清这次查的是什么,例如「source vs dup 查重」;溯源描述 可以不填。

  3. 第 2 步:选择目标

    溯源目标 有 仓库、文件、代码块、函数 四种。要查整个仓库就选 仓库,本例选的是 test-trace-source-example,分支可以不选。下方的 去重重复文件 开关会自动识别并排除重复的文件,一般保持默认即可。

  4. 第 3 步:设置检查语言和相似度阈值

    这一步在界面上的标题是 配置参数。检查语言 保持不勾选,界面说明是「不选将自动检查对比所有语言」。相似度阈值有两个:文件相似度阈值 默认 80%,代码块相似度阈值 默认 90%。第一次运行先用默认值。

  5. 第 4 步:选择被溯源仓库

    这一步在界面上的标题是 选择仓库。在搜索框里找到 test-trace-dup-example,点 添加,右上角会显示已选数量,例如 1 / 50。注意不要误选名字带 -Fork 的同名仓库。下方的 配置摘要 汇总了前面所有的选择,核对一遍再继续。

  6. 创建并执行

    点 创建并执行,任务创建后马上开始运行。如果只点 创建,任务会停在 等待中,之后要在列表里点 开始溯源 才会运行。

创建溯源第 4 步:已添加 test-trace-dup-example,摘要里目标仓库是 test-trace-source-example

2. 几个参数怎么选

第 3 步和高级配置里的参数,大多数情况下保持默认就行。下表列出每个参数的默认值,以及什么时候需要改:

参数 默认 什么时候改
检查语言 不勾选,检查所有语言 一般不用改,只想看某一种语言时再勾选
文件相似度阈值 80% 想看更多「有点像」的文件就调低;只想看几乎一样的就调高
代码块相似度阈值 90% 同上,作用在代码片段上
文件编码 UTF-8 老项目源码是 GBK 编码时,改成 GBK
忽略标识符差异 关闭 怀疑有人复制代码后改了变量名、函数名时打开
忽略字面量差异 关闭 想找出字符串、数字不同但逻辑一样的代码时打开
启用仓库缓存 启用 同一批仓库要反复查时保持打开

其中两项需要多说一句。文件编码 要和源码的实际编码一致:如果 GBK 编码的源码仍按 UTF-8 读取,中文注释会变成乱码,影响比对结果。启用仓库缓存 打开时,下次检查同一批仓库不用重新克隆代码;关掉之后,任务结束时会删除这次克隆下来的代码。

阈值滑块每次调整 5%。建议先用默认值跑一次,看过结果再决定调高还是调低。如果一开始就把阈值调得很低,结果会非常多,反而不好找重点。

另外,以 . 开头的目录、node_modules 和 target 不参与比对,目前也没有设置其他排除目录的选项。

3. 等任务跑完

在任务列表里,任务的状态会依次经过 等待中、运行中、已完成;执行出错会变成 失败,被手动停止则显示 已取消。运行中的任务可以点 停止溯源 中止。

耗时取决于仓库大小和被溯源仓库的数量:仓库越大、选的仓库越多,跑得越久。任务运行期间可以离开页面,稍后回来再看。

4. 看结果:从整体到具体的函数

任务变成 已完成 后,点 查看详情 进入详情页。详情页有 溯源结果 和 执行日志 两个页签,下面按从整体到具体的顺序看 溯源结果。

先看整体数字。 顶部依次是 溯源仓库数、溯源文件数、代码行数、重复率 和 唯一率。重复率只是一个整体提示:同一个团队的项目常用相同的框架和模板,本来就会有一部分相似代码,所以重复率不为零很正常。

再看分档。 每处匹配按相似度分进五档:完全相同(95–100%)、高度相似(80–95%)、中等相似(60–80%)、低度相似(40–60%)和 唯一代码(0–40%)。最值得看的是 完全相同 和 高度相似 这两档。

然后看具体的匹配。 结果列表可以 按相似度排序,让最像的排在最前面;在「搜索仓库或文件...」框里输入目录或文件名,可以只看相关的匹配。每条匹配会显示两边的文件和 相似度分数,点 对比代码 就能展开两边的代码,有两种视图:

  • 并排对比:左边是 源文件,右边是 溯源文件,适合看两段代码的整体结构。
  • 统一视图:上下排列,适合看细小的差别。

以 source vs dup 为例,结果里没有 完全相同 的匹配,两条都落在 高度相似。点开 InvoicePriceCalculator.java 的 对比代码,在 并排对比 里可以看到左右两边都是 public class InvoicePriceCalculator,相似度分数 是 86.86%。

并排对比 InvoicePriceCalculator.java:左边源文件,右边溯源文件

最后逐条判断。 看到重复代码后,先弄清楚它为什么重复,再决定怎么处理。常见的有三种情况:

看到的情况 重复原因 建议处理方式
框架生成的代码、配置模板 脚手架或统一模板生成 正常重复,不用处理
几个项目里各复制了一份的工具函数 历史复制粘贴 考虑抽成公共模块,通过拉取请求重构
不该出现在这里的业务代码 跨项目误拷或违规复用 找相关负责人确认来源和是否需要删除

5. 导出和重新运行

导出报告。 在任务上点 导出报告,选好 导出格式 和 导出范围(全部结果,或当前已加载的结果)。格式有 PDF (HTML)、Excel、JSON 和 Markdown 四种,想先看效果可以点 预览报告。其中有两点要注意:PDF (HTML) 导出的是一个 HTML 文件,用浏览器打开后再打印成 PDF;Excel 目前导出的内容是 CSV 格式,用 Excel 打开时可能提示格式与扩展名不一致,所以需要表格时,建议先导出 Markdown 或 JSON 再转换。

重新运行。 代码有了新提交、想再查一次时,点 重新溯源。只有 等待中 的任务可以修改参数;已经跑过的任务如果想换参数,新建一个任务会更清楚。

6. 跑不出结果时怎么排查

任务失败或结果不对劲时,可以按下表对照排查:

你看到的 原因 怎么处理
侧栏没有 溯源 菜单 社区版不包含代码溯源,或当前账号没有代码溯源权限 确认版本;或请管理员开通权限(见表后)
第 4 步不能继续,提示「请至少选择一个被溯源仓库」 没有添加被溯源仓库 至少添加一个
状态变成 失败 执行中出错,例如拉取某个仓库的代码失败 打开 执行日志 看具体原因
已完成,但几乎没有匹配 阈值太高,或者两边确实不像 两个阈值各调低 10%,新建任务再跑一次
勾选了某种语言后结果为空 语言筛选和仓库里的实际文件对不上 检查语言 不勾选,检查所有语言
中文注释附近的比对结果很奇怪 源码不是 UTF-8 编码 文件编码 改成 GBK 后重新创建任务

如果是权限问题,请管理员在成员权限里打开 代码溯源 这一项,它的说明是「允许使用代码溯源进行代码查重」。

常见问题

能不能推送代码后自动查重?

不能。代码溯源每次都需要手动创建并开始任务,推送代码和拉取请求都不会触发它。

想查一段代码在哪些仓库里出现过,怎么做?

在第 2 步把 溯源目标 设为 代码块 或 函数,填写名称并把代码粘进去:代码块建议至少 10 行,函数要包含完整的定义和实现。然后在第 4 步选上要查的被溯源仓库即可。

比对的是被溯源仓库的哪个分支?

被溯源仓库比对的是各自的默认分支;目标仓库的分支则在第 2 步里选择。

小结

给仓库做代码查重,就是在 高级 → 溯源 点 创建溯源,按四步建一个溯源任务:填写名称;选择目标仓库和分支;检查语言不勾选,相似度阈值先用默认的 80% 和 90%;添加 1 到 50 个被溯源仓库。点 创建并执行 后等任务完成,在 查看详情 里先看 重复率,再看完全相同和高度相似两档,对排在前面的匹配点 对比代码 逐条判断要不要处理。需要留档时用 导出报告,其中 PDF (HTML) 和 Markdown 最省事。代码溯源在团队版和企业版中提供,社区版没有 溯源 菜单。

结论: 在 高级 → 溯源 → 创建溯源 选定目标仓库和 1–50 个被溯源仓库(相似度阈值先用默认的 80%/90%),任务完成后在详情页按相似度排序,点 对比代码 核对具体的重复片段。

参考文章

相关文章
|
云安全 安全 网络安全
|
15天前
|
JSON 程序员 数据格式
最新版Notepad++下载、安装、配置保姆级教程(附官网安装包)
Notepad++ 是一款免费开源、轻量快速的 Windows 文本编辑器,支持多标签、语法高亮、代码折叠与宏录制,体积小、启动快、资源占用低,兼容 x64/x32/ARM 架构,是程序员和文字工作者的高效利器。
3568 0
|
8天前
|
JavaScript 安全 前端开发
Nodejs Brotli decoder 代码执行漏洞 (CVE-2026-111497)10629
Node.js发布安全更新修复Brotli解码器高危RCE漏洞(CVE-2026-111497),建议受影响版本用户立即升级。
2042 2
|
14天前
|
人工智能 API 开发工具
DeepSeek Harness 神插件:白嫖 13 家大厂模型
`dsh-our-free-model` 是 DeepSeek Harness 神级插件:零配置、零API Key、零账号,聚合13家大厂免费模型(含DeepSeek V4.1 Flash、Kimi K3等),支持本地网关、用量看板与自动降级,真正实现“白嫖即用”。
2431 45
|
11天前
|
Web App开发 人工智能 前端开发
2026 年 AI 浏览器怎么选?Ego Lite、Tabbit、Chrome DevTools MCP 深度对比,开发者到底该用哪个?
2026年AI浏览器选型指南:Ego Lite专注多Agent协同(Mac优先),Tabbit国产首选,原生支持Windows与Codex控制;Chrome DevTools MCP非浏览器而是开发者利器,深度集成Console/Network/Performance调试能力,让AI真正“看懂并验证”前端代码。
1467 3
|
8天前
|
开发者 索引
DeepSeekHarness大肥鱼自带插件市场了?加个地址就能用
Open Plugin Market 是一个开放插件索引平台,收录800+优质DSH插件,支持分类浏览、智能推荐与随机发现。无需安装市场,粘贴索引地址即可一键接入,网页版直访 dshopen.org,助力小开发者被看见。(239字)
1903 1
DeepSeekHarness大肥鱼自带插件市场了?加个地址就能用
|
7天前
|
人工智能 Linux API
Magpie, 轻量本地AI网关!免费Token用不完!
Magpie 是开源AI编程模型调度网关,上线一月获1.8万Star。它通过本地高性能网关统一托管多平台API密钥、账号与免费额度,实现跨Agent的模型秒级切换、静默额度轮换与资源复用,显著降低碎片化管理成本。(239字)
Magpie, 轻量本地AI网关!免费Token用不完!
|
8天前
|
安全 应用服务中间件 Go
PHP2Shell 漏洞拆解:WordPress 与 nginx 为何中招
PHP2Shell 双 RCE 已遭在野利用:WordPress、Drupal 全在射程内,nginx 其实另有洞。拆成因与修复顺序
PHP2Shell 漏洞拆解:WordPress 与 nginx 为何中招
|
4天前
|
人工智能 安全 API
2026 年阿里云双 11|百炼大模型 API 指南:免费 Token 领取、API Key 生成、代码调用实战教程
对于零基础的AI开发者、技术爱好者和小型开发团队来说,低成本、低门槛调用主流大模型接口,是开启AI项目原型开发的必经之路。百炼大模型服务平台汇集了百余款主流大模型,面向新用户提供大规模免费推理额度,不需要预先充值,即可完成文本生成、逻辑推理、代码编写、多模态解析等各类开发验证工作。很多新手在初次接触平台时,常常遇到不清楚免费额度规则、不知道如何生成API‑Key、环境配置错误、调用接口持续报错等一系列问题。
585 1