这篇讲怎么查一个仓库里的代码和其他项目重复了多少。看完你可以建一个代码溯源任务,选好要检查的仓库和拿来比对的仓库,设好相似度阈值,从重复率、相似度分档看到具体重复的文件和函数。
两个说法会贯穿全文:溯源目标 是你要检查的代码,这里用的是一个仓库;被溯源仓库是拿来跟它比对的仓库,一次最多选 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 步:基本信息
溯源名称 必填,写清这次查的是什么,例如「source vs dup 查重」;溯源描述 可以不填。
第 2 步:选择目标
溯源目标 有 仓库、文件、代码块、函数 四种。要查整个仓库就选 仓库,本例选的是
test-trace-source-example,分支可以不选。下方的 去重重复文件 开关会自动识别并排除重复的文件,一般保持默认即可。第 3 步:设置检查语言和相似度阈值
这一步在界面上的标题是 配置参数。检查语言 保持不勾选,界面说明是「不选将自动检查对比所有语言」。相似度阈值有两个:文件相似度阈值 默认 80%,代码块相似度阈值 默认 90%。第一次运行先用默认值。
第 4 步:选择被溯源仓库
这一步在界面上的标题是 选择仓库。在搜索框里找到
test-trace-dup-example,点 添加,右上角会显示已选数量,例如1 / 50。注意不要误选名字带-Fork的同名仓库。下方的 配置摘要 汇总了前面所有的选择,核对一遍再继续。创建并执行
点 创建并执行,任务创建后马上开始运行。如果只点 创建,任务会停在 等待中,之后要在列表里点 开始溯源 才会运行。

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%。

最后逐条判断。 看到重复代码后,先弄清楚它为什么重复,再决定怎么处理。常见的有三种情况:
| 看到的情况 | 重复原因 | 建议处理方式 |
|---|---|---|
| 框架生成的代码、配置模板 | 脚手架或统一模板生成 | 正常重复,不用处理 |
| 几个项目里各复制了一份的工具函数 | 历史复制粘贴 | 考虑抽成公共模块,通过拉取请求重构 |
| 不该出现在这里的业务代码 | 跨项目误拷或违规复用 | 找相关负责人确认来源和是否需要删除 |
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%),任务完成后在详情页按相似度排序,点 对比代码 核对具体的重复片段。