首页 / 资讯中心 / 文章详情

AngusGit 代码溯源是什么:在仓库里查相似代码,不是需求从哪来

AngusGit 代码溯源是什么:在仓库里查相似代码,不是需求从哪来 ★ FEATURED ARTICLE
这篇讲 AngusGit 里的「代码溯源」到底在查什么。看完你可以把它和需求追踪、开源许可证合规分开这里只做代码相似度查重告诉你哪段代码和同一个实例里的哪个文件相同或高度相似不会到互联网上找也不会自动运行。「代码溯源」常见还有需求追踪、许可证合规这两种含义和这里的查重不是一回事分清之后才知道手上的问题该去哪个入口。AngusGit 的代码溯源在团队版和企业版中提供入口是侧栏高级 → 溯源。1. 三种「代码溯源」分别是什么同样说「代码溯源」不同的人想问的问题并不一样常见的有下面三种说法想回答的问题用什么解决需求追踪这段代码是为哪个需求写的哪次发布上线的提交信息、拉取请求里关联 Issue加上发布记录许可证合规项目依赖的开源组件是什么许可证能不能用依赖扫描SCA和许可证检查代码相似度这段代码和别的项目里哪段一样一样到什么程度AngusGit 的代码溯源前两种在 AngusGit 里各有做法。需求追踪靠拉取请求关联 Issue在拉取请求的标题或描述里写上Closes #编号合并后这个 Issue 会自动关闭代码和需求就对应上了。许可证合规靠仓库的安全扫描其中 SCA软件成分分析是指扫描项目依赖了哪些开源组件。这两件事都不在代码溯源页面里做所以下面说的「代码溯源」只指第三种代码相似度检查。2. AngusGit 的代码溯源做什么打开高级 → 溯源页面标题是代码溯源说明是「比对代码相似度并追踪重复片段的来源。」在这个页面里每做一次检查就是一个溯源任务。创建溯源任务时要定下两件事查什么以及跟谁比。溯源目标要检查的代码也就是「查什么」。可以是一个仓库可以选分支、仓库里的一个文件、手工粘贴的一段代码块或者一个函数。被溯源仓库拿来比对的仓库也就是「跟谁比」。从同一个 AngusGit 实例里选 1 到 50 个仓库比对的是它们默认分支上的代码。创建任务时还可以调整相似度阈值文件默认 80%代码块默认 90%调低能看到更多「有点像」的结果调高则只留下几乎一样的代码具体怎么调见下一篇。任务跑完后结果页会先给出整体的重复率和唯一率再把每一处匹配按相似度分档完全相同95–100%、高度相似80–95%、中等相似60–80%、低度相似40–60%和唯一代码0–40%。每一条匹配都可以点对比代码把两边的代码左右并排显示出来。以已经跑完的任务 fixture: source vs dup (repo) 为例溯源目标是仓库 xlliu/test-trace-source-example被溯源仓库是 xlliu/test-trace-dup-example。结果页显示溯源仓库数 1/1、溯源文件数 2/2、代码行数 164/164重复率 84.52%唯一率 15.48%。其中有两处落在高度相似80–95%这一档src/main/java/cloud/xcan/example/trace/InvoicePriceCalculator.java的相似度是 86.86%73/94 行src/billing.py的相似度是 82.18%62/70 行。3. 它是怎么判断「相似」的不必先搞懂算法只要知道它大概怎么比读结果时就不容易误判。代码溯源不逐个字符地比较文本。它先按编程语言把代码拆成一个个「词」比如关键字、变量名、运算符和括号再在两边寻找连续相同的「词」连续 50 个以上相同才算作一处重复片段。找到重复片段之后再综合几种相似度算法算出一个分数。这样做有两个好处。第一只改了缩进、空行或注释的代码判断结果不受影响。第二可以有意忽略一部分改动打开忽略标识符差异后改过变量名、函数名的代码也能被识别为相似打开忽略字面量差异后只是字符串和数字不同的代码也能被识别为相似。这两个开关都在创建任务时的高级配置里。另外有几类目录不参与比对以.开头的目录例如.git、.idea以及node_modules和target。这些目录里大多是依赖包和构建产物比对它们没有意义。4. 适合用在哪些场景交付验收时查重复。外包或合作方交付了一个新仓库你想知道里面有多少代码和公司已有的项目重复。做法是把交付的仓库设为溯源目标把已有的相关仓库选为被溯源仓库然后看重复率和具体是哪些文件重复。重构前找复制粘贴的代码。几个服务各自复制了一份相同的工具类结果改一处就得改好几处。可以先用代码溯源把这些重复找出来再决定要不要抽成公共模块。查一段代码还出现在哪里。发现一段有问题的代码想知道其他项目里有没有同样的写法。可以把溯源目标设为代码块或函数粘贴这段代码在相关仓库里查一遍。它也有做不到的事用之前先确认不会去互联网上找。比对范围只限于你选的、同一个实例里的仓库。想知道代码是否来自某个开源项目要先把那个开源项目导入到实例里再把它选为被溯源仓库。不会自动运行。推送代码不会触发溯源每次都要手动创建并开始任务。不判断许可证。找到相似代码之后能不能用、要不要声明出处需要人来判断。常见问题社区版为什么没有溯源菜单代码溯源只在团队版和企业版中提供社区版不包含所以看不到这个菜单。这是版本差异不是故障。重复率高就说明有问题吗不一定。同一个团队的项目常用相同的框架和模板本来就会有不少相似代码。重复率只是一个提示还要点开对比代码看具体是哪些文件重复、是不是本不应该重复的业务代码。溯源和代码评审有什么关系没有直接关系。代码评审看的是一次改动对不对在拉取请求里进行代码溯源看的是整份代码和其他仓库像不像是一次单独的检查任务。两者可以配合使用溯源发现重复代码后通过拉取请求做重构再由评审人把关。小结「代码溯源」常被用来指三件事需求追踪、许可证合规和代码相似度AngusGit 的代码溯源做的是第三件。每个溯源任务把溯源目标仓库、文件、代码块或函数和同一实例里选定的 1 到 50 个被溯源仓库逐段比对给出重复率、从完全相同到唯一代码的相似度分档以及每处匹配的具体位置。它适合交付验收查重、重构前找复制粘贴的代码、查一段代码还在哪些项目里出现但它不会去互联网上找、不会自动运行也不判断许可证。代码溯源在团队版和企业版中提供社区版没有溯源菜单具体怎么建任务、怎么看结果见下一篇。结论AngusGit 的代码溯源高级 → 溯源是在同一实例内跨仓库查相似代码的查重工具需求追踪靠拉取请求关联 IssueCloses #编号开源许可证合规靠仓库安全扫描。参考文章AngusGit 手册代码溯源怎么给仓库做代码查重从建任务到看出重复函数Issue 怎么关联合并请求写上 Closes #编号合并后自动关闭合并前怎么拦住不合规的开源许可证
阅读完成 · 觉得有帮助?
咨询建站