CN115168085A - 一种基于diff代码块匹配的重复冲突方案检测方法 - Google Patents

一种基于diff代码块匹配的重复冲突方案检测方法 Download PDF

Info

Publication number
CN115168085A
CN115168085A CN202210719649.3A CN202210719649A CN115168085A CN 115168085 A CN115168085 A CN 115168085A CN 202210719649 A CN202210719649 A CN 202210719649A CN 115168085 A CN115168085 A CN 115168085A
Authority
CN
China
Prior art keywords
conflict
merging
code block
node
diff
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202210719649.3A
Other languages
English (en)
Inventor
张卫丰
李贺彬
周国强
张迎周
王子元
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nanjing University of Posts and Telecommunications
Original Assignee
Nanjing University of Posts and Telecommunications
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nanjing University of Posts and Telecommunications filed Critical Nanjing University of Posts and Telecommunications
Priority to CN202210719649.3A priority Critical patent/CN115168085A/zh
Publication of CN115168085A publication Critical patent/CN115168085A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0751Error or fault detection not based on redundancy
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0793Remedial or corrective actions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2246Trees, e.g. B+trees
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

一种基于diff代码块匹配的重复冲突方案检测方法,对于具有大量历史合并代码的数据库,如从一个代码仓库向另一个代码仓库迁移,或一个代码库存在相似更新等现实场景,利用大量已经解决好合并问题的代码仓库信息,抽取出相关的合并解决方案。其次,对于获取到历史合并冲突的解决方案将其存储到数据库。然后,遇到现有冲突的时候,利用保存的冲突解决方案来进行合并方案的推荐。最后,基于历史信息解决的冲突,将其在数据库中的是更新时间进行更新。

Description

一种基于diff代码块匹配的重复冲突方案检测方法
技术领域
本发明属于计算机技术领域,尤其是软件技术领域,具体涉及一种基于diff代码块匹配的重复冲突方案检测方法。
背景技术
随着互联网技术的应用越来越广泛,以及软件行业日新月异的变化,远程协同工作、软件代码仓库的使用以及解决冲突的需求越来越多。在协同开发工作中,有两种基础形式,分布式和集中式。而Git作为一个典型的软件代码仓库,是目前世界上最先进的分布式版本控制系统。分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过克隆,在本地机器上拷贝一个完整的Git仓库。Git是用于Linux内核开发的版本控制工具。与常用的版本控制工具CVS,Subversion等不同,它采用了分布式版本库的方式,不必服务器端软件支持,使源代码的发布和交流极其方便。Git的速度很快,这对于诸如Linuxkernel这样的大项目来说自然很重要。Git最为出色的是它的合并跟踪能力。
然而,在协同工作中,会有不同的人来进行协同工作,会产生分支,而使用Git版本控制提交项目流程,在合并不同的工作分支时,会产生合并错误,即冲突。尽管开发人员可以通过Git中的方法调用,从而来解决一些简单的合并冲突,但对于复杂冲突的解决只能靠开发人员自己去手动解决,不仅如此,面对大型的开源项目合并时,冲突的数量就会急剧上升,大大增加了开发人员的工作量,是Git协同工作中所面临的主要挑战。
针对这些问题的一个有效解决方案是在软件集成开发环境中提供冲突的解决方案的功能。这种提示功能应当通过开发人员以前解决好的历史冲突来进行分析,对于现在面临的冲突,能够对于历史冲突信息的快速匹配,为开发人员提供解决冲突方案的提示,从而提高了开发的效率。但是由于Git版本控制中合并方案的具体表现形式过于单一,目前的开源框架和IDE不能对复杂冲突的解决提供帮助。
发明内容
本发明的主要目标是研究一种能提供冲突过往解决方案的,尤其是和历史冲突信息存在相似性的冲突,提出一种基于diff代码块匹配的重复冲突方案检测方法,着重利用冲突的相似性以及从冲突中快速定位对应的冲突,作为复杂合并冲突的方案之一,有效地帮助开发者理解代码,更好地完成开发任务。
本方法的主要工作是从历史信息中获取合并节点冲突信息,将历史合并冲突方案保存到数据库。其中保存的是diff代码块,并再次遇到相似冲突时,可以快速查找冲突和推荐冲突的解决方案以及冲突保存方案。本模型可以用于现有合并冲突问题的解决方案进行匹配推荐。首先,本方法关注的是持续集成中的合并问题的解决方案推荐,对于具有大量历史合并代码的数据库,如从一个代码仓库向另一个代码仓库迁移,或一个代码库存在相似更新等现实场景,利用大量已经解决好合并问题的代码仓库信息,抽取出相关的合并解决方案。其次,对于获取到历史合并冲突的解决方案将其存储到数据库。然后,遇到现有冲突的时候,利用保存的合并冲突方案来进行合并方案的推荐。最后,基于历史信息解决的冲突,将其在数据库中的是更新时间进行更新,表明解决好的冲突使用频度很高。冲突是开发人员手动解决的话,需要将解决方案保存到数据库中。
本发明达到的有益效果为:本发明可以有效的提高相似冲突的解决效率,减轻开发人员对于相似冲突处理的工作量,降低工作难度。而且本发明在检测相似性冲突上使用了索引技术,可以加快相似冲突的检测,提高匹配速度,也提高相似冲突的准确性。
附图说明
图1为本发明实施例中的基于历史信息的获取冲突节点示意图。
图2为本发明实施例中的基于代码仓库提交树保存历史合并冲突方案示意图。
图3为本发明实施例中的基于方案推荐的合并冲突过程示意图。
具体实施方式
下面结合说明书附图对本发明的技术方案做进一步的详细说明。
一种基于diff代码块匹配的重复冲突方案检测方法,具体包括以下步骤:
步骤1,首先针对含有大量历史合并信息的代码仓库,获取commit提交树,对于每一个合并节点,获取到合并节点两个分支的前一个节点,并且进行合并,查看是否会出现冲突,以此来判断合并节点是否是一个含冲突历史的节点。
步骤2,使用图遍历算法和节点合并,对冲突节点分析时,记录冲突节点的当前分支名,合并到当前分支的其他分支名,合并到当前分支的其他分支的前驱结点,冲突节点前驱的前驱节点,合并分支和待合并分支的祖先节点。并记录各个节点的commit id。
步骤3,获取祖先节点的参考代码块、合并到当前分支的其他分支的前驱结点的对比代码块、当前节点的前驱的前去节点的源代码块、冲突节点的合并代码块。
步骤4,使用代码匹配技术,将步骤3获取到代码进行对比,然后对于匹配成功的代码块使用hash算法得到一个hash值,作为一个冲突方案的记录维度,然后将当前的仓库名、步骤2中的各个节点的commit id,各个文件代码块的hash值、更新时间保存到数据库中。
步骤5,使用数据库索引快速匹配技术,对现有冲突与步骤4保存的冲突方案进行匹配,匹配成功可以将匹配到冲突方案返回给开发人员,并且更新保存时间。匹配失败需要开发人员自行解决合并冲突问题,然后把当前合并冲突方案记录按照步骤2、步骤3、步骤4保存到数据库中。
步骤1中,提取合并节点的流程如下:对于含有大量历史合并信息的代码仓库,首先使用Sourcetree工具获取代码仓库中的commit提交树,commit提交树是Git的整个仓库的核心,commit节点是提交树的基本单位。然后针对分支合并情况,找到两个分支合并的节点,收集所有的节点作为一个集合。节点就代表一个分支上的commit。之后,对集合中的每一个节点,要记录分支提交时的commit id,commit id是开发人员成功提交代码到代码仓库中,Git自动生成的SHA1值,代表着这次提交的序号,对照着commit提交树来得到所有的合并节点的commit id,然后需要把当前的仓库名进行保存。
Sourcetree是适用于macOS和Windows的免费GUI Git客户端。它简化了版本控制过程,让你可以专注于重要的事情——编码。它拥有专业的UI,可以通过直接访问Git流、子模块、远程repo管理器、本地提交搜索、支持Git大文件等可视化管理版本库,来执行Git任务和访问Git流。本发明基于Sourcetree工具生成commit提交树,定位到两个分支合并的节点。
步骤2中,针对获取到的commit id的合并节点为E,需要记录当前节点的所在的当前分支和合并上来的分支,找到两个分支开始拆分的节点,并且保存其commit id,找到合并节点所在分支前驱的前驱结点为D和合并上来分支的前驱结点为C,具体的节点获取情况可以参照图1。对于一个代码仓库,我们可以从提交历史中获得commit提交树,然后获得合并节点的集合,之后遍历合并节点集合中的每一个节点,通过git合并命令来查看合并结果是否有冲突,从而判断该节点是否含有历史冲突信息。
获取D的前驱节点B和其他分支的C进行合并处理,如果出现了合并冲突,则证明了当前节点E是一个冲突节点。记录获取到节点的commit id,这作为合并冲突解决方案的一个信息。
步骤3中,通过步骤2确定了当前节点是不是一个冲突节点,然后循环步骤1中的节点集合,找到所有的含有冲突历史的合并节点,然后为了能够定位历史合并冲突节点的具体情况,参照图2是本发明基于代码仓库提交树保存历史合并冲突方案示意图,通过commit提交树保存对比diff代码块、源diff代码块、参考diff代码块、合并文件所在节点的commitId,通过对commit Id的保存可以定位到冲突diff代码块。图2的节点D代表合并节点的父节点,用来获取节点B。
步骤4中,为了进一步保存历史合并方案,使用基于代码匹配的技术,将对比diff代码块、源diff代码块、参考diff代码块中的代码进行一一匹配,得到代码块不能匹配成功的代码块列表。对于列表中的每一个代码块分别通过hash算法,得到一个代码块hash值。由步骤1和步骤3得到仓库名和源diff代码块提交id、对比diff代码块提交id、参考diff代码块提交id、合并diff代码块提交id,以及获取到源diff代码块的hash值,对比diff代码块的hash值、合并diff代码块的hash值、参考diff代码块的hash值。最后作为数据库中的合并方案,其形式为<id,projectName,merged commitId,source commitId,target commitId,base commitId,source code fragment hash,target code fragment hash,merged codefragment hash,base code fragment hash,update time>。其中id为数据记录的编号,projectName为仓库名,merged commitId为合并diff代码块节点提交id,source commitId为源diff代码块节点提交id,target commitId为对比diff代码块节点提交id,basecommitId为参考diff代码块节点提交id,source code fragment hash为源代码块的hash值,target code fragment hash为对比代码块的hash值,merged code fragment hash为合并代码块的hash值,base code fragment hash参考代码块的hash值,update time为插入或者更新这条记录的时间。
步骤5中,参照图3是本发明基于方案推荐的合并冲突过程示意图,使用数据库索引快速匹配技术,根据开发人员在本次项目遇到的冲突,提取相应的冲突块,运用hash算法进行hash,获得到的hash值,通过数据库中的索引匹配数据库中的数据,如果匹配成功,将历史合并冲突方案推荐给开发人员,并且更新数据库中的合并方案时间。如果匹配失败,开发人员手动解决,按照步骤2、步骤3、步骤4将本次的合并冲突方案保存到数据库中。
本发明的工作和贡献如下:
1.合并冲突方案的提取与保存。对于具有大量历史合并代码的数据库,如从一个代码仓库向另一个代码库迁移,或一个代码库存在相似更新等现实场景,历史合并决策可以对于新的合并冲突有参考价值。第一步,可以使用Sourcetree工具获取代码仓库中的commit提交树,得到一个图像化的树状图。commit提交树是Git的整个仓库的核心,commit节点是提交树的基本单位。第二步,找到commit提交树中两条分支相交的节点,该节点定义为合并节点。获取所有的合并节点作为一个集合,对于集合中的每一个节点,对其节点的两个分支的前驱结点,其中在要合并的分支的上的前驱结点,要找合并节点的祖父节点,就是节点前驱结点的前驱结点。然后进行两个分支下的节点合并,如果没有发生冲突,那么此合并节点属于正常合并,没有发生冲突。否则就发生了合并冲突,那说明此次合并节点是发生冲突之后,人工解决之后的合并节点。以上步骤可以找到一个代码仓库中的合并冲突节点。
2.基于已经找到冲突节点,保存历史合并方案对于方案推荐至关重要。主要记录节点的commit提交id,通过冲突节点,能够找到合并完成之后的节点文件内容称合并diff代码块,将要合并到当前分支的其他分支的diff代码块称对比diff代码块,找到两个分支的分开时的节点diff代码块称参考diff代码块。找到合并节点的前驱结点的前驱结点的diff代码块称源diff代码块。需要将遇到的合并问题与数据库中的保存合并问题进行匹配。由于在代码仓库中,合并问题的出现总是牵扯到代码块,所以代码块之间的相似性成了合并方案是否适合该合并问题的关键,使用代码匹配的方法,将代码块的hash值保存下来,作为冲突方案保存的维度。利用数据库中的索引进行快速匹配,从而达到合并方案的推荐。
3.在遇到现有冲突的时候,需要快速查询到历史合并冲突方案,查找到之后可以通过保存的方案信息来推荐合并冲突的方案。该推荐的本质是利用高频率出现的合并决策的统计特征,应用于新的相似的代码变更中。如果能够匹配的到相似的合并方案,需要更新当前数据库中保存方案更新时间。当然,如果当前冲突在数据库中没有匹配到相似的合并冲突,那这是只能有开发人员进行手动处理合并冲突,最后把开发人员处理的冲突方案保存到数据中。因此,人类开发者或代码管理员可以基于合并方案推荐增强理解,做出最终合并决策。
在软件行业中,开发人员在提交时,有冲突信息,不能完成合并,此时本文明内容会将遇到的冲突信息进行提取,然后进行hash处理,与数据库中保存的冲突hash值进行快速匹配,匹配成功,则会把匹配数据推荐给开发人员,将历史的冲突解决方案让开发人员参考,从而降低了开发人员对于合并工作的难度。
以上所述仅为本发明的较佳实施方式,本发明的保护范围并不以上述实施方式为限,但凡本领域普通技术人员根据本发明所揭示内容所作的等效修饰或变化,皆应纳入权利要求书中记载的保护范围内。

Claims (6)

1.一种基于diff代码块匹配的重复冲突方案检测方法,其特征在于:所述方法包括如下步骤:
步骤1,对于具有大量历史合并代码的数据库,提取出提交树中所有合并节点,然后判断该节点是否含有历史冲突合并信息;
步骤2,使用图遍历算法和节点合并分析,记录冲突节点的当前分支名,合并到当前分支的其他分支名,合并到当前分支的其他分支的前驱结点,冲突节点前驱的前驱节点,合并分支和待合并分支的祖先节点,并记录各个节点的提交标记;
步骤3,获取祖先节点的参考代码块、合并到当前分支的其他分支的前驱结点的对比代码块、当前节点的前驱的前去节点的源代码块、冲突节点的合并代码块;
步骤4,使用代码匹配技术,提取代码块进行对比,然后对于匹配成功的代码块通过hash算法得到一个hash值,作为一个冲突方案的记录维度,然后将当前的仓库名,各个节点的提交标志,各个代码块的hash值、更新时间保存到数据库中;
步骤5,使用数据库索引快速匹配技术,对现有冲突与保存的冲突方案进行匹配,匹配成功则将匹配到冲突方案返回给开发人员,并且更新保存时间;匹配失败则需要开发人员自行解决合并冲突问题,然后把当前合并冲突方案记录到数据库中。
2.根据权利要求1所述的一种基于diff代码块匹配的重复冲突方案检测方法,其特征在于:步骤1中,在判断合并节点的同时,通过提交树保存对比diff代码块、源文件、参考文件、合并文件所在节点的commit Id,通过对commit Id的保存可以定位到冲突文件,记录好仓库名称。
3.根据权利要求1所述的一种基于diff代码块匹配的重复冲突方案检测方法,其特征在于:步骤2中,使用图遍历算法和节点合并分析,记录冲突节点的当前分支名,合并到当前分支的其他分支名,合并到当前分支的其他分支的前驱结点,冲突节点前驱的前驱节点,合并分支和待合并分支的祖先节点,并记录各个节点的提交标记。
4.根据权利要求1所述的一种基于diff代码块匹配的重复冲突方案检测方法,其特征在于:步骤3中,通过步骤2确定了当前节点是不是一个冲突节点,然后循环步骤1中的节点集合,找到所有的含有冲突历史的合并节点,然后为了能够定位历史合并冲突节点的具体情况,通过commit提交树保存对比diff代码块、源diff代码块、参考diff代码块、合并文件所在节点的commitId,通过对commitId的保存可以定位到冲突diff代码块。
5.根据权利要求1所述的一种基于diff代码块匹配的重复冲突方案检测方法,其特征在于:步骤4中,将对比diff代码块、源diff代码块、参考diff代码块中的代码先进行匹配,得到代码块不能完全匹配成功的代码块列表,对于列表中的每一个代码块分别通过hash算法,得到一个代码块hash值;由步骤1和步骤3得到仓库名和源代码块提交id、对比代码块提交id、参考代码块提交id、合并代码块提交id,以及获取到源代码块的hash值、对比代码块的hash值、合并代码块的hash值、参考代码块的hash值,最后作为数据库中的合并方案。
6.根据权利要求1所述的一种基于diff代码块匹配的重复冲突方案检测方法,其特征在于:步骤5中,根据遇到的冲突,提取相应的冲突块,运用hash算法对代码块进行hash,获得到的hash值,通过数据库中的索引匹配数据库中的数据,如果匹配成功,将历史合并冲突方案推荐给开发人员,并且更新数据库中的合并方案时间,如果匹配失败,开发人员手动解决,然后把本次的合并冲突方案保存到数据库中。
CN202210719649.3A 2022-06-23 2022-06-23 一种基于diff代码块匹配的重复冲突方案检测方法 Pending CN115168085A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210719649.3A CN115168085A (zh) 2022-06-23 2022-06-23 一种基于diff代码块匹配的重复冲突方案检测方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210719649.3A CN115168085A (zh) 2022-06-23 2022-06-23 一种基于diff代码块匹配的重复冲突方案检测方法

Publications (1)

Publication Number Publication Date
CN115168085A true CN115168085A (zh) 2022-10-11

Family

ID=83488265

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210719649.3A Pending CN115168085A (zh) 2022-06-23 2022-06-23 一种基于diff代码块匹配的重复冲突方案检测方法

Country Status (1)

Country Link
CN (1) CN115168085A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116483423A (zh) * 2023-06-25 2023-07-25 杭州谐云科技有限公司 一种基于遗传算法的增量代码扫描方法和系统

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116483423A (zh) * 2023-06-25 2023-07-25 杭州谐云科技有限公司 一种基于遗传算法的增量代码扫描方法和系统
CN116483423B (zh) * 2023-06-25 2023-09-05 杭州谐云科技有限公司 一种基于遗传算法的增量代码扫描方法和系统

Similar Documents

Publication Publication Date Title
Borg et al. Szz unleashed: an open implementation of the szz algorithm-featuring example usage in a study of just-in-time bug prediction for the jenkins project
CN112199366B (zh) 数据表处理方法、装置及设备
Khayyat et al. Bigdansing: A system for big data cleansing
CN110442847B (zh) 基于代码仓库过程管理的代码相似性检测方法及装置
EP3674918B1 (en) Column lineage and metadata propagation
EP3120261B1 (en) Dependency-aware transaction batching for data replication
CN106033436B (zh) 一种数据库的合并方法
CN110134613B (zh) 一种基于代码语义及背景信息的软件缺陷数据采集系统
CN111597243A (zh) 基于数据仓库抽象数据加载的方法及系统
CN111125213A (zh) 数据采集的方法、装置及其系统
CN115543402B (zh) 一种基于代码提交的软件知识图谱增量更新方法
CN110990055B (zh) 一种基于程序分析的Pull Request功能分类方法
WO2023279684A1 (zh) 一种基于命名规则和缓存机制的知识图谱构建的操作方法
US20030159110A1 (en) Structured document management system, structured document management method, search device and search method
CN115168085A (zh) 一种基于diff代码块匹配的重复冲突方案检测方法
CN112068981A (zh) Linux操作系统中基于知识库的故障扫描恢复方法及系统
EP2797001A2 (en) System and method for creating variants in a test database during various test stages
Michaud et al. Recovering commit branch of origin from github repositories
CN111143483A (zh) 确定数据表关系的方法、设备和计算机可读存储介质
CN117034284A (zh) 开源漏洞对应修复补丁的追溯方法及相关装置
CN114692595B (zh) 一种基于文本匹配的重复冲突方案检测方法
CN115729935A (zh) 一种基于orm框架的数据交互处理方法及系统
CN113568921B (zh) 一种面向地理信息数据生产更新的多人协同作业方法
CN115658360A (zh) 一种基于日志数据的云系统故障诊断方法
CN118069701B (zh) 反向查询链路的构建方法、装置、计算机设备及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination