1.一种基于代码提交历史的Git仓库相似性检测方法,其特征在于,包含以下步骤:步骤1:搭建和配置Git环境,下载Git软件并安装,配置环境变量,确认安装成功;
步骤2:获取项目历史版本提交记录编号,具体包括:步骤21)通过url从远程服务器上的Git仓库中克隆整个项目到本地仓库并初始化该仓库;
步骤22)与本地仓库建立连接并打开该连接;
步骤23)通过Git的log历史记录命令获取所有的历史提交记录集合;
步骤24)遍历步骤23)中获取的集合,获取所有版本的历史提交记录编号;
步骤3:进行同一仓库项目历史版本之间的相似性分析,具体包括:步骤31)通过新版本的历史提交记录编号获取本次所有提交的修改文件;
步骤32)通过历史版本的历史提交记录编号获取步骤31)获取的修改文件对应的原始文件;
步骤33)对步骤31)和步骤32)获取的两个文件进行diff操作,使用文件相似性分析算法分析比较文件,标记文件内容是相等标记、插入标记或者是删除标记,获取分析结果diff标记集合;
步骤34)遍历步骤33)中获取的diff标记集合,分别统计删除标记、相等标记和插入标记行数,如果遇到删除标记,则记录删除标记的行数并与历史删除记录行数相加;如果遇到相等标记,则记录相等标记行数并与历史相等记录行数相加;如果遇到插入标记,则记录插入标记行数并与历史插入记录行数相加;最后将删除标记行数和相等标记行数相加,作为总行数;
步骤35)通过步骤31)计算文件修改数量,视为工作量;将步骤34)统计的插入行数视为工作量;
步骤4:进行不同仓库同一需求项目之间的相似性分析,步骤4具体包括以下步骤:
步骤41)首先计算项目中每个文件的MD5值,然后逐一比对文件的MD5值,如果有MD5值相等,则可初步得出判定,该项目为非自主完成;然后逐一检测每一个文件的相似性;
步骤42)对两个文件进行diff标记操作,使用文件相似性分析算法分析比较文件,标记文件内容是相等标记、插入标记或者是删除标记,获取分析结果diff标记集合;
步骤43)遍历步骤42)中获取的diff标记集合,分别统计删除标记、相等标记和插入标记行数,如果遇到删除标记,则记录删除标记的行数并与历史删除记录行数相加;如果遇到相等标记,则记录相等标记行数并与历史相等记录行数相加;如果遇到插入标记,则记录插入标记行数并与历史插入记录行数相加;最后将删除记录行数和相等记录行数相加,作为总行数;
步骤44)使用步骤43)获取的相等行数除以步骤43)获取的总行数作为文件相似性;将所有文件的相似性相加取平均值作为该本次检测的相似性,将所有检测的相似性相加取平均值作为该项目的相似性;
步骤5:分析项目是原创、借鉴或者抄袭,具体包括:步骤51)如果只经过步骤3分析而没有步骤4分析,首先查看历史记录提交次数,如果历史记录提交次数小于2次,标记原创系数为0.1;如果历史记录提交次数在2‑3之间,标记原创系数为0.3;如果历史提交次数在4‑5之间,标记原创系数为0.6;如果历史记录提交次数在6‑8之间,原创系数为0.8;如果历史记录提交次数超过8次,原创系数为1;然后根据步骤3统计的工作量计算相邻版本之间的工作量差值,如果差值在20以内是正常范围,记录差值分为100;如果差值在20‑30之间,记录差值分为95;如果差值在30‑45之间,记录差值分为
90;如果差值在45‑60之间,记录差值分为80;如果差值在60‑75之间,记录差值分为70;如果差值在75‑90,记录差值分为60;如果差值在90‑110,记录差值分为45;如果差值在110‑130,记录差值分为30;如果差值在130‑160之间,记录差值分为15;如果差值超过160,则记录差值分为0;最后将原创系数乘以差值分的平均分作为真实性结果,如果结果低于40分,则标记为抄袭;如果结果在40‑60分之间,标记为借鉴;如果结果在60分以上,标记为原创;
步骤52)如果既有步骤3分析又有步骤4分析,首先将步骤51)计算的真实性结果作为初步真实性结果;然后将步骤4计算的相似性作为项目初步真实性结果系数;最后将初步真实性结果乘以初步真实性结果系数再加上5作为真实性结果,真实性结果计算方法同步骤
51)。