Some content of this application is unavailable at the moment.
If this situation persist, please contact us atFeedback&Contact
1. (WO2019024391) DIFFERENTIAL CODE SYNCHRONIZATION METHOD, STORAGE MEDIUM, ELECTRONIC DEVICE AND SYSTEM
Document

说明书

发明名称 0001   0002   0003   0004   0005   0006   0007   0008   0009   0010   0011   0012   0013   0014   0015   0016   0017   0018   0019   0020   0021   0022   0023   0024   0025   0026   0027   0028   0029   0030   0031   0032   0033   0034   0035   0036   0037   0038   0039   0040   0041   0042   0043   0044   0045   0046   0047   0048   0049  

权利要求书

1   2   3   4   5   6   7   8   9   10  

附图

1   2  

说明书

发明名称 : 差异代码的同步方法、存储介质、电子设备及系统

技术领域

[0001]
本发明涉及代码同步领域,具体涉及一种差异代码的同步方法、存储介质、电子设备及系统。

背景技术

[0002]
在今软件开发领域,随着软件开发规模的扩大,多人协作开发成了常态。在多人协作开发的项目中,同一个项目版本,会分成多个部分,每个部分由1组开发组进行开发,所有开发组完成各自的开发任务后,通过版本控制工具(例如git、svn等),将所有开发任务的代码进行合并和同步。版本控制工具在合并过程中,记录项目中所有需要进行版本控制的文件/文件夹的每次变更,以提供版本信息,方便不同开发组对代码进行同步变更。
[0003]
在实际开发过程中,会出现多次项目开发的同时,对已开发的项目进行改造;例如项目开发至版本V1后,需要改造组A对项目的版本V1进行改造,与此同时需要开发组B开发项目的版本V2,项目的改造周期一般大于一次项目的开发周期。
[0004]
多次项目开发的同时,对已开发的项目进行改造的过程为:改造组A需要拿出V1版本的项目中的部分代码,进行单独改造,开发组B需要对V1版本的项目进行单独开发。当改造组A未完成开发任务,而项目组B完成开发任务时(将项目的版本由V1升级至V2),项目组B会在版本为V2的项目中,改变改造组A拿出的部分代码。此时,需要将开发组B改变的部分代码同步至改造组A,而常规的版本控制 工具是无法解决同步修改代码的操作的问题的。
[0005]
为了解决上述问题,开发人员会从V2版本的项目中,人工定位与项目开发时拿出的代码对应的源代码文件,通过文件比对工具,将开发拿出的代码文件与对应的源代码文件进行合并和同步,当开发时拿出的代码文件数量较多时,需要人工定位每一份代码文件对应的源代码文件后再进行合并和同步,此时的工作量非常大,不仅耗费了人力资源,而且工作效率太低。
[0006]
发明内容
[0007]
针对现有技术中存在的缺陷,本发明解决的技术问题为:如何在代码同步时,提供工作效率,减少人力成本。本发明能够确保所有源代码文件均能够被比对,显著提高了代码的同步精度和质量,非常适于推广。
[0008]
为达到以上目的,本发明提供的差异代码的同步方法,包括以下步骤:
[0009]
S1:将需要同步的所有源代码文件,从原目录提取至比对目录A,转到S2;
[0010]
S2:获取比对目录A下的每份源代码文件对应的开发代码文件,计算源代码文件的比对值X、以及与源代码文件对应的开发代码文件的比对值Y,当X与Y不同时,将Y对应的开发代码文件提取至比对目录B,转到S3;
[0011]
S3:根据比对目录B下的开发代码文件,对比对目录A下的源代码文件进行同步,将同步后的源代码同步文件存放至同步目录,将源代码同步文件替换所述原目录下对应的源代码文件。
[0012]
本发明提供的存储介质,该存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述差异代码的同步方法。
[0013]
本发明提供的电子设备,包括存储器和处理器,存储器上储存有在处理器上运行的计算机程序,处理器执行计算机程序时实现上述差异代码的同步方法。
[0014]
本发明提供的差异代码的同步系统,包括源代码文件提取模块、源代码文件比对模块和源代码文件同步模块;
[0015]
源代码文件提取模块用于:将需要同步的所有源代码文件,从原目录提取至比对目录A,向源代码文件比对模块发送源代码文件比对信号;
[0016]
源代码文件比对模块用于:收到源代码文件比对信号后,获取比对目录A下的每份源代码文件对应的开发代码文件,计算源代码文件的比对值X、以及与源代码文件对应的开发代码文件的比对值Y,当X与Y不同时,将Y对应的开发代码文件提取至比对目录B,向源代码文件同步模块发送源代码文件同步信号;
[0017]
源代码文件同步模块用于:收到源代码文件同步信号后,根据比对目录B下的开发代码文件,对比对目录A下的源代码文件进行同步,将同步后的源代码同步文件存放至同步目录,将源代码同步文件替换所述原目录下对应的源代码文件。
[0018]
与现有技术相比,本发明的优点在于:
[0019]
(1)参见S1可知,本发明自动提取了项目改造过程中用到的所有源代码文件至比对目录A,参见S2可知,本发明自动提取所有源代码文件对应的开发代码文件至比对目录B,而且在提取开发代码文件的过程中,能够通过比对值过滤掉未做修改的开发代码文件,进而减少了后续代码同步的工作量,提高了工作效率。
[0020]
在此基础上,参见S3可知,与现有技术中需要人工查找和比对源代码文件相比,本发明只需要手动同步2个目录(比对目录A和B) 下的所有文件,进而大幅度提高了工作效率,显著减少了人力成本。
[0021]
(2)参见S1可知,本发明直接将原目录下的所有源代码文件(包括源代码文件夹中的源代码文件),全部提取至比对目录(本领域惯用手段为直接复制整个原目录),进而能够确保所有源代码文件均能够被比对,显著提高了代码的同步精度和质量。

附图说明

[0022]
图1为本发明实施例中差异代码的同步方法的流程图;
[0023]
图2为本发明实施例中电子设备的连接框图。

具体实施方式

[0024]
以下结合附图及实施例对本发明作进一步详细说明。
[0025]
参见图1所示,本发明实施例中的差异代码的同步方法,包括以下步骤:
[0026]
S1:将需要同步的所有源代码文件,从原目录(项目改造时的使用目录)提取至预先创建的比对目录A,转到S2。
[0027]
S1具体实施时可通过脚本文件dir-flatten.sh来完成(该脚本文件用于将指定目录下的所有文件提取至另一个指定目录),该脚本文件的具体工作流程为:
[0028]
S101:将原目录下的所有源代码文件和源代码文件夹,形成源代码数组,每份源代码文件和源代码文件夹,均为源代码数组中的1个元素,转到S102。
[0029]
S102:遍历获取源代码数组中的每个元素,确定获取的元素的类型:若获取的元素为源代码文件,将获取的元素提取之比对目录A;若获取的元素为源代码文件夹,将获取的元素作为原目录后,重新执行S101。
[0030]
S101的具体实现方式为:定义目录获取函数flatten(input_dir,output_dir),input_dir代表原目录,output_dir代表比对目录A;通过ls-F input_dir命令,获取input_dir目录下的所有源代码文件名称和源代码文件夹名称,将所有源代码文件名称和源代码文件夹名称存放到数组型类型临时变量files_array中,-F参数用于在源代码文件夹名称后面添加“/”字符,这样就可以将源代码文件名称和源代码文件夹名称区分开来。
[0031]
S102的具体实现方式为:对files_array执行for循环,每次循环拿到files_array里的值name,判断name是否以字符“/”结尾,若不是,则说明是源代码文件名称,此时将name对应的源代码文件拷贝至output_dir目录下(执行cp input_dir/name output_dir命令);若是,则说明是源代码文件夹名称,此时将input_dir/name作为flatten函数的第一个参数,output_dir作为第二个参数调用flatten函数,这样会对input_dir/name做同样的处理,直至将原input_dir中的所有源代码文件(包含所有子文件夹下的源代码文件)拷贝到output_dir中,即为软件开发中的递归的概念。
[0032]
拷贝时,可以通过终端(一种类Unix系统下的命令行工具)将原目录下的所有源代码文件(包括所有子文件夹下的源代码文件)拷贝到指定目录。
[0033]
S1的好处为:在后续进行源代码文件比对时,通常使用的文件比对工具可以将两个源代码文件直接进行比对,也可以对两个目录进行比对。对两个目录进行比对时,会将目录下所有文件和子目录进行比对,如果进行比对的两个目录下有同名的文件,但是同名文件在不同子目录下,那么比对工具将不会对这两个文件进行比对。
[0034]
有鉴于此,由于原目录下可能存在源代码文件夹和源代码文件, 源代码文件夹中又可能存在子文件夹和源代码文件;因此原目录可能会与后续需要同步的目录(即项目开发后的开发目录)的目录结构不同。而本发明实施例直接将原目录下的所有源代码文件(包括源代码文件夹中的源代码文件),全部提取至比对目录(本领域惯用手段为直接复制整个原目录),进而能够确保所有源代码文件均能够被比对,显著提高了代码的同步精度和质量。
[0035]
S2:获取比对目录A下的每份源代码文件对应的开发代码文件(将比对目录A下的所有源代码文件形成比对数组,遍历获取比对数组中每份源代码文件,在开发目录下确定与每份代码文件对应的开发代码文件),计算源代码文件的比对值X、以及与源代码文件对应的开发代码文件的比对值Y,当X与Y不同时,证明Y对应的开发文件被修改,需要进行同步,此时将Y对应的开发代码文件提取至预先创建的比对目录B(相同则证明Y对应的开发文件未被修改,不需要进行同步),转到S3。
[0036]
S2的好处为:由于项目开发时,不是改变所有的代码,因此本发明实施例通过源代码文件和开发代码文件的比对值,来过滤掉未做修改的开发代码文件,进而减少了后续代码同步的工作量,提高了工作效率。
[0037]
S2中的比对值采用MD5值(Message Digest Algorithm MD5,通过消息摘要算法第五版,对文件进行计算得到的一个字符串),S2具体实施时可通过脚本文件file-extract.sh来完成(该脚本文件用于将指定目录下的指定文件提取至另一个指定目录),该脚本文件的具体工作流程为:
[0038]
将比对目录A中的所有源代码文件名存放到数组类型的临时变量name_array中,对name_array数组执行for循环,每次循环拿到 name_array的一个元素file_name,获取开发目录下名称与file_name相同的开发代码文件file_name。计算比对目录A下file_name的MD5值:oldMD5,计算开发目录下file_name的MD5值:newMD5;将oldMD5和newMD5进行比对,当oldMD5和newMD5不同时,将newMD5对应的开发代码文件提取至比对目录B。
[0039]
S3:人工使用文件比对工具,根据比对目录B下的开发代码文件,对比对目录A下的源代码文件进行同步(将源代码文件替换为文件名称相同的开发代码文件),将同步后的源代码同步文件存放至预先创建的同步目录,将源代码同步文件替换原目录下对应(即文件名称相同)的源代码文件。
[0040]
通过S1至S3可知,S1和S2的操作使得S3只需要手动比对2个目录(比对目录A和B)下的所有文件,而现有技术是需要人工查找和比对源代码文件,相比之下,本发明实施例的工作效率大幅度提高,而且显著减少人力成本。
[0041]
本发明实施例还提供一种存储介质,存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述差异代码的同步方法。需要说明的是,所述存储介质包括U盘、移动硬盘、ROM(Read-Only Memory,只读存储器)、RAM(Random Access Memory,随机存取存储器)、磁碟或者光盘等各种可以存储程序代码的介质。
[0042]
参见图2所示,本发明实施例还提供一种电子设备,包括存储器和处理器,存储器上储存有在处理器上运行的计算机程序,处理器执行计算机程序时实现上述差异代码的同步方法。
[0043]
本发明实施例中的差异代码的同步系统,包括源代码文件提取模块、源代码文件比对模块和源代码文件同步模块。
[0044]
源代码文件提取模块用于:将需要同步的所有源代码文件,从原 目录提取至比对目录A,向源代码文件比对模块发送源代码文件比对信号;具体工作流程为:
[0045]
将原目录下的所有源代码文件和源代码文件夹,形成源代码数组,每份源代码文件和源代码文件夹,均为源代码数组中的1个元素;遍历获取源代码数组中的每个元素,确定获取的元素的类型:若获取的元素为源代码文件,将获取的元素提取之比对目录A;若获取的元素为源代码文件夹,将获取的元素作为原目录后,重新开始工作。
[0046]
源代码文件比对模块用于:收到源代码文件比对信号后,获取比对目录A下的每份源代码文件对应的开发代码文件(将比对目录A下的所有源代码文件形成比对数组,遍历获取比对数组中每份源代码文件,在开发目录下确定与每份代码文件对应的开发代码文件),计算源代码文件的比对值X(MD5值)、以及与源代码文件对应的开发代码文件的比对值Y,当X与Y不同时,将Y对应的开发代码文件提取至比对目录B,向源代码文件同步模块发送源代码文件同步信号。
[0047]
源代码文件同步模块用于:收到源代码文件同步信号后,根据比对目录B下的开发代码文件,对比对目录A下的源代码文件进行同步,将同步后的源代码同步文件存放至同步目录,将源代码同步文件替换所述原目录下对应的源代码文件。
[0048]
需要说明的是:本发明实施例提供的系统在进行模块间通信时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将系统的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
[0049]
进一步,本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进 和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。

权利要求书

[权利要求 1]
一种差异代码的同步方法,其特征在于,该方法包括以下步骤: S1:将需要同步的所有源代码文件,从原目录提取至比对目录A,转到S2; S2:获取比对目录A下的每份源代码文件对应的开发代码文件,计算源代码文件的比对值X、以及与源代码文件对应的开发代码文件的比对值Y,当X与Y不同时,将Y对应的开发代码文件提取至比对目录B,转到S3; S3:根据比对目录B下的开发代码文件,对比对目录A下的源代码文件进行同步,将同步后的源代码同步文件存放至同步目录,将源代码同步文件替换所述原目录下对应的源代码文件。
[权利要求 2]
如权利要求1所述的差异代码的同步方法,其特征在于,S1的流程包括: S101:将原目录下的所有源代码文件和源代码文件夹,形成源代码数组,每份源代码文件和源代码文件夹,均为源代码数组中的1个元素,转到S102; S102:遍历获取源代码数组中的每个元素,确定获取的元素的类型:若获取的元素为源代码文件,将获取的元素提取之比对目录A;若获取的元素为源代码文件夹,将获取的元素作为原目录后,重新执行S101。
[权利要求 3]
如权利要求1所述的差异代码的同步方法,其特征在于:S2中所述获取比对目录A下的每份源代码文件对应的开发代码文件的流程包括:将比对目录A下的所有源代码文件形成比对数组,遍历获取比对数组中每份源代码文件,在开发目录下确定与每份代码文件 对应的开发代码文件。
[权利要求 4]
如权利要求1至3任一项所述的差异代码的同步方法,其特征在于:S2中所述比对值为MD5值。
[权利要求 5]
一种存储介质,该存储介质上存储有计算机程序,其特征在于:所述计算机程序被处理器执行时实现权利要求1至4任一项所述的方法。
[权利要求 6]
一种电子设备,包括存储器和处理器,存储器上储存有在处理器上运行的计算机程序,其特征在于:处理器执行计算机程序时实现权利要求1至4任一项所述的方法。
[权利要求 7]
一种差异代码的同步系统,其特征在于,该系统包括源代码文件提取模块、源代码文件比对模块和源代码文件同步模块; 源代码文件提取模块用于:将需要同步的所有源代码文件,从原目录提取至比对目录A,向源代码文件比对模块发送源代码文件比对信号; 源代码文件比对模块用于:收到源代码文件比对信号后,获取比对目录A下的每份源代码文件对应的开发代码文件,计算源代码文件的比对值X、以及与源代码文件对应的开发代码文件的比对值Y,当X与Y不同时,将Y对应的开发代码文件提取至比对目录B,向源代码文件同步模块发送源代码文件同步信号; 源代码文件同步模块用于:收到源代码文件同步信号后,根据比对目录B下的开发代码文件,对比对目录A下的源代码文件进行同步,将同步后的源代码同步文件存放至同步目录,将源代码同步文件替换所述原目录下对应的源代码文件。
[权利要求 8]
如权利要求7所述的差异代码的同步系统,其特征在于,所述源代码文件提取模块的工作流程包括:将原目录下的所有源代码文 件和源代码文件夹,形成源代码数组,每份源代码文件和源代码文件夹,均为源代码数组中的1个元素;遍历获取源代码数组中的每个元素,确定获取的元素的类型:若获取的元素为源代码文件,将获取的元素提取之比对目录A;若获取的元素为源代码文件夹,将获取的元素作为原目录后,重新开始工作。
[权利要求 9]
如权利要求7所述的差异代码的同步系统,其特征在于:所述源代码文件比对模块获取比对目录A下的每份源代码文件对应的开发代码文件的流程包括:将比对目录A下的所有源代码文件形成比对数组,遍历获取比对数组中每份源代码文件,在开发目录下确定与每份代码文件对应的开发代码文件。
[权利要求 10]
如权利要求7至9任一项所述的差异代码的同步系统,其特征在于:所述源代码文件比对模块的比对值为MD5值。

附图

[ 图 1]  
[ 图 2]