发明内容
本公开实施例至少提供一种代码分支合并方法、装置、计算机设备以及存储介质。
第一方面,本公开实施例提供了一种代码分支合并方法,包括:
获取多个待合并代码分支;其中,所述多个待合并代码分支中包含第一类代码分支和第二类代码分支,所述第一类代码分支中包含待合并至所述第二类代码分支的代码文件;
确定所述第一类代码分支中各代码文件的合并类型;
基于所述合并类型对所述第一类代码分支中的代码文件进行分组,得到至少一个待合并代码组,以及确定每个所述待合并代码组的合并策略;
根据所述合并策略将每个所述待合并代码组和所述第二类代码分支进行合并,得到分支合并结果。
一种可选的实施方式中,所述确定所述第一类代码分支中各代码文件的合并类型,包括:
获取所述第一类代码分支中各代码文件中的合并信息;
在所述合并信息中查找预设关键信息,得到查找结果;其中,不同预设关键信息对应不同的合并类型;
基于所述查找结果确定所述第一类代码分支中每个所述代码文件的合并类型。
一种可选的实施方式中,所述确定所述第一类代码分支中各代码文件的合并类型,包括:
获取所述第一类代码分支的分支合并列表;其中,所述分支合并列表包含所述第一类代码分支中至少部分代码文件的标识信息,所述标识信息包含对应代码文件的文件标识和/或该代码文件的类型标识;
基于所述分支合并列表中的标识信息,确定所述第一类代码分支中至少部分代码文件的合并类型。
一种可选的实施方式中,所述基于所述合并类型对所述第一类代码分支中的代码文件进行分组,得到至少一个待合并代码组,包括:
基于所述合并类型在所述第一类代码分支中确定至少一个分割位置;其中,所述第一类代码分支中位于每个分割位置两侧的代码文件的合并类型不相同;
按照所述至少一个分割位置对所述第一类代码分支进行分割,得到所述至少一个待合并代码组。
一种可选的实施方式中,所述按照所述合并策略将每个所述待合并代码组和所述第二类代码分支进行合并,得到分支合并结果,包括:
在所述第二类代码分支中确定每个所述待合并代码组中各代码文件的待合并对象;
按照所述合并策略将每个所述待合并代码组中的各代码文件与该代码文件所对应的待合并对象进行合并,得到所述分支合并结果。
一种可选的实施方式中,所述代码文件包含目标改动代码;
所述在所述第二类代码分支中确定每个所述待合并代码组中各代码文件的待合并对象,包括:
在所述合并类型为第一类型的情况下,获取每个所述待合并代码组中各代码文件的文件标识;其中,所述第一类型用于指示对应代码文件中的目标改动代码为需要合并至所述第二类代码分支;
在所述第二类代码分支中确定与所述文件标识相匹配的目标代码文件,并将所述相匹配的目标代码文件确定为所述待合并对象。
一种可选的实施方式中,所述代码文件包含目标改动代码和合并信息;
所述按照所述合并策略将每个所述待合并代码组和所述第二类代码分支进行合并,得到分支合并结果,包括:
在所述合并类型为第一类型的情况下,将每个所述待合并代码组的各代码文件中的目标改动代码和合并信息,与所述第二类代码分支进行合并,得到所述分支合并结果;其中,所述第一类型用于指示对应代码文件中的目标改动代码为需要合并到所述第二类代码分支中。
一种可选的实施方式中,所述代码文件包含目标改动代码和合并信息;
所述按照所述合并策略将每个所述待合并代码组和所述第二类代码分支进行合并,得到分支合并结果,包括:
在所述合并类型为第二类型的情况下,在所述第二类代码分支中确定所述待合并代码组的合并位置;
按照所述合并位置将每个所述待合并代码组的各代码文件中的合并信息与所述第二类代码分支进行合并,得到所述分支合并结果;其中,所述第二类型用于指示对应代码文件中的目标改动代码为不需要合并到所述第二类代码分支中。
一种可选的实施方式中,所述方法还包括:
在按照所述合并策略将每个所述待合并代码组和所述第二类代码分支进行合并的过程中,检测合并中断事件;
在检测到所述合并中断事件的情况下,确定各所述待合并代码组中的中断代码文件;
向所述中断代码文件所属的提交对象发送所述合并中断事件,以使所述提交对象对所述中断代码文件进行修改;
获取所述提交对象返回的修改后中断代码文件,并将所述修改后中断代码文件继续与所述第二类代码分支进行合并。
一种可选的实施方式中,所述获取多个待合并代码分支,包括:
在监听到所述第一类代码分支中的代码文件发生变更的情况下,在代码服务器中获取所述第一类代码分支的对应多个版本的上级代码分支;
在所述多个版本的上级代码分支中确定对应目标版本的上级代码分支为所述第二类代码分支。
第二方面,本公开实施例还提供一种代码分支合并装置,包括:
获取单元,用于获取多个待合并代码分支;其中,所述多个待合并代码分支中包含第一类代码分支和第二类代码分支,所述第一类代码分支中包含待合并至所述第二类代码分支的代码文件;
确定单元,用于确定所述第一类代码分支中各代码文件的合并类型;
分组单元,用于基于所述合并类型对所述第一类代码分支中的代码文件进行分组,得到至少一个待合并代码组,以及确定每个所述待合并代码组的合并策略;
合并单元,用于根据所述合并策略将每个所述待合并代码组和所述第二类代码分支进行合并,得到分支合并结果。
第三方面,本公开实施例还提供一种计算机设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当计算机设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。
第四方面,本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。
本公开实施例提供的代码分支合并方法、装置、计算机设备以及存储介质,在本公开实施例中,在获取到包含第一类代码分支和第二类代码分支的多个待合并代码分支之后,就可以基于第一类代码分支中各代码文件的合并类型对该第一类代码分支中的代码文件进行分组,得到至少一个待合并代码组,并根据每个待合并代码组的合并策略将每个待合并代码组和第二类代码分支进行合并,得到分支合并结果,从而提高了代码分支合并的灵活性,并提高了代码分支的合并效率,进而提高了项目开发的效率。
为使本公开的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本公开实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
本文中术语“和/或”,仅仅是描述一种关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中术语“至少一种”表示多种中的任意一种或多种中的至少两种的任意组合,例如,包括A、B、C中的至少一种,可以表示包括从A、B和C构成的集合中选择的任意一个或多个元素。
经研究发现,在现有的代码分支合并的方案中,针对不同类型的待合并的代码分支通常都是采用相同的合并策略,导致代码分支合并的灵活性较低,同时代码分支合并的效率较低,影响了项目开发的效率。
基于上述研究,本公开提供了一种代码分支合并方法、装置、计算机设备以及存储介质。在本公开实施例中,在获取到包含第一类代码分支和第二类代码分支的多个待合并代码分支之后,就可以基于第一类代码分支中各代码文件的合并类型对该第一类代码分支中的代码文件进行分组,得到至少一个待合并代码组,并根据每个待合并代码组的合并策略将每个待合并代码组和第二类代码分支进行合并,得到分支合并结果,从而提高了代码分支合并的灵活性,并提高了代码分支的合并效率,进而提高了项目开发的效率。
为便于对本实施例进行理解,首先对本公开实施例所公开的一种代码分支合并方法进行详细介绍,本公开实施例所提供的代码分支合并方法的执行主体一般为具有一定计算能力的计算机设备。在一些可能的实现方式中,该代码分支合并方法可以通过处理器调用存储器中存储的计算机可读指令的方式来实现。
参见图1所示,为本公开实施例提供的一种代码分支合并方法的流程图,所述方法包括步骤S101~S107,其中:
S101:获取多个待合并代码分支;其中,所述多个待合并代码分支中包含第一类代码分支和第二类代码分支,所述第一类代码分支中包含待合并至所述第二类代码分支的代码文件。
在本公开实施例中,在针对软件进行项目开发的过程中,可以采取多个代码分支并行开发的多人协同开发模式,其中,每个代码分支可以用于承载该软件中不同功能的功能特性。因此,首先需要获取多个代码分支中的待合并代码分支,这里,该待合并代码分支中包含第一类代码分支以及第二类代码分支,该第一类代码分支可以用于合并到第二类代码分支中。也即,第二类代码分支可以理解为第一类代码分支的上游分支,且第一类代码分支的数量可以为多个。
具体的,上述第一类代码分支中包含多个代码文件,其中,每个代码文件可以包含该第一类代码分支中的至少部分代码。例如,第一类代码分支A中包含代码文件A1、A2、A3,其中,该第一类代码分支A为用于承载软件中某个功能X的功能特性的分支,A1、A2、A3分别包含该功能X不同的子功能的代码。
S103:确定所述第一类代码分支中各代码文件的合并类型。
在本公开实施例中,在对上述待合并代码分支进行合并时可以采用不同的合并策略。这里,针对同一条第一类代码分支中的各代码文件可以分别采取不同的合并策略。
因此,在对上述第一类代码分支执行合并操作之前,可以分别确定该第一类代码分支中各代码文件的合并类型,以便分别根据合并类型对各代码文件采取对应的合并策略。这里,合并策略用于指示待合并至第二类代码分支中的合并内容,例如,合并内容可以为代码,还可以为非代码类数据。
具体的,上述合并类型可以包括以下几种类型:
类型一:立即合并型。
在本公开实施例中,针对合并类型为立即和合并型的代码文件,在将第一类代码分支合并到第二类代码分支时采用的合并策略为立即合并。
这里,立即合并可以理解为在无任何延时的情况下,立即将第一类代码分支中待合并的代码文件合并第二类代码分支。
类型二:延时合并型。
在代码文件的合并类型为延时合并型的情况下,可以首先确定第一类代码分支中待合并的代码文件的合并时机,其中,该合并时机可以为在指定合并时间到来的时候进行合并操作,也可以为触发式合并。
这里,触发式合并可以理解为在检测到用户发送的合并指令后,对该代码文件执行合并操作。
类型三:禁止合并型。
在代码文件的合并类型为禁止合并型的情况下,在将第一类代码分支合并到第二类代码分支的过程中,采用的合并策略为不将该代码文件中包含的代码合并到第二类代码分支中,而是合并该代码文件中的非代码类数据。
S105:基于所述合并类型对所述第一类代码分支中的代码文件进行分组,得到至少一个待合并代码组,以及确定每个所述待合并代码组的合并策略。
在本公开实施例中,首先可以对第一类代码分支中的代码文件进行分组,从而得到至少一个待合并代码组。具体实施时,可以根据各代码文件的合并类型进行分组,例如,将第一类代码分支中合并类型相同的代码文件划分为至少一个代码组,从而得到至少一个待合并代码组。
在得到上述至少一个待合并代码组后,就可以基于每个待合并代码组中的代码文件的合并类型,确定和该合并类型相匹配的合并策略,并将该合并策略确定为该待合并代码组的合并策略。
S107:根据所述合并策略将每个所述待合并代码组和所述第二类代码分支进行合并,得到分支合并结果。
在一种可选的实施方式中,在将第一类代码分支合并到第二类代码分支的过程中,可以根据第一类代码分支中每个待合并代码组的合并类型决定合并次序,从而保证分支合并的合并效率。例如,该合并次序可以为优先合并立即合并型的待合并代码组,再合并延时合并型的待合并代码组。
具体实施时,可以首先获取第一类代码分支中合并类型为立即合并型的待合并代码组,并将该立即合并型的待合并代码组和第二类代码分支进行合并。然后,在获取第一类代码分支中合并类型为延时合并型的待合并代码组,分别确定该延时合并型的待合并代码的组合并时机,并基于该合并时机,将该延时合并型的待合并代码组和第二类代码分支进行合并。
在另一种可选的实施方式中,可以基于第一类代码分支中各代码文件的更新时间,确定该第一类代码分支中的各待合并代码组的合并顺序。这里,该合并顺序可以为按照更新时间由先到后进行排序的。
例如,待合并代码组1中包含代码文件A1、A2,其中,A1的更新时间为2021/1/3,A2的更新时间为2021/1/5,待合并代码组2中包含代码文件A3,其中,A3的更新时间为2021/2/5。那么,在进行分支合并的过程中,合并顺序应当为优先合并待合并代码组1,在待合并代码组1合并结束后再合并待合并代码组2。
通过上述描述可知,在本公开实施例中,在获取到包含第一类代码分支和第二类代码分支的多个待合并代码分支之后,就可以基于第一类代码分支中各代码文件的合并类型对该第一类代码分支中的代码文件进行分组,得到至少一个待合并代码组,并根据每个待合并代码组的合并策略将每个待合并代码组和第二类代码分支进行合并,得到分支合并结果,从而提高了代码分支合并的灵活性,并提高了代码分支的合并效率,进而提高了项目开发的效率。
在一个可选的实施方式中,上述步骤S101,获取多个待合并代码分支,具体包括如下过程:
S1011:在监听到所述第一类代码分支中的代码文件发生变更的情况下,在代码服务器中获取所述第一类代码分支的对应多个版本的上级代码分支。
在本公开实施例中,如图2所示为获取多个待合并代码分支的过程,其中,代码仓库用于存储针对上述软件进行项目开发的过程中产生的多条代码分支。
这里,每条代码分支都可以关联至少一个代码开发人员,在针对上述软件进行项目开发的过程中,代码提交人员可以针对所负责的代码分支中的代码文件进行修改,并将修改之后得到的第一类代码分支上传至代码仓库中。
代码仓库在监听到第一类代码分支中的代码文件发生变更的情况下,就可以获取该第一类代码分支的关联关系,从而得到该第一类代码分支所对应的上级代码分支。这里,第一类代码分支的关联关系可以为预先设定的,也可以为自动认定的。
例如,假设,待合并代码分支包含待合并代码分支B1和待合并代码分支B2。其中,待合并代码分支B1为用于承载软件中某个功能Y的功能特性的分支,待合并代码分支B2为用于承载软件中某个功能Y中子功能的功能特性的分支。那么,在第一类代码分支为待合并代码分支B2时,就可以将待合并代码分支B1自动认定为和该待合并代码分支B2具有关联关系的代码分支。
S1012:在所述多个版本的上级代码分支中确定对应目标版本的上级代码分支为所述第二类代码分支。
在本公开实施例中,上述上级代码分支在本地文件中可以对应着多个版本,其中,每个版本的上级代码分支中所包含的代码文件的数量和内容可以为不同的,例如,待合并代码分支B2在代码仓库中可以对应着版本1和版本2,其中,版本1中包含的代码文件可以为A1、A2、A3,版本2中包含的代码文件可以为A1、A2、A3、A4。
因此,在确定第一类代码分支所对应的第二类代码分支的过程中,首先需要确定上述上级代码分支是否对应多个版本,在该上级代码分支在本地文件中对应多个版本的情况下,就可以在这多个版本中确定出目标版本,从而确定出该目标版本所对的上级代码分支,并将该目标版本的上级代码分支为第二类代码分支。
在一种可选的实施方式中,可以根据每个版本的更新日期,在上级代码分支的多个版本中确定出目标版本,例如,将更新日期最晚的版本确定为目标版本。
在另一种可选的实施方式中,还可以根据第一类代码分支的关联关系确定出该第一类代码分支所对应的目标版本的上级代码分支。具体实施时,可以首先获取上述第一类代码分支的关联关系,并确定该关联关系所指示的目标版本的版本标识,然后,就可以将上级分支代码所对应的多个版本中命中该版本标识的版本确定为目标版本。
另外的,如图2所示,在确定出包含第一类代码分支以及该第一类合并分支所对应的第二类合并分之后,就可以将该第一类代码分支发送至本地合并服务器中,并向该本地合并服务器中针对上述第一类合并分支以及第二类合并分支的合并指令,应理解的是,该合并指令中包含第二类合并分支的分支标识,以使本地合并服务基于该分支标识在本地文件中确定第二类合并分支。
需要说明的是,在针对上述待合并代码分支中的第一类代码分支以及第二类代码分支进行合并,得到分支合并结果后,就可以将该分支合并结果作为第二类合并分支的新增版本保存到本地文件中,并将该分支合并结果发送至代码仓库,以使代码仓库存储该分支合并结果。
通过上述描述可知,在监听到第一类代码分支中的代码文件发生变更的情况下,就可以自动该第一类代码分支所对应的第二类代码分支,从而能够基于该第一类代码分支和第二类代码分支进行分支合并操作,无需技术人员手动选择需要合并的第一类代码分支和第二类代码分支,提高了分支合并的效率以及自动化程度。
在一个可选的实施方式中,上述步骤S103,确定所述第一类代码分支中各代码文件的合并类型,具体包括如下过程:
(1)、获取所述第一类代码分支中各代码文件中的合并信息;
(2)、在所述合并信息中查找预设关键信息,得到查找结果;其中,所述查找结果用于指示合并信息中是否包含预设关键信息,和/或,所查找到的预设关键信息的信息内容,包含不同信息内容的预设关键信息对应不同的合并类型;
(3)、基于所述查找结果确定所述第一类代码分支中每个所述代码文件的合并类型。
在本公开实施例中,上述各代码文件中包含合并信息,其中,该合并信息用于指示上述软件中的其他代码分支合并到上述第一类代码分支上的合并记录,其中,该合并记录中可以包含合并时间和/或其他代码分支的功能注释信息,应理解的是,该代码文件中所包含的代码为上述其他代码分支中的代码。
在获取到上述第一类代码分支中各代码文件中的合并信息后,就可以在该合并信息中查找预设关键信息,得到查找结果。这里,在该合并信息中查找预设关键信息时,可以针对该合并信息的关键字段进行查找,从而节省查找时间,其中,该关键字段为包含预设关键信息的字段。
在本公开实施例中,上述第一类代码分支的代码提交人员在提交该第一类代码分支之前,可以对该第一类代码分支中的各代码文件进行标注操作,具体的,该标注操作可以为在代码文件的关键字段中写入预设关键信息。
这里,可以根据代码文件的合并类型为该代码文件写入预设关键信息。例如,在代码文件的合并类型为立即合并型的情况下,该代码文件所对应的预设关键信息的信息内容可以为MERGE;在代码文件的合并类型为延时合并型的情况下,该代码文件所对应的预设关键信息的信息内容可以为DELAYMERGE;在代码文件的合并类型为禁止合并型的情况下,该代码文件所对应的预设关键信息的信息内容可以为DONOTMERGE或者IGNORE。
具体实施时,可以为上述第一类代码分支中全部合并类型的代码文件写入预设关键信息,也可以为至少一种合并类型的代码文件写入预设关键信息,例如,为合并类型为禁止合并型的代码文件写入预设关键信息。
在得到第一类代码分支中个代码文件的查找结果后,就可以基于该查找结果确定每个代码文件的合并类型。具体实施时,在查找结果中包含预设关键信息的情况下,就可以获取该预设关键信息的信息内容,并确定该信息内容所对应的合并类型,从而确定代码文件的合并类型。另外的,在查找结果中不包含预设关键信息的情况下,就可以将该代码文件确定为默认合并类型,其中,该默认合并类型为提前设置的,例如,可以将不包含预设关键信息的代码文件的默认合并类型确定为立即合并型。
通过上述描述可知,通过对第一类代码分支中各代码文件的合并信息进行查找,就可以确定该代码文件的合并类型,从而便于根据每个代码文件的合并类型对该代码文件进行合并,提高了代码分支合并的灵活性。
在一个可选的实施方式中,确定所述第一类代码分支中各代码文件的合并类型,还包括如下过程:
(1)、获取所述第一类代码分支的分支合并列表;其中,所述分支合并列表包含所述第一类代码分支中至少部分代码文件的标识信息,所述标识信息包含对应代码文件的文件标识和/或该代码文件的类型标识;
(2)、基于所述分支合并列表中的标识信息,确定所述第一类代码分支中至少部分代码文件的合并类型。
在本公开实施例中,可以预先为第一类代码分支建立分支合并列表,具体实施时,代码提交人员可以将第一类代码分支中至少部分代码文件的标识信息传入该分支合并列表中,其中,该标识信息包括代码文件的文件标识和/或类型标识,其中,该类型标识可以包含该代码文件所对应的预设关键信息的信息内容。这里,该的分支合并列表可以分为以下几种类型:
类型一:包含对应代码文件的文件标识和/或该代码文件的类型标识。
在本公开实施例中,可以为上述第一类代码分支中的某一种合并类型的代码文件建立分支合并列表,此时,该分支合并列表中包含对应代码文件的文件标识,并且可以不包含对应代码文件的类型标识,同时,可以将该分支合并列表的类型标识确定为其中所包含的代码文件的类型标识。例如,可以为合并类型为禁止合并型的代码文件建立分支合并列表,此时,该分支合并列表的类型标识为禁止合并型。
类型二:包含对应代码文件的文件标识以及该代码文件的类型标识。
在本公开实施例中,可以为上述第一类代码分支中的全部合并类型的代码文件建立分支合并列表,此时,该分支合并列表中包含对应代码文件的文件标识,同时还应当包含该代码文件的标识类型。
应理解的是,在上述第一类代码分支中的代码文件的合并类型发生变更的情况下,可以通过修改分支合并列表的方式更新对应的代码文件的合并类型,而不用额外修改代码文件中预设关键信息的信息内容,从而节省了人力成本。
在本公开实施例中,在获取到上述第一类代码分支的分支合并列表后,就可以读取该分支合并列表中所包含的至少部分代码文件的标识信息。具体实施时,针对上述分支合并列表的多种类型,包括以下几种实施方式:
方式一:
在分支合并列表的类型为类型一的情况下,首先基于该分支合并列表的类型标识确定该分支合并列表所指示的代码文件的合并类型,然后,就可以读取该分支合并列表中所包含的文件标识,并在第一类代码分支中确定和该文件标识相匹配的代码文件。
方式二:
在分支合并列表的类型为类型二的情况下,首先可以读取该分支合并列表中的文件标识以及各文件标识对应的类型标识,然后就可以基于读取到的文件标识在第一类代码分支中确定对应的代码文件,并确定各代码文件在分支合并列表中所对应的类型标识,从而基于该类型标识中所包含的预设关键信息确定该代码文件的合并类型。
通过上述描述可知,在获取到第一类代码分支的分支合并列表后,就可以基于该分支合并列表中的标识信息确定对应的代码文件的合并类型,从而提高代码分支合并的效率。另外的,在第一类代码分支中的代码文件的合并类型发生变更的情况下,可以通过修改分支合并列表的方式更新对应的代码文件的合并类型,而不用额外修改代码文件中预设关键信息的信息内容,从而节省了人力成本。
在一个可选的实施方式中,上述步骤S105,基于所述合并类型对所述第一类代码分支中的代码文件进行分组,得到至少一个待合并代码组,具体包括如下过程:
S1051:基于所述合并类型在所述第一类代码分支中确定至少一个分割位置;其中,所述第一类代码分支中位于每个分割位置两侧的代码文件的合并类型不相同。
在本公开实施例中,如图3所示为针对第一类代码分支A中的代码文件进行分组的过程,其中,该第一类代码分支A中包含的代码文件分别为E1、E2、E3、E4、E5、E6、E7,这里,该第一类代码分支A中的代码文件按照更新时间由先到后的顺序进行排列。
因此,在对上述第一类代码分支进行分组前,首先应当确定该第一类代码分支中的至少一个分割位置,其中,位于该分割位置两侧的代码文件的合并类型不相同。
例如,如图3所示,代码文件E1、E2、E3的合并类型为立即合并型,代码文件E4的合并类型为禁止合并型,代码文件E5、E6、E7的合并类型为立即合并型。因此,第一类代码分支E中的分割位置分别为代码文件E4的两侧。
S1052:按照所述至少一个分割位置对所述第一类代码分支进行分割,得到所述至少一个待合并代码组。
在本公开实施例中,在按照上述至少一个分割位置对第一类代码分支进行分割之后,就可以得到多个代码文件组。接下来,就可以分别将每个代码文件组确定为待合并代码组,并基于每个待合并代码组中所包含的代码文件的合并类型,确定该待合并代码组所对应的合并类型,以便基于该合并类型确定该待合并代码组所应采取的合并策略。
通过上述描述可知,首先可以确定第一类代码分支中至少一个分割位置的方式,并根据至少一个分割位置对该第一类代码分支进行分割,从而得到多个待合并代码组,其中,每个待合并代码组中的代码文件的合并类型相同,以便能够按照待合并代码组对第一类代码分支进行合并操作,提高了代码分支合并的效率。
在一个可选的实施方式中,上述步骤S107,按照所述合并策略将每个所述待合并代码组和所述第二类代码分支进行合并,得到分支合并结果,具体包括如下过程:
S1071:在所述第二类代码分支中确定每个所述待合并代码组中各代码文件的待合并对象。
在本公开实施例中,首先需要在第二类代码分支中确定每个待合并代码组中各代码文件的待合并对象,这里,每个代码文件可以包含软件中功能X的至少部分代码,因此,该代码文件在第二类代码分支中所对应的待合并对象就可以为该功能X的代码文件。
具体的,如图4a所示为一种第一类代码分支和第二类代码分支进行合并的示意图,这里,第一类代码分支A中包含两个待合并代码组A1和A2,待合并代码组A1中所包含的代码文件A3、A4、A5所对应的合并类型为立即合并型,待合并代码组A2中所包含的代码文件A6、A7、A8所对应的合并类型为延时合并型。
另外的,待合并代码组A1中所包含的全部代码文件可以对应软件中的功能X,待合并代码组A2中所包含的全部代码文件可以对应软件中的功能Y。第二类代码分支B中包含两个代码文件B1和B2,其中,代码文件B1对应软件中的功能X,代码文件B2对应软件中的功能Y。
因此,上述第一类代码分支A中的待合并代码组A1中各代码文件所对应的待合并对象为代码文件B1,上述第一类代码分支A中的待合并代码组A2中各代码文件所对应的待合并对象为代码文件B2。
S1072:按照所述合并策略将每个所述待合并代码组中的各代码文件与该代码文件所对应的待合并对象进行合并,得到所述分支合并结果。
在本公开实施例中,如图4a所示的待合并代码组A1中的代码文件所对应的合并策略为立即合并,待合并代码组A2中的代码文件所对应的合并策略为根据上述合并时机进行合并。
在按照合并策略将每个待合并代码组中的各代码文件与该代码文件所对应的待合并对象进行合并后,就可以得到如图4a所示的代码分支B’,并将该代码分支B’确定为分支合并结果,其中,该代码分支B’中的代码文件B1’为待合并代码组A1与待合并对象B1的合并结果,该代码分支B’中的代码文件B2’为待合并代码组A2与待合并对象B2的合并结果。
通过上述描述可知,首先可以在第二类代码分支中确定每个待合并代码组中各代码文件的待合并对象,从而根据该待合并对象,按照对应的合并策略对待合并代码组与第二类代码分支进行合并,从而提高了代码合并的准确性。
在一个可选的实施方式中,可以将上述代码文件中包含的代码确定为目标改动代码,那么上述步骤S1071,在所述第二类代码分支中确定每个所述待合并代码组中各代码文件的待合并对象,具体包括如下过程:
(1)、在所述合并类型为第一类型的情况下,获取每个所述待合并代码组中各代码文件的文件标识;其中,所述第一类型用于指示对应代码文件中的目标改动代码为需要合并至所述第二类代码分支;
(2)、在所述第二类代码分支中确定与所述文件标识相匹配的目标代码文件,并将所述相匹配的目标代码文件确定为所述待合并对象。
在本公开实施例中,第一类型的合并类型可以包含上述立即合并型或者上述延时合并型,上述各代码文件的文件标识可以用于指示该代码文件所对应的软件中功能的功能标识。
因此,在第二类代码文件分支中确定对应的待合并对象的过程中,就可以首先确定和上述文件标识相同的目标代码文件,其中,该目标代码文件的文件标识所指示的软件中的功能和代码文件相同。
例如,如图4a所示,第一类代码分支中的代码文件A3、A4、A5的文件标识所指示的功能标识为功能X,第二类代码分支中的代码文件B1的文件标识所指示的功能标识同样为功能X,因此,代码文件B1为代码文件A3、A4、A5所对应的待合并对象。
通过上述描述可知,通过确定第一类代码分支中代码文件的文件标识的方式,就可以在第二类代码分支中确定和该文件标识相匹配的目标代码文件,其中,该文件标识可以用于指示该代码文件所对应的软件中功能的功能标识,从而进一步提高了代码合并的准确性。
在一个可选的实施方式中,上述代码文件包含目标改动代码和合并信息,上述步骤S107,按照所述合并策略将每个所述待合并代码组和所述第二类代码分支进行合并,得到分支合并结果,还包括如下过程:
在所述合并类型为第一类型的情况下,将每个所述待合并代码组的各代码文件中的目标改动代码和合并信息,与所述第二类代码分支进行合并,得到所述分支合并结果;其中,所述第一类型用于指示对应代码文件中的目标改动代码为需要合并到所述第二类代码分支中。
在本公开实施例中,由上述实施方式可知,合并信息用于指示上述软件中的其他代码分支合并到上述第一类代码分支上的合并记录,其中,该合并记录中可以包含合并时间和/或其他代码分支的功能注释信息。
因此,在合并类型为第一类型的情况下,在将代码文件中的目标改动代码和第二类代码分支进行合并的过程中,还可以将该代码文件中的合并信息和该第二类代码分支中的待合并对象进行合并。
例如,如图4a所示,第一类代码分支A中的代码文件A3所对应的合并信息记为A3,第二类代码分支B中的代码文件B1所对应的合并信息记为B1,因此,在将该代码文件A3和代码文件B1进行合并时,需要将代码文件A3中所包含的目标改动代码以及合并信息A3合并到代码文件B1中。
通过上述描述可知,通过将代码文件中的合并信息和改动代码合并到第二类代码分支中的方式,能够使得合并之后得到的代码分支中保留第一类代码分支中的代码文件的合并信息,从而完善了合并之后得到的代码分支中的内容。
在一个可选的实施方式中,上述步骤S107,按照所述合并策略将每个所述待合并代码组和所述第二类代码分支进行合并,得到分支合并结果,还包括如下过程:
(1)、在所述合并类型为第二类型的情况下,在所述第二类代码分支中确定所述待合并代码组的合并位置;
(2)、按照所述合并位置将每个所述待合并代码组的各代码文件中的合并信息与所述第二类代码分支进行合并,得到所述分支合并结果;其中,所述第二类型用于指示对应代码文件中的目标改动代码为不需要合并到所述第二类代码分支中。
在本公开实施例中,第二类型的合并类型可以为上述禁止合并型,在代码文件的合并类型为第二类型的情况下,就可以在第二类代码分支中确定该代码文件所对应的合并位置,其中,该合并位置可以基于第一类代码分支中合并类型为第一类型的代码文件的待合并对象确定。
具体实施时,首先可以确定该第二类型的代码文件所属的待合并代码组,并确定该待合并代码组两侧的第一类型的代码文件,接下来,分别确定两侧的第一类型的代码文件在第二类代码分支中所对应的两个待合并对象,然后,就可以将这两个待合并对象中间的位置确定为上述合并位置。
在本公开实施例中,如图4b所示为另一种第一类代码分支和第二类代码分支进行合并的示意图,这里,第一类代码分支C中包含三个待合并代码组C1、C2和C3,待合并代码组C1中所包含的代码文件C4、C5所对应的合并类型为立即合并型,待合并代码组C2中所包含的代码文件C6、C7所对应的合并类型为禁止合并型,待合并代码组C3中所包含的代码文件C8、C9所对应的合并类型为立即合并型。
另外的,第二类代码分支D中包含代码文件D1、D2以及D3,其中,上述第一类代码分支C中的代码文件C4对应的待合并对象为代码文件D1,代码文件C5对应的待合并对象为代码对象D2,代码文件C8、C9对应的待合并对象为代码文件D3。
在将第一类代码分支C合并到第二类代码文件D中的过程中,需要确定第一类代码分支C中第二类型的待合并代码组C2在第二类代码文件D中的合并位置。
具体的,上述待合并代码组C2两侧的第一类型的代码文件分别为C5和C8,代码文件C5在第二类代码文件D中所对应的待合并对象为D2,代码文件C8在第二类代码文件D中所对应的待合并对象为D3,因此,待合并代码组C2在第二类代码分支中的合并位置位于代码文件D3和代码文件D4之间。
在按照合并位置将每个待合并代码组的各代码文件中的合并信息与第二类代码分支进行合并后,就可以得到如图4b所示的代码分支D’,并将该代码分支D’确定为分支合并结果。其中,该代码分支D’中的代码文件D1’为代码文件C4与待合并对象D1的合并结果,该代码分支D’中的C6和C7为上述代码文件C6和C7的合并信息,该代码分支D’中的代码文件D2’为代码文件C5与待合并对象D2的合并结果,该代码分支D’中的代码文件D3’为代码文件C8、C9与待合并对象D3的合并结果。
通过上述描述可知,在第一类代码分支中包含合并类型为第二类型的待合并代码组的情况下,通过将第二类型的待合并代码组中的合并信息合并到第二类代码分支中的方式,能够使得合并之后得到的代码分支中保留第一类代码分支中的代码文件的合并信息,从而进一步完善了合并之后得到的代码分支中的内容。
在一个可选的实施方式中,上述方法还包括如下过程:
(1)、在按照所述合并策略将每个所述待合并代码组和所述第二类代码分支进行合并的过程中,检测合并中断事件;
(2)、在检测到所述合并中断事件的情况下,确定各所述待合并代码组中的中断代码文件;
(3)、向所述中断代码文件所属的提交对象发送所述合并中断事件,以使所述提交对象对所述中断代码文件进行修改;
(4)、获取所述提交对象返回的修改后中断代码文件,并将所述修改后中断代码文件继续与所述第二类代码分支进行合并。
在本公开实施例中,在将待合并代码组述第二类代码分支进行合并的过程中,可能会出现合并中断事件,这里,导致该合并中断事件发生的原因有多种,例如,代码冲突事件。具体的,该代码冲突事件发生的一种原因可能为:在第二类代码分支中包含当前正在提交的待合并代码组的合并信息。
在检测到上述合并中断事件后,就可以确定该合并中断事件所对应的待合并代码组,并基于该待合并代码组的合并进程确定当前正在合并的代码文件,并将该代码文件确定为中断代码文件。
如图2所示,在确定出上述中断代码文件后,就可以确定该中断代码文件所属的提交对象,也即上述代码提交人员,并向该代码提交人员发送该合并中断事件,具体的,还可以同时向代码提交人员发送该中断代码文件,针对该中断代码文件的修改请求,以及该合并中断事件的发生的原因。
在提交对象对上述中断代码文件进行修改之后,就可以将修改后中断代码文件返回到如图2所示的本地合并服务中,以使该本地合并服务将修改后中断代码文件继续与第二类代码分支进行合并。
通过上述描述可知,在按照合并策略将每个待合并代码组和第二类代码分支进行合并的过程中,在发生合并中断事件的情况下,可以将该合并中断事件发送至该中断代码文件所属的提交对象,以使该提交对象能够修改该中断代码文件,从而得到修改后中断代码文件,使得代码分支合并进程能够顺利进行,完善了代码分支合并方法的执行流程。
综上,在本公开实施例中,在获取到包含第一类代码分支和第二类代码分支的多个待合并代码分支之后,就可以基于第一类代码分支中各代码文件的合并类型对该第一类代码分支中的代码文件进行分组,得到至少一个待合并代码组,并根据每个待合并代码组的合并策略将每个待合并代码组和第二类代码分支进行合并,得到分支合并结果,从而提高了代码分支合并的灵活性,并提高了代码分支的合并效率,进而提高了项目开发的效率。
本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的撰写顺序并不意味着严格的执行顺序而对实施过程构成任何限定,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。
基于同一发明构思,本公开实施例中还提供了与代码分支合并方法对应的代码分支合并装置,由于本公开实施例中的装置解决问题的原理与本公开实施例上代码分支合并方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
参照图5所示,为本公开实施例提供的一种代码分支合并装置的示意图,所述装置包括:获取单元51、确定单元52、分组单元53、合并单元54;其中,
获取单元51,用于获取多个待合并代码分支;其中,所述多个待合并代码分支中包含第一类代码分支和第二类代码分支,所述第一类代码分支中包含待合并至所述第二类代码分支的代码文件;
确定单元52,用于确定所述第一类代码分支中各代码文件的合并类型;
分组单元53,用于基于所述合并类型对所述第一类代码分支中的代码文件进行分组,得到至少一个待合并代码组,以及确定每个所述待合并代码组的合并策略;
合并单元54,用于根据所述合并策略将每个所述待合并代码组和所述第二类代码分支进行合并,得到分支合并结果。
在本公开实施例中,在获取到包含第一类代码分支和第二类代码分支的多个待合并代码分支之后,就可以基于第一类代码分支中各代码文件的合并类型对该第一类代码分支中的代码文件进行分组,得到至少一个待合并代码组,并根据每个待合并代码组的合并策略将每个待合并代码组和第二类代码分支进行合并,得到分支合并结果,从而提高了代码分支合并的灵活性,并提高了代码分支的合并效率,进而提高了项目开发的效率。
一种可能的实施方式中,确定单元52,还用于:
获取所述第一类代码分支中各代码文件中的合并信息;
在所述合并信息中查找预设关键信息,得到查找结果;其中,不同预设关键信息对应不同的合并类型;
基于所述查找结果确定所述第一类代码分支中每个所述代码文件的合并类型。
一种可能的实施方式中,确定单元52,还用于:
获取所述第一类代码分支的分支合并列表;其中,所述分支合并列表包含所述第一类代码分支中至少部分代码文件的标识信息,所述标识信息包含对应代码文件的文件标识和/或该代码文件的类型标识;
基于所述分支合并列表中的标识信息,确定所述第一类代码分支中至少部分代码文件的合并类型。
一种可能的实施方式中,分组单元53,还用于:
基于所述合并类型在所述第一类代码分支中确定至少一个分割位置;其中,所述第一类代码分支中位于每个分割位置两侧的代码文件的合并类型不相同;
按照所述至少一个分割位置对所述第一类代码分支进行分割,得到所述至少一个待合并代码组。
一种可能的实施方式中,合并单元54,还用于:
在所述第二类代码分支中确定每个所述待合并代码组中各代码文件的待合并对象;
按照所述合并策略将每个所述待合并代码组中的各代码文件与该代码文件所对应的待合并对象进行合并,得到所述分支合并结果。
一种可能的实施方式中,所述代码文件包含目标改动代码,合并单元54,还用于:
在所述合并类型为第一类型的情况下,获取每个所述待合并代码组中各代码文件的文件标识;其中,所述第一类型用于指示对应代码文件中的目标改动代码为需要合并至所述第二类代码分支;
在所述第二类代码分支中确定与所述文件标识相匹配的目标代码文件,并将所述相匹配的目标代码文件确定为所述待合并对象。
一种可能的实施方式中,所述代码文件包含目标改动代码和合并信息;合并单元54,还用于:
在所述合并类型为第一类型的情况下,将每个所述待合并代码组的各代码文件中的目标改动代码和合并信息,与所述第二类代码分支进行合并,得到所述分支合并结果;其中,所述第一类型用于指示对应代码文件中的目标改动代码为需要合并到所述第二类代码分支中。
一种可能的实施方式中,所述代码文件包含目标改动代码和合并信息,合并单元54,还用于:
在所述合并类型为第二类型的情况下,在所述第二类代码分支中确定所述待合并代码组的合并位置;
按照所述合并位置将每个所述待合并代码组的各代码文件中的合并信息与所述第二类代码分支进行合并,得到所述分支合并结果;其中,所述第二类型用于指示对应代码文件中的目标改动代码为不需要合并到所述第二类代码分支中。
一种可能的实施方式中,该装置还用于:
在按照所述合并策略将每个所述待合并代码组和所述第二类代码分支进行合并的过程中,检测合并中断事件;
在检测到所述合并中断事件的情况下,确定各所述待合并代码组中的中断代码文件;
向所述中断代码文件所属的提交对象发送所述合并中断事件,以使所述提交对象对所述中断代码文件进行修改;
获取所述提交对象返回的修改后中断代码文件,并将所述修改后中断代码文件继续与所述第二类代码分支进行合并。
一种可能的实施方式中,获取单元51,还用于:
在监听到所述第一类代码分支中的代码文件发生变更的情况下,在代码服务器中获取所述第一类代码分支的对应多个版本的上级代码分支;
在所述多个版本的上级代码分支中确定对应目标版本的上级代码分支为所述第二类代码分支。
关于装置中的各单元的处理流程、以及各单元之间的交互流程的描述可以参照上述方法实施例中的相关说明,这里不再详述。
对应于图1中的代码分支合并方法,本公开实施例还提供了一种计算机设备600,如图6所示,为本公开实施例提供的计算机设备600结构示意图,包括:
处理器61、存储器62、和总线63;存储器62用于存储执行指令,包括内存621和外部存储器622;这里的内存621也称内存储器,用于暂时存放处理器61中的运算数据,以及与硬盘等外部存储器622交换的数据,处理器61通过内存621与外部存储器622进行数据交换,当所述计算机设备600运行时,所述处理器61与所述存储器62之间通过总线63通信,使得所述处理器61执行以下指令:
获取多个待合并代码分支;其中,所述多个待合并代码分支中包含第一类代码分支和第二类代码分支,所述第一类代码分支中包含待合并至所述第二类代码分支的代码文件;
确定所述第一类代码分支中各代码文件的合并类型;
基于所述合并类型对所述第一类代码分支中的代码文件进行分组,得到至少一个待合并代码组,以及确定每个所述待合并代码组的合并策略;
根据所述合并策略将每个所述待合并代码组和所述第二类代码分支进行合并,得到分支合并结果。
本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中所述的代码分支合并方法的步骤。其中,该存储介质可以是易失性或非易失的计算机可读取存储介质。
本公开实施例还提供一种计算机程序产品,该计算机程序产品承载有程序代码,所述程序代码包括的指令可用于执行上述方法实施例中所述的代码分支合并方法的步骤,具体可参见上述方法实施例,在此不再赘述。
其中,上述计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一个可选实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一个可选实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(Software Development Kit,SDK)等等。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的***和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本公开所提供的几个实施例中,应该理解到,所揭露的***、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本公开的具体实施方式,用以说明本公开的技术方案,而非对其限制,本公开的保护范围并不局限于此,尽管参照前述实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本公开实施例技术方案的精神和范围,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应所述以权利要求的保护范围为准。