CN105867903A - 代码库拆分的方法及装置 - Google Patents

代码库拆分的方法及装置 Download PDF

Info

Publication number
CN105867903A
CN105867903A CN201511016900.6A CN201511016900A CN105867903A CN 105867903 A CN105867903 A CN 105867903A CN 201511016900 A CN201511016900 A CN 201511016900A CN 105867903 A CN105867903 A CN 105867903A
Authority
CN
China
Prior art keywords
code
storehouse
file
original code
original
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
CN201511016900.6A
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.)
Leshi Zhixin Electronic Technology Tianjin Co Ltd
Original Assignee
Leshi Zhixin Electronic Technology Tianjin Co Ltd
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 Leshi Zhixin Electronic Technology Tianjin Co Ltd filed Critical Leshi Zhixin Electronic Technology Tianjin Co Ltd
Priority to CN201511016900.6A priority Critical patent/CN105867903A/zh
Publication of CN105867903A publication Critical patent/CN105867903A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/36Software reuse
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种代码库拆分的方法及装置,涉及互联网技术领域,为解决代码库拆分效率低下的问题而发明。本发明的方法包括:读取预设的拆分配置文件,所述拆分配置文件用于对原代码库进行拆分;根据所述拆分配置文件中的原代码库信息获取原代码库的代码文件;根据所述拆分配置文件中的拆分配置信息对所述原代码库的代码文件进行拆分,获得多个目标代码库;将所述目标代码库推送给所述拆分配置文件指定的服务器。本发明主要应用于对release代码库拆分的过程中。

Description

代码库拆分的方法及装置
技术领域
本发明涉及互联网技术领域,尤其涉及一种代码库拆分的方法及装置。
背景技术
代码库提供了一种将代码封装在单个文件中、允许继承和修改这些文件的方法。开发者将各自的代码以文件的形式保存在代码库中,相互之间进行调用,实现代码共享。
随着项目的不断发展,代码库也会越来越大,过于庞大的代码库不仅会增加服务器的负荷压力,而且还会增加代码导出的耗时。因此拆分代码库便成为项目进展到一定阶段时必须考虑的问题。通常,可以将一个服务器上的代码库拆分为几个子代码库并分别部署到不同的服务器上,以此减轻单个服务器的负荷压力。同时,单个服务器上代码量的降低还可以提高查找目标代码的速度,由此缩短代码导出的耗时。
现有拆分代码库的过程是由操作人员基于导出管理工具手动操作完成的。操作人员需要在导出管理工具的操作界面中手动创建新的代码库,然后从原代码库的文件目录中复制不同分支的代码文件,最后以生成提交信息的形式将不同分支的代码文件导入到不同的新代码库中。可以看出,现有方式主要依靠人工操作拆分代码库,效率较为低下。
发明内容
本发明提供一种代码库拆分的方法及装置,能够解决代码库拆分效率低下的问题。
为解决上述问题,一方面,本发明提供了一种代码库拆分的方法,该方法包括:
读取预设的拆分配置文件,拆分配置文件用于对原代码库进行拆分;
根据拆分配置文件中的原代码库信息获取原代码库的代码文件;
根据拆分配置文件中的拆分配置信息对原代码库的代码文件进行拆分,获得多个目标代码库;
将目标代码库推送给拆分配置文件指定的服务器。
另一方面,本发明还提供了一种代码库拆分的装置,该装置包括:
读取单元,用于读取预设的拆分配置文件,拆分配置文件用于对原代码库进行拆分;
获取单元,用于根据拆分配置文件中的原代码库信息获取原代码库的代码文件;
拆分单元,用于根据拆分配置文件中的拆分配置信息对原代码库的代码文件进行拆分,获得多个目标代码库;
推送单元,用于将目标代码库推送给拆分配置文件指定的服务器。
本发明提供的代码库拆分的方法及装置,能够根据拆分配置文件中的原代码库信息获取作为拆分对象的代码文件,通过拆分配置信息将代码文件拆分为不同的目标代码库,并将目标代码库推送到相应的服务器中。与现有技术相比,代码文件的查找、拆分、推送等过程全部通过对拆分配置文件的执行自动实现,无需人工操作参与,因此本发明能够提高代码库的拆分效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种代码库拆分的方法流程图;
图2为本发明实施例提供的另一种代码库拆分的方法流程图;
图3为本发明实施例提供的一种代码库拆分的装置的组成框图;
图4为本发明实施例提供的另一种代码库拆分的装置的组成框图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为解决手动拆分代码库效率低下的问题,本发明一个实施例提供了一种代码库拆分的方法,如图1所示,该方法包括:
101、读取预设的拆分配置文件。
原代码库中的代码包括前端开发、***开发、网站开发等各种过程涉及的代码内容。以前端开发为例,原代码库中包括的代码不限于是组件代码、控件代码及窗体代码。本实施例不对原代码库中的代码类型进行限制。
通常原代码库中的代码是以动态链接库(Dynamic Link Library,简称DLL)文件的形式存储的,根据代码类型、代码功能、代码使用权限、代码所属部门等不同维度的划分,这些代码文件之间的从属关系能够形成一个文件目录结构,这个文件目录结构即为本实施例中的拆分对象。
本实施例的目的在于通过拆分配置文件将原代码库拆分为多个新的代码库。该拆分配置文件为根据预设拆分需求编写的配置文件,其中包括用于指定原代码库的原代码库信息、决定如何拆分代码文件以获得哪几个目标代码库的拆分配置信息、以及将目标代码库推送给哪个服务器的指定信息。拆分配置文件编写完成后配置到原代码库所在的服务器中,当操作人员触发代码库拆分指令时,该服务器读取并解析拆分配置文件,按照拆分配置文件中的参数对原代码库进行拆分。实际应用中,当拆分需求发生变化时,可以对拆分配置文件进行修改,然后重启服务器使新的拆分配置文件生效。本实施例中,拆分配置文件的格式包括但不限于是可扩展标记语言(Extensible MarkupLanguage,简称XML)格式及脚本格式。
102、根据拆分配置文件中的原代码库信息获取原代码库的代码文件。
通常一台服务器中可以仅部署一个代码库,也可以部署多个代码库;而在虚拟机环境中,由于服务器中的每一个虚拟机都可以部署一个或多个代码库,因此单台服务器上的代码库数量有可能会更多。为实现对作为拆分对象的原代码库的准确查找,本实施例在拆分配置文件中设置了原代码库信息,服务器通过原代码库信息可以定位查找到原代码库。拆分配置文件中可以记录一个原代码库的原代码库信息,也可以记录多个原代码库的原代码库信息。当实现方式为后者时,服务器可以一次对部署在自身的多个原代码库分别进行拆分。实际应用中,一切能够对原代码库进行唯一标识的信息均可以用作原代码库信息,本实施例不对原代码库信息的具体形式进行限制。
在根据原代码库信息查找到原代码库后,服务器获取原代码库中的代码文件,即上述文件目录结构中的内容。服务器可以根据实际需求获取全部文件目录结构中的文件内容,或者获取部分目录分支下的文件。本实施例后续以服务器获取全部文件目录结构中的文件内容为例进行说明。
103、根据拆分配置文件中的拆分配置信息对原代码库的代码文件进行拆分,获得多个目标代码库。
拆分配置信息中定义了将原代码库拆分成哪几个目标代码库,以及将原代码库中哪些代码文件拆分到哪个目标代码库中的相关信息。服务器根据拆分配置信息将原代码库的代码文件拆分为多个代码文件集合,即获得多个目标代码库。
104、将目标代码库推送给拆分配置文件指定的服务器。
拆分配置文件中记录有指定服务器的服务器地址,以及指定服务器与目标代码库的对应关系,服务器根据拆分配置文件中的指定信息,将各个目标代码库推送到指定的服务器中。
实际应用中,可以根据服务器的负载需求将所有目标代码库推送到原代码库所在的服务器中,也可以将所有目标代码库推送到一个新的服务器中,还可以将不同的目标代码库推送到不同的服务器中,本实施例不对目标代码库与服务器之间的对应关系进行限制。
本实施例提供的代码库拆分的方法,能够根据拆分配置文件中的原代码库信息获取作为拆分对象的代码文件,通过拆分配置信息将代码文件拆分为不同的目标代码库,并将目标代码库推送到相应的服务器中。与现有技术相比,代码文件的查找、拆分、推送等过程全部通过对拆分配置文件的执行自动实现,无需人工操作参与,因此本实施例能够提高代码库的拆分效率。
此外,由于拆分配置文件的扩展性较强,操作人员能够方便的设定其中的各项信息,因此本实施例提供的代码库拆分的方法还可以灵活的调整代码库的拆分需求。
第三,本实施例提供的代码库拆分的方法是由服务器通过执行拆分配置文件完成的,拆分过程全部由计算机自动执行,与人工手动拆分代码库相比,能够有效规避因错分、漏分等原因产生的拆分风险。
进一步的,作为对图1所示方法的细化,本发明实施例还提供了一种代码库拆分的方法,如图2所示,该方法包括:
201、读取预设的拆分配置文件。
本实施例中,拆分配置文件被配置在服务器中的某个预设存储路径下,在需要拆分代码库时,启动代码库拆分进程,按照该存储路径读取拆分配置文件,对其进行解析和执行。
在本实施例的一种实现方式中,为保证能够按照最新的拆分需求进行代码库拆分,服务器在读取拆分配置文件时,还可以对拆分配置文件的版本进行验证,选取最新版本的拆分配置文件予以执行。具体的,当存储路径下保保存有不同版本的拆分配置文件时,服务器可以选取版本号最新的拆分配置文件。当存储路径下仅保存最新版本的拆分配置文件时,即服务器是以文件替换的形式进行拆分配置文件的更新时,服务器直接读取保存的拆分配置文件即可。
进一步的,考虑到不同代码库的拆分需求有所差异,或者即使针对一个代码库也有可能存在不同的拆分需求,在本实施例的另一种实现方式中,服务器可以保存有对应不同代码库的多个拆分配置文件,或者对应一个代码库的不同拆分需求的多个拆分配置文件。在读取拆分配置文件时,代码库拆分进程通过人机交互界面获取外部输入的拆分需求或配置文件名称,然后根据拆分需求或配置文件名称选取本次拆分过程所需的拆分配置文件。
202、根据原代码库名称、原代码库标识及原代码库地址中的一项或至少两项的组合,查找原代码库。
服务器从拆分配置文件中解析出用于“锁定”原代码库的原代码库信息,并根据该原代码库信息查找原代码库。
在本实施例的一种实现方式中,原代码库信息可以包含下述至少一种信息:原代码库名称、原代码库标识及原代码库地址。其中原代码库名称是在建立原代码库时人工或计算机分配的名称,在代码库管理过程中,应当保证不同代码库的名称唯一无重复;原代码库标识具体可以是预先为代码库分配的身份标识(IDentity,简称ID),或通过哈希算法(HASH)分配的哈希值,或者通过伪随机数生成函数分配的伪随机数,其中,哈希值和伪随机数的生成机制能够保证其唯一不重复,ID的分配则需要通过一定机制保证其唯一性;原代码库地址主要是指原代码库在服务器中的逻辑地址,例如可是存储路径(需要保证不同的原代码库的存储路径没有重复),当原代码库与其所部署的服务器之间存在一一映射的关系时,也可以使用服务器的物理/逻辑地址作为原代码库的地址使用。
对于原代码库名称、原代码库标识及原代码库地址,其中任意一者均能够单独作为原代码库信息使用,实际应用中为避免小概率的重复事件,也可以使用其中任意两者或三者的组合作为原代码库信息使用。
服务器中配置有原代码库信息与原代码库存储路径的映射关系表,在获得原代码库信息后,服务器查表确定原代码库的存储路径,通过该存储路径获取到原代码库。当原代码库位于其他服务器中时,该映射关系表的存储路径部分至少还应当写有原代码库所在服务器的地址信息,以便本服务器能够与其进行通信,获取原代码库。在分布式***中,应当定期同步各服务器中的上述映射关系表。
203、读取原代码库中的代码文件。
在获取到原代码库后,服务器按照其数据存储结构读取其中的代码文件。所谓数据存储结构即为前述所指的文件目录结构。服务器可以从文件目录结构的顶层文件夹起始向下进行数据遍历,获取各级节点上的代码文件,以及代码文件之间的上下级从属关系。
204、在原代码库中查找与上游代码模块名称对应的文件目录分支。
在获取到原代码库的代码文件后,服务器执行本步骤,从拆分配置文件中解析出拆分配置信息。该拆分配置信息包括多个上游代码模块名称,每一个上游代码模块名称对应原代码库中的一个文件目录分支。通过设置上游代码模块名称的方式表达对原代码库的文件目录结构的拆分需求,即需要将文件目录结构拆分成哪几个分支(以便后续分别导入到不同的目标代码库中)。
在本实施例的一种实现方式中,可以通过将文件目录分支名称设为上游代码模块名称的方式,建立上游代码模块名称与文件目录分支的对应关系。示例性的,假设在原代码库的文件目录结构中,顶层文件夹“TOP”的下一级包含三个子文件夹“A”、“B”和“C”,其中,子文件夹“A”的下一级又包含“1”和“2”两个二级子文件夹,子文件夹“B”的下一级又包含“3”、“4”、“5”和“6”四个二级子文件夹,子文件夹“C”的下一级又包含“7”一个二级子文件夹。如果需要将代码库按照子文件夹“A”、“B”和“C”三个文件目录分支拆分为三个目标代码库,那么可以在拆分配置文件的拆分配置信息中,设置三个上游代码模块名称(表示将原代码库拆分为三个文件目录分支),并且将这三个上游代码模块名称分别设置为“A”、“B”和“C”。由此,服务器在执行拆分配置文件时,就可以根据不同的上游代码模块名称查找到对应的文件目录分支了。
205、将文件目录分支下的代码文件拆分到与上游代码模块名称对应的拆分模块名称下,获得对应拆分模块名称的目标代码库。
除上游代码模块名称以外,拆分配置信息中还包括与上游代码模块名称对应的拆分模块名称。拆分模块名称的数量与目标代码库的数量相同,通过设置拆分模块名称的数量,可以定义目标代码库的数量。
拆分模块名称除了需要与目标代码库对应以外,还需要与上游代码模块名称对应,以便建立不同文件目录分支与不同目标代码库之间的对应关系。需要注意的是,拆分模块名称与目标代码库之间是一一对应的关系,上游代码模块名称与文件目录分支之间也是一一对应的关系,但是拆分模块名称与上游代码模块名称并不一定是一一对应的关系。这是由于,实际应用中可以将不同文件目录分支的代码文件导入到一个目标代码库中,也可以将一个文件目录分支的代码文件分别导入到不同的目标代码库中。本实施例中,拆分模块名称与上游代码模块名称两者在数量上可以相等也可以不相等,本实施例对此不作严格限制。
为便于理解,本实施例通过下述符号化关系对上述表述进行简化:
H=原代码库中的文件目录分支数量;
I=上游代码模块名称数量;
J=拆分模块名称数量;
K=目标代码库数量。
上述四者之间关系如下:
H ↔ I → J ↔ K
其中,符号表示一一对应关系,符号“→”表示数量不定的一对多、多对一或多对多的对应关系。
在拆分配置文件中,通过对上游代码模块的名称和数量的设置,可以确定需要拆分出哪些文件目录分支的代码文件;通过对拆分模块的名称和数量的设置,可以确定将原代码库拆分为哪些目标代码库;而对上游代码模块名称和拆分模块名称之间的对应关系的设置,则可以确定将哪些文件目录分支的代码文件拆分到哪些目标代码库中。
206、将目标代码库推送给与拆分模块名称对应的服务器地址。
拆分配置文件中记录有部署目标代码库的服务器地址的指定信息,该指定信息不仅记录了部署目标代码库的服务器地址,还记录了服务器地址与拆分模块名称的对应关系。服务器将目标代码库推送给与拆分模块名称对应的服务器地址,该拆分模块名称为对应目标代码库的拆分模块名称。
本实施例中,可以将不同的目标代码库推送给不同的服务器,也可以将部分或全部目标代码库推送给同一个服务器。
在执行步骤206之后,就完成了对原代码库的拆分以及对新代码库的部署。
进一步的,在本实施例的一种改进方案中,当因各种原因导致上游代码模块名称与原代码库中的文件目录分支不对应时,可以将原代码库中的代码文件整体推送给预设的服务器。实际应用中,开发人员可能会依据旧版本的文件目录结构编写上游代码模块名称,而在拆分原代码库时,原代码库当前的文件目录结构为更新后的目录结构,由此导致拆分配置文件中的上游代码模块名称与原代码库中的文件目录分支不相对应。或者,开发人员在编写上游代码模块名称时所依据的文件目录结构是最新版本的,但是在拆分原代码库时,原代码库的文件目录结构发生了改变,这种情形也会导致上述问题的产生。由于上游代码模块名称与文件目录分支不相对应,因此无法按照既定的拆分需求获得目标代码库。此时,可以将原代码库中的所有代码文件全部推送给预设的服务器,即将整个文件目录结构中的所有代码文件全部推送给预设的服务器,以便在修改拆分需求之后,或者在原代码库的文件目录结构改变之后,再做代码库的拆分。
本实施例所述的上游代码模块名称与原代码库中文件目录分支不对应,包括上游代码模块名称的数量与文件目录分支的数量不一致,也包括上游代码模块名称与文件目录分支的文件夹名称不一致的情况。
此外,实际应用中的预设服务器可以是拆分配置文件中指定的服务器,也可以是与指定服务器无关的其他服务器,本实施例对此不作限制。
进一步的,在本实施例的一个优选方案中,服务器除了将代码文件拆分到目标代码库中之外,还可以进一步将原代码库中的代码历史信息一道同步给目标代码库。所谓代码历史信息是指,用于记录代码修改或代码版本更新的历史信息,代码历史信息是对代码进行后续修改、调用或升级必不可少的参考依据。现有技术中在对代码库进行拆分时,不会将原代码库中的代码历史信息同步给新的代码库,由此导致新代码库中的代码再被修改、调用或升级时,无法继承其早先在原代码库中的变动历史,因而对开发人员后续的使用造成困难。本实施例中,服务器会将代码历史信息同步给目标代码库,能够实现代码文件与代码历史信息的完整“过渡”,消除代码变动历史在代码库拆分过程中的“断层”,方便开发人员基于代码在原代码库中的历史信息,在目标代码库中对代码进行修改、调用或升级。
实际应用中,上述图1及图2所示方法适用于对release代码库或迭代代码库进行拆分,但并不限定于此。
为更好的对图2所示的方法进行理解,下面举例对本发明中的代码库拆分过程进行说明。应当明确这种说明仅是示例性的,其中涉及的参数数值及参数数量等具体内容不作为对实际应用的限制。
在该示例中,预设的拆分配置文件包括下述内容:
“#GitModuleNmae;GitHashValue;GitRUL
remote_git;adsp;d36b1917f11885fd8e845313391bc61bc787bbaa;https://chipmaster2.qti.qualcomm.com/home2/git/msm-la-1-0_hex6_oem
remote_git;amss;ecd9b195b5f1dd508b1886bec23db2759c0a1ea4;https://chipmaster2.qti.qualcomm.com/home2/git/msm-la-1-0_amss_oem_milestone-standard-m
remote_git;binary;;https://chipmaster2.qti.qualcomm.com/home2/git/msm-la-1-0_test_device_milestone-m.git
remote_git;cnss;;https://chipmaster2.qti.qualcomm.com/home2/git/msm-la-1-0_amss_oem_cnss-wapi.git
#GitModulelist
MODULE_LIST_DEFAULT="adsp_proc btfm_proc boot_images cnss_proccommon cpe_proc modem_proc LINUX/android/vendor/qcom/proprietaryrpm_proc slpi_proc trustzone_images venus_proc wgig_proc"
#TargetServer
Download_DIR=AMSS
DownloadCMD="repo init-u server://letv_url1-m letv/amss.xml-b master--repo-url=server://letv_url2"”
其中,“GitModuleNmae;GitHashValue;GitRUL”定义了原代码库的名称、哈希值和代码库地址,用于查找拆分对象的原代码库。
“remote_git”是一个标记位,用于指示需要对原代码库进行拆分。
“adsp”、“amss”、“binary”、“cnss”为上游代码模块名称,与原代码库中的不同文件目录分支相对应。
“GitModulelist”中的“adsp_proc”、“btfm_proc”、“boot_images”、“cnss_proc”等为拆分模块名称,用于定义需要拆分出的目标代码库。上游代码模块名称与拆分模块名称之间的对应关系通过两者的名称进行定义,例如上游代码模块名称“adsp”与拆分模块名称“adsp_proc”。而对于诸如拆分模块名称“btfm_proc”其中的“btfm”对应上述某个文件目录分支中的下级目录分支,即上述某个文件目录分支中的某个下级文件夹的名称,因此不存在与其名称一致的上游代码模块名称。
“TargetServer”为部署目标代码库的目标服务器,其中记录了目标服务器的服务器地址,在上述示例中将拆分模块名称“AMSS”对应的目标代码库推送到“DownloadCMD”下的服务器地址。
进一步的,作为对上述图1及图2所示方法的实现,本发明实施例还提供了一种代码库拆分的装置。该装置可以位于原代码库所在的服务器上,也可以独立于原代码库所在的服务器,但是与原代码库之间建立有数据交互关系,用以实现上述图1及图2所示的方法。如图3所示,该装置包括:读取单元31、获取单元32、拆分单元33以及推送单元34。其中,
读取单元31,用于读取预设的拆分配置文件,拆分配置文件用于对原代码库进行拆分。
原代码库中的代码包括前端开发、***开发、网站开发等所有过程所涉及的代码内容。以前端开发为例,原代码库中包括的代码不限于是组件代码、控件代码及窗体代码。本实施例不对原代码库中的代码类型进行限制。
本实施例的目的在于通过拆分配置文件将原代码库拆分为多个新的代码库。该拆分配置文件为根据预设拆分需求编写的配置文件,其中包括用于指定原代码库的原代码库信息、决定如何拆分代码文件以获得哪几个目标代码库的拆分配置信息、以及将目标代码库推送给哪个服务器的指定信息。拆分配置文件编写完成后配置到原代码库所在的服务器中,当操作人员触发代码库拆分指令时,读取并解析拆分配置文件,按照拆分配置文件中的参数对原代码库进行拆分。实际应用中,当拆分需求发生变化时,可以对拆分配置文件进行修改,然后重启服务器使新的拆分配置文件生效。本实施例中,拆分配置文件的格式包括但不限于是XML格式及脚本格式。
获取单元32,用于根据拆分配置文件中的原代码库信息获取原代码库的代码文件。
通常一台服务器中可以仅部署一个代码库,也可以部署多个代码库;而在虚拟机环境中,由于服务器中的每一个虚拟机都可以部署一个或多个代码库,因此单台服务器上的代码库数量有可能会更多。为实现对作为拆分对象的原代码库的准确查找,本实施例在拆分配置文件中设置了原代码库信息,通过原代码库信息可以定位查找到原代码库。拆分配置文件中可以记录一个原代码库的原代码库信息,也可以记录多个原代码库的原代码库信息。当实现方式为后者时,可以一次对部署在自身的多个原代码库分别进行拆分。实际应用中,一切能够对原代码库进行唯一标识的信息均可以用作原代码库信息,本实施例不对原代码库信息的具体形式进行限制。
在根据原代码库信息查找到原代码库后,获取原代码库中的代码文件,即上述文件目录结构中的内容。可以根据实际需求获取全部文件目录结构中的文件内容,或者获取部分目录分支下的文件。本实施例后续以获取全部文件目录结构中的文件内容为例进行说明。
拆分单元33,用于根据拆分配置文件中的拆分配置信息对原代码库的代码文件进行拆分,获得多个目标代码库。
拆分配置信息中定义了将原代码库拆分成哪几个目标代码库,以及将原代码库中哪些代码文件拆分到哪个目标代码库中的相关信息。根据拆分配置信息将原代码库的代码文件拆分为多个代码文件集合,即获得多个目标代码库。
推送单元34,用于将目标代码库推送给拆分配置文件指定的服务器。
拆分配置文件中记录有指定服务器的服务器地址,以及指定服务器与目标代码库的对应关系,根据拆分配置文件中的指定信息,将各个目标代码库推送到指定的服务器中。
实际应用中,可以根据服务器的负载需求将所有目标代码库推送到原代码库所在的服务器中,也可以将所有目标代码库推送到一个新的服务器中,还可以将不同的目标代码库推送到不同的服务器中,本实施例不对目标代码库与服务器之间的对应关系进行限制。
进一步的,原代码库信息包含下述至少一种信息。
原代码库名称、原代码库标识及原代码库地址。
如图4所示,获取单元32,包括:
原代码库查找模块321,用于根据原代码库名称、原代码库标识及原代码库地址中的一项或至少两项的组合,查找原代码库。
读取模块322,用于读取原代码库中的代码文件。
在本实施例的一种实现方式中,原代码库信息可以包含下述至少一种信息:原代码库名称、原代码库标识及原代码库地址。其中原代码库名称是在建立原代码库时人工或计算机分配的名称,在代码库管理过程中,应当保证不同代码库的名称唯一无重复;原代码库标识具体可以是预先为代码库分配的ID,或通过哈希算法分配的哈希值,或者通过伪随机数生成函数分配的伪随机数,其中,哈希值和伪随机数的生成机制能够保证其唯一不重复,ID的分配则需要通过一定机制保证其唯一性;原代码库地址主要是指原代码库在服务器中的逻辑地址,例如可是存储路径(需要保证不同的原代码库的存储路径没有重复),当原代码库与其所部署的服务器之间存在一一映射的关系时,也可以使用服务器的物理/逻辑地址作为原代码库的地址使用。
对于原代码库名称、原代码库标识及原代码库地址,其中任意一者均能够单独作为原代码库信息使用,实际应用中为避免小概率的重复事件,也可以使用其中任意两者或三者的组合作为原代码库信息使用。
服务器中配置有原代码库信息与原代码库存储路径的映射关系表,在获得原代码库信息后,查表确定原代码库的存储路径,通过该存储路径获取到原代码库。当原代码库位于其他服务器中时,该映射关系表的存储路径部分至少还应当写有原代码库所在服务器的地址信息,以便本服务器能够与其进行通信,获取原代码库。在分布式***中,应当定期同步各服务器中的上述映射关系表。
在获取到原代码库后,按照其数据存储结构读取其中的代码文件。所谓数据存储结构即为前述所指的文件目录结构。可以从文件目录结构的顶层文件夹起始向下进行数据遍历,获取各级节点上的代码文件,以及代码文件之间的上下级从属关系。
进一步的,拆分配置信息包括与原代码库中文件目录分支相对应的上游代码模块名称,以及与上游代码模块名称对应的拆分模块名称。
如图4所示,拆分单元33,包括:
文件目录分支查找模块331,用于在原代码库中查找与上游代码模块名称对应的文件目录分支。
拆分模块332,用于将文件目录分支下的代码文件拆分到与上游代码模块名称对应的拆分模块名称下,获得对应拆分模块名称的目标代码库。
在获取到原代码库的代码文件后,从拆分配置文件中解析出拆分配置信息。该拆分配置信息包括多个上游代码模块名称,每一个上游代码模块名称对应原代码库中的一个文件目录分支。通过设置上游代码模块名称的方式表达对原代码库的文件目录结构的拆分需求,即需要将文件目录结构拆分成哪几个分支(以便后续分别导入到不同的目标代码库中)。
在本实施例的一种实现方式中,可以通过将文件目录分支名称设为上游代码模块名称的方式,建立上游代码模块名称与文件目录分支的对应关系。
除上游代码模块名称以外,拆分配置信息中还包括与上游代码模块名称对应的拆分模块名称。拆分模块名称的数量与目标代码库的数量相同,通过设置拆分模块名称的数量,可以定义目标代码库的数量。
拆分模块名称除了需要与目标代码库对应以外,还需要与上游代码模块名称对应,以便建立不同文件目录分支与不同目标代码库之间的对应关系。需要注意的是,拆分模块名称与目标代码库之间是一一对应的关系,上游代码模块名称与文件目录分支之间也是一一对应的关系,但是拆分模块名称与上游代码模块名称并不一定是一一对应的关系。这是由于,实际应用中可以将不同文件目录分支的代码文件导入到一个目标代码库中,也可以将一个文件目录分支的代码文件分别导入到不同的目标代码库中。本实施例中,拆分模块名称与上游代码模块名称两者在数量上可以相等也可以不相等,本实施例对此不作严格限制。
进一步的,推送单元34,用于将目标代码库推送给与拆分模块名称对应的服务器地址。
拆分配置文件中记录有部署目标代码库的服务器地址的指定信息,该指定信息不仅记录了部署目标代码库的服务器地址,还记录了服务器地址与拆分模块名称的对应关系。将目标代码库推送给与拆分模块名称对应的服务器地址,该拆分模块名称为对应目标代码库的拆分模块名称。
本实施例中,可以将不同的目标代码库推送给不同的服务器,也可以将部分或全部目标代码库推送给同一个服务器。
进一步的,推送单元34,用于若上游代码模块名称与原代码库中文件目录分支不对应,则将原代码库中的代码文件整体推送给预设的服务器。
当因各种原因导致上游代码模块名称与原代码库中的文件目录分支不对应时,可以将原代码库中的代码文件整体推送给预设的服务器。实际应用中,开发人员可能会依据旧版本的文件目录结构编写上游代码模块名称,而在拆分原代码库时,原代码库当前的文件目录结构为更新后的目录结构,由此导致拆分配置文件中的上游代码模块名称与原代码库中的文件目录分支不相对应。或者,开发人员在编写上游代码模块名称时所依据的文件目录结构是最新版本的,但是在拆分原代码库时,原代码库的文件目录结构发生了改变,这种情形也会导致上述问题的产生。由于上游代码模块名称与文件目录分支不相对应,因此无法按照既定的拆分需求获得目标代码库。此时,可以将原代码库中的所有代码文件全部推送给预设的服务器,即将整个文件目录结构中的所有代码文件全部推送给预设的服务器,以便在修改拆分需求之后,或者在原代码库的文件目录结构改变之后,再做代码库的拆分。
进一步的,如图4所示,该装置进一步包括:
同步单元35,用于将原代码库的代码历史信息同步到目标代码库中。
除了将代码文件拆分到目标代码库中之外,还可以进一步将原代码库中的代码历史信息一道同步给目标代码库。所谓代码历史信息是指,用于记录代码修改或代码版本更新的历史信息,代码历史信息是对代码进行后续修改、调用或升级必不可少的参考依据。现有技术中在对代码库进行拆分时,不会将原代码库中的代码历史信息同步给新的代码库,由此导致新代码库中的代码再被修改、调用或升级时,无法继承其早先在原代码库中的变动历史,因而对开发人员后续的使用造成困难。本实施例中,会将代码历史信息同步给目标代码库,能够实现代码文件与代码历史信息的完整“过渡”,消除代码变动历史在代码库拆分过程中的“断层”,方便开发人员基于代码在原代码库中的历史信息,在目标代码库中对代码进行修改、调用或升级。
本实施例提供的代码库拆分的装置,能够根据拆分配置文件中的原代码库信息获取作为拆分对象的代码文件,通过拆分配置信息将代码文件拆分为不同的目标代码库,并将目标代码库推送到相应的服务器中。与现有技术相比,代码文件的查找、拆分、推送等过程全部通过对拆分配置文件的执行自动实现,无需人工操作参与,因此本实施例能够提高代码库的拆分效率。
此外,由于拆分配置文件的扩展性较强,操作人员能够方便的设定其中的各项信息,因此本实施例提供的代码库拆分的装置还可以灵活的调整代码库的拆分需求。
第三,本实施例是通过代码库拆分的装置执行拆分配置文件自动完成的,拆分过程全部由计算机自动执行,与人工手动拆分代码库相比,能够有效规避因错分、漏分等原因产生的拆分风险。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (12)

1.一种代码库拆分的方法,其特征在于,所述方法包括:
读取预设的拆分配置文件,所述拆分配置文件用于对原代码库进行拆分;
根据所述拆分配置文件中的原代码库信息获取原代码库的代码文件;
根据所述拆分配置文件中的拆分配置信息对所述原代码库的代码文件进行拆分,获得多个目标代码库;
将所述目标代码库推送给所述拆分配置文件指定的服务器。
2.根据权利要求1所述的方法,其特征在于,所述原代码库信息包含下述至少一种信息:
原代码库名称、原代码库标识及原代码库地址;
所述根据所述拆分配置文件中的原代码库信息获取原代码库的代码文件,包括:
根据所述原代码库名称、所述原代码库标识及所述原代码库地址中的一项或至少两项的组合,查找所述原代码库;
读取所述原代码库中的代码文件。
3.根据权利要求1所述的方法,其特征在于,所述拆分配置信息包括与所述原代码库中文件目录分支相对应的上游代码模块名称,以及与所述上游代码模块名称对应的拆分模块名称;
所述根据所述拆分配置文件中的拆分配置信息对所述原代码库的代码文件进行拆分,获得多个目标代码库,包括:
在所述原代码库中查找与所述上游代码模块名称对应的文件目录分支;
将所述文件目录分支下的代码文件拆分到与所述上游代码模块名称对应的拆分模块名称下,获得对应所述拆分模块名称的目标代码库。
4.根据权利要求3所述的方法,其特征在于,所述将所述目标代码库推送给所述拆分配置文件指定的服务器,包括:
将所述目标代码库推送给与所述拆分模块名称对应的服务器地址。
5.根据权利要求3或4所述的方法,其特征在于,所述方法进一步包括:
若所述上游代码模块名称与所述原代码库中文件目录分支不对应,则将所述原代码库中的代码文件整体推送给预设的服务器。
6.根据权利要求1所述的方法,其特征在于,所述方法进一步包括:
将所述原代码库的代码历史信息同步到所述目标代码库中。
7.一种代码库拆分的装置,其特征在于,所述装置包括:
读取单元,用于读取预设的拆分配置文件,所述拆分配置文件用于对原代码库进行拆分;
获取单元,用于根据所述拆分配置文件中的原代码库信息获取原代码库的代码文件;
拆分单元,用于根据所述拆分配置文件中的拆分配置信息对所述原代码库的代码文件进行拆分,获得多个目标代码库;
推送单元,用于将所述目标代码库推送给所述拆分配置文件指定的服务器。
8.根据权利要求7所述的装置,其特征在于,所述原代码库信息包含下述至少一种信息:
原代码库名称、原代码库标识及原代码库地址;
所述获取单元,包括:
原代码库查找模块,用于根据所述原代码库名称、所述原代码库标识及所述原代码库地址中的一项或至少两项的组合,查找所述原代码库;
读取模块,用于读取所述原代码库中的代码文件。
9.根据权利要求7所述的装置,其特征在于,所述拆分配置信息包括与所述原代码库中文件目录分支相对应的上游代码模块名称,以及与所述上游代码模块名称对应的拆分模块名称;
所述拆分单元,包括:
文件目录分支查找模块,用于在所述原代码库中查找与所述上游代码模块名称对应的文件目录分支;
拆分模块,用于将所述文件目录分支下的代码文件拆分到与所述上游代码模块名称对应的拆分模块名称下,获得对应所述拆分模块名称的目标代码库。
10.根据权利要求9所述的装置,其特征在于,所述推送单元,用于将所述目标代码库推送给与所述拆分模块名称对应的服务器地址。
11.根据权利要求9或10所述的装置,其特征在于,所述推送单元,用于若所述上游代码模块名称与所述原代码库中文件目录分支不对应,则将所述原代码库中的代码文件整体推送给预设的服务器。
12.根据权利要求7所述的装置,其特征在于,所述装置进一步包括:
同步单元,用于将所述原代码库的代码历史信息同步到所述目标代码库中。
CN201511016900.6A 2015-12-29 2015-12-29 代码库拆分的方法及装置 Pending CN105867903A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201511016900.6A CN105867903A (zh) 2015-12-29 2015-12-29 代码库拆分的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201511016900.6A CN105867903A (zh) 2015-12-29 2015-12-29 代码库拆分的方法及装置

Publications (1)

Publication Number Publication Date
CN105867903A true CN105867903A (zh) 2016-08-17

Family

ID=56624441

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201511016900.6A Pending CN105867903A (zh) 2015-12-29 2015-12-29 代码库拆分的方法及装置

Country Status (1)

Country Link
CN (1) CN105867903A (zh)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106990960A (zh) * 2017-03-28 2017-07-28 阿里巴巴集团控股有限公司 代码部署方法及装置
CN108334333A (zh) * 2018-01-05 2018-07-27 武汉斗鱼网络科技有限公司 一种源代码库更新方法及装置
CN108536431A (zh) * 2018-04-04 2018-09-14 浙江小泰科技有限公司 一种全局命令行创建前端项目方法及***
CN109739554A (zh) * 2018-12-14 2019-05-10 深圳壹账通智能科技有限公司 防止代码重复提交方法、***、计算机设备和存储介质
CN111639019A (zh) * 2020-04-24 2020-09-08 北京五八信息技术有限公司 代码测试方法、装置及可读存储介质
CN111796878A (zh) * 2020-06-05 2020-10-20 北京沃东天骏信息技术有限公司 一种应用于单页应用的资源拆分、加载方法和装置
CN112702203A (zh) * 2020-12-22 2021-04-23 上海智迩智能科技有限公司 一种nginx集群白屏化配置管理方法及***
CN112783544A (zh) * 2021-01-11 2021-05-11 苏州浪潮智能科技有限公司 一种子代码库的本地跟踪代码分支建立方法和终端

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3698021B2 (ja) * 2000-06-12 2005-09-21 日本電気株式会社 広域分散資産版管理システム、広域分散資産版管理方法、記録媒体
CN101231647A (zh) * 2007-01-26 2008-07-30 鸿富锦精密工业(深圳)有限公司 文件管理***及方法
KR20110116772A (ko) * 2010-04-20 2011-10-26 네무스텍(주) 분산 빌드 시스템에서 소스코드 버전관리 시스템 및 참조 파일 전송 방법
CN102915233A (zh) * 2011-08-03 2013-02-06 腾讯科技(深圳)有限公司 软件程序的基线版本管理方法及***
CN105630470A (zh) * 2014-10-31 2016-06-01 阿里巴巴集团控股有限公司 代码共建方法、***、源码服务器及开放服务器

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3698021B2 (ja) * 2000-06-12 2005-09-21 日本電気株式会社 広域分散資産版管理システム、広域分散資産版管理方法、記録媒体
CN101231647A (zh) * 2007-01-26 2008-07-30 鸿富锦精密工业(深圳)有限公司 文件管理***及方法
KR20110116772A (ko) * 2010-04-20 2011-10-26 네무스텍(주) 분산 빌드 시스템에서 소스코드 버전관리 시스템 및 참조 파일 전송 방법
CN102915233A (zh) * 2011-08-03 2013-02-06 腾讯科技(深圳)有限公司 软件程序的基线版本管理方法及***
CN105630470A (zh) * 2014-10-31 2016-06-01 阿里巴巴集团控股有限公司 代码共建方法、***、源码服务器及开放服务器

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106990960A (zh) * 2017-03-28 2017-07-28 阿里巴巴集团控股有限公司 代码部署方法及装置
CN108334333A (zh) * 2018-01-05 2018-07-27 武汉斗鱼网络科技有限公司 一种源代码库更新方法及装置
CN108536431A (zh) * 2018-04-04 2018-09-14 浙江小泰科技有限公司 一种全局命令行创建前端项目方法及***
CN109739554A (zh) * 2018-12-14 2019-05-10 深圳壹账通智能科技有限公司 防止代码重复提交方法、***、计算机设备和存储介质
CN111639019A (zh) * 2020-04-24 2020-09-08 北京五八信息技术有限公司 代码测试方法、装置及可读存储介质
CN111639019B (zh) * 2020-04-24 2023-08-25 北京五八信息技术有限公司 代码测试方法、装置及可读存储介质
CN111796878A (zh) * 2020-06-05 2020-10-20 北京沃东天骏信息技术有限公司 一种应用于单页应用的资源拆分、加载方法和装置
CN111796878B (zh) * 2020-06-05 2024-04-12 北京沃东天骏信息技术有限公司 一种应用于单页应用的资源拆分、加载方法和装置
CN112702203A (zh) * 2020-12-22 2021-04-23 上海智迩智能科技有限公司 一种nginx集群白屏化配置管理方法及***
CN112783544A (zh) * 2021-01-11 2021-05-11 苏州浪潮智能科技有限公司 一种子代码库的本地跟踪代码分支建立方法和终端
CN112783544B (zh) * 2021-01-11 2022-12-27 苏州浪潮智能科技有限公司 一种子代码库的本地跟踪代码分支建立方法和终端

Similar Documents

Publication Publication Date Title
CN105867903A (zh) 代码库拆分的方法及装置
CN106775723B (zh) 基于Android平台的***固件定制的方法和Android设备
CN108279932B (zh) 一种移动终端动态配置用户界面方法和装置
CN103984582B (zh) 一种热更新方法和装置
CN105893008A (zh) 一种定制多渠道安装包的方法及装置
CN104123126B (zh) 一种用于生成合并冲突记录列表的方法和装置
US10466998B2 (en) Model based upgrade campaign generation
CN107506221A (zh) 应用程序升级方法、装置及设备
CN106302753A (zh) 客户端程序增量更新的方法及***
JP6757735B2 (ja) ヘテロジニアスなコンピューティング環境にわたってクラウドサービスをプロビジョニングするためのシステムおよび方法
CN109298873B (zh) 一种***升级方法及装置
CN102110102A (zh) 数据处理方法及装置、文件识别方法及工具
CN111190687B (zh) 一种容器镜像的构建方法、装置、设备及存储介质
CN109634682A (zh) 应用程序的配置文件更新方法及装置
CN109189384A (zh) 一种代码的复用方法及装置
CN110209420A (zh) 一种更新引导加载程序的方法及装置
CN109426515A (zh) 升级包的生成方法及装置
US9037539B2 (en) Data synchronization
US7689972B2 (en) System and method for producing software patches
CN115016785B (zh) 一种用于多环境共用的前端项目打包方法及装置
CN110018857B (zh) 应用组件化中分支自动管理方法、存储介质、设备及方法
CN116431601A (zh) 数据表创建方法及设备
CN114330244A (zh) 一种对文件进行编排的方法、***、设备和介质
CN116740236A (zh) 动画复用方法和装置、存储介质及电子设备
CN112473145A (zh) 一种基于游戏引擎的数据处理方法和装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20160817

WD01 Invention patent application deemed withdrawn after publication