一种基于代码提交历史的Git仓库相似性检测方法技术

技术编号:18237486 阅读:32 留言:0更新日期:2018-06-17 00:38
本发明专利技术公开了一种基于代码提交历史的Git仓库相似性检测方法,首先需要搭建Git环境,然后获取项目,将需要检测分析的项目通过url从远程服务器上的Git仓库中拉取下来,存储到本地Git仓库;通过Git的版本历史记录功能,获取项目的所有历史版本的文件内容,然后通过文件相似性分析算法检测项目的每个相邻版本之间的相似性,判断项目提交者的工作量;同时还可以检测不同仓库中同一需求项目之间的相似性,通过比对项目中每个文件的MD5值以及对项目文件的相似性分析,判断项目提交者自主完成的可信度;最后根据项目真实性计算公式,判断项目的来源。本发明专利技术可以简单、快速和有效地检测Git仓库中项目的真实性,从而判断该项目是原创、借鉴还是抄袭。 1

A Git warehouse similarity detection method based on code submission history

This invention discloses a Git warehouse similarity detection method based on the history of code submission. First, we need to build the Git environment, then get the project, pull the items that need detection and analysis through URL from the Git warehouse on the remote server and store it to the local Git warehouse; through the version of Git's version history function, get it The file content of all historical versions of the project, then the similarity between each adjacent version of the project by the file similarity analysis algorithm, determines the workload of the project submissions; it can also detect the similarity between the same requirements in different warehouses, by comparing the MD5 values of each file in the project and The similarity analysis of the project documents is used to judge the credibility of the project submissions. Finally, the source of the project is judged according to the calculation formula of the project authenticity. The invention can detect the authenticity of items in Git repository simply, quickly and effectively, so as to determine whether the project is original, reference or plagiarism. One

【技术实现步骤摘要】
一种基于代码提交历史的Git仓库相似性检测方法
本专利技术属于互联网和软件工程领域,具体涉及一种基于代码提交历史的Git仓库相似性检测方法。
技术介绍
Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。Git是LinusTorvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。每一个Git克隆都是一个完整的文件库,含有全部历史记录和修订追踪能力。其最大特色就是“分支”及“合并”操作快速、简便;支持离线工作,Git是整个项目范围的原子提交,而且Git中的每个工作树都包含一个具有完整项目历史的仓库。Git是一种非常流行的分布式版本控制系统,和其他版本控制系统相比,主要是和SVN相比较,Git的主要优势在于以下几个方面:1)版本库本地化,支持离线提交,相对独立不影响协同开发。每个开发者都拥有自己的版本控制库,在自己的版本库上可以任意的执行提交代码、创建分支等行为。例如,开发者认为自己提交的代码有问题,因为版本库是自己的,回滚历史、反复提交、归并分支并不会影响到其他开发者。2)更少的“仓库污染”。Git对于每个工程只会产生一个.git目录,这个工程所有的版本控制信息都在这个目录中,不会像SVN那样在每个目录下都产生.svn目录。3)把内容按元数据方式存储,完整克隆版本库。所有版本信息位于.git目录中,它是处于你的机器上的一个克隆版的版本库,它拥有中心版本库上所有的东西,例如标签、分支、版本记录等。4)支持快速切换分支方便合并,比较合并性能好。在同一目录下即可切换不同的分支,方便合并,且合并文件速度比SVN快。5)分布式版本库,无单点故障,内容完整性好。内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。Git保留了每次代码演化的全部历史记录,方便回退到历史版本查看用户需要的内容。
技术实现思路
本专利技术的目的是通过设计并实现一种基于代码提交历史的Git仓库相似性检测方法,首先通过检测同一仓库中同一项目的历史提交版本之间的相似性,判断提交者的工作量;然后检测不同仓库中同一需求的项目之间的相似性,判断项目提交者自主完成的可信度。综合上述两步,检测Git仓库中项目的真实性,从而判断该项目是原创、借鉴还是抄袭。为实现上述目的,本专利技术采用的技术方案为一种基于代码提交历史的Git仓库相似性检测方法,包含以下步骤:步骤1:搭建和配置Git环境,下载Git软件并安装,配置环境变量,确认安装成功;步骤2:获取项目历史版本提交记录编号;步骤3:进行同一仓库项目历史版本之间的相似性分析;步骤4:进行不同仓库同一需求项目之间的相似性分析;步骤5:分析项目是原创、借鉴或者抄袭。进一步,步骤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具体包括以下步骤:41)首先计算项目中每个文件的MD5值,然后逐一比对文件的MD5值,如果有MD5值相等,则可初步得出判定,该项目为非自主完成;然后逐一检测每一个文件的相似性;42)对两个文件进行diff标记操作,使用文件相似性分析算法分析比较文件,标记文件内容是相等标记、插入标记或者是删除标记,获取分析结果diff标记集合;43)遍历步骤42中获取的diff标记集合,分别统计删除标记、相等标记和插入标记行数,如果遇到删除标记,则记录删除标记的行数并与历史删除记录行数相加;如果遇到相等标记,则记录相等标记行数并与历史相等记录行数相加;如果遇到插入标记,则记录插入标记行数并与历史插入记录行数相加;最后将删除记录行数和相等记录行数相加,作为总行数;44)使用步骤43获取的相等行数除以步骤3获取的总行数作为文件相似性;将所有文件的相似性相加取平均值作为该本次检测的相似性,将所有检测的相似性相加取平均值作为该项目的相似性。进一步,步骤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分析,首先将步骤1计算的真实性结果作为初步真实性结果;然后将步骤4计算的相似性作为项目初步真实性结果系数;最后将初步真实性结果乘以初步真实性结果系数再加上5作为真实性结果,真实性结果计算方法同步骤1。与现有技术相比,本专利技术具有以下有益的技术效果:1,本专利技术首先检测同一仓库中同一项目的历史提交版本之间的相似性,用于判断提交者的工作量,然后检测不同仓库中同一需求的项目之间的相似性,用于判断项目提交者自主完成的可信度。综合上述两步就可以简单、快速和有效地检测Git仓库中项目的真实性,从而判断该项目是原创、借鉴还是抄袭。2,在教学环境中,通过要求学生把作业提交到Git仓库中就可以很容易判断学生是否是独立完成作业,具有很好的实用性。附图说明图1为一种基于代码提交历史的Git仓库相似性检测方法的流程图。具体实施方式下面结合附图对本专利技术作进一步详细说明。本专利技术首先需要搭建Git环境,Git环本文档来自技高网
...
一种基于代码提交历史的Git仓库相似性检测方法

【技术保护点】
1.一种基于代码提交历史的Git仓库相似性检测方法,其特征在于,包含以下步骤:

【技术特征摘要】
1.一种基于代码提交历史的Git仓库相似性检测方法,其特征在于,包含以下步骤:步骤1:搭建和配置Git环境,下载Git软件并安装,配置环境变量,确认安装成功;步骤2:获取项目历史版本提交记录编号;步骤3:进行同一仓库项目历史版本之间的相似性分析;步骤4:进行不同仓库同一需求项目之间的相似性分析;步骤5:分析项目是原创、借鉴或者抄袭。2.根据权利要求1所述的基于代码提交历史的Git仓库相似性检测方法,其特征在于步骤2具体包括以下步骤:21)通过url从远程服务器上的Git仓库中克隆整个项目到本地仓库并初始化该仓库;22)与本地仓库建立连接并打开该连接;23)通过Git的log历史记录命令获取所有的历史提交记录集合;24)遍历步骤23中获取的集合,获取所有版本的历史提交记录编号。3.根据权利要求1所述的基于代码提交历史的Git仓库相似性检测方法,其特征在于步骤3具体包括以下步骤:31)通过较新版本的历史提交记录编号获取本次所有提交的修改文件;32)通过历史版本的历史提交记录编号获取步骤31获取的修改文件对应的原始文件;33)对步骤31和步骤32获取的两个文件进行diff操作,使用文件相似性分析算法分析比较文件,标记文件内容是相等标记、插入标记或者是删除标记,获取分析结果diff标记集合;34)遍历步骤33中获取的diff标记集合,分别统计删除标记、相等标记和插入标记行数,如果遇到删除标记,则记录删除标记的行数并与历史删除记录行数相加;如果遇到相等标记,则记录相等标记行数并与历史相等记录行数相加;如果遇到插入标记,则记录插入标记行数并与历史插入记录行数相加;最后将删除标记行数和相等标记行数相加,作为总行数;35)通过步骤31计算文件修改数量,视为工作量;将步骤34统计的插入行数视为工作量。4.根据权利要求1所述的基于代码提交历史的Git仓库相似性检测方法,其特征在于步骤4具体包括以下步骤:41)首先计算项目中每个文件的MD5值,然后逐一比对文件的MD5值,如果有MD5值相等,则可初步得出判定,该项目为非自主完成;然后逐一检测每一个文件的相似性;42)对两个文件进行diff标记操作,使用文件相似性分析算法分析比较文件,标记文件内容是相等标记...

【专利技术属性】
技术研发人员:张卫丰申玉江诸葛文杜
申请(专利权)人:南京邮电大学
类型:发明
国别省市:江苏,32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1