本发明涉及代码测试领域,特别是涉及一种代码历史记录恢复方法、系统及介质。
背景技术:
git是一个开源的分布式版本控制系统,可以进行项目管理,每一个开发者将代码提交到git仓库,其他的开发者可以在本地将git仓库拷贝并使用,同时git是一段代码加代码补充内容的明细,类似于wps的修订模式文本。
gerrit是一种开源的代码审查软件,它使用网页界面,可以令同一个团队的软件开发者相互审阅彼此的代码,并决定是否能够将代码进行提交、退回和继续修改。
gitlab是开源应用程序,可以实现git仓库管理,非常易于浏览提交到git仓库的代码版本并为代码提供一个文件历史库。
replication是gerrit中用来同步git提交历史的插件,在gerrit上审阅通过的代码,会通过replication推送到gitlab。
在当前gerrit和gitlab集成环境中,由于存在网络延迟问题、服务器节点问题和人为操作不当问题,导致在gerrit和gitlab之间起到同步作用的replication失效。
技术实现要素:
本发明主要解决是replication失效时,恢复gerrit和gitlab代码记录同步的问题。
为解决上述技术问题,本发明采用的一个技术方案是:提供一种代码历史记录恢复方法,包括以下步骤:
第一代码仓库通过replication向第二代码仓库同步git,当replication失效时,通过日志分析工具统计第一代码仓库内未同步的n-git对应的changesid;
删除所述第一代码仓库内所述n-git,根据所述第二代码仓库内的已同步的d-git在所述第一代码仓库重建所述n-git;
删除所述第一代码仓库内所述n-git对应的所述changesid;
重启所述第一代码仓库并接收代码,将所述代码转化为所述git并同步至所述第二代码仓库。
进一步,设定git的未同步阈值,当所述replication失效时,若所述n-git的数量高于所述未同步阈值,则使用所述日志分析工具对所述n-git进行统计。
进一步,所述replication内设有日志,所述日志分析工具读取所述日志并将所述n-git进行统计。
进一步,在所述第一代码仓库内创建mariadb,所述mariadb存储所述git对应的changesid,所述mariadb设有若干数据库表,若干所述数据库表同时缓存changesid;删除所述mariadb存储的所述n-git对应的所述changesid时,控制所述数据库表将所述n-git对应的所述changesid删除。
进一步,创建脚本,所述数据库表通过脚本将所述n-git对应的所述changesid删除。
本发明还提供一种代码历史记录恢复系统,包括:第一代码仓库、第二代码仓库、replication,日志分析工具和mariadb;
所述第一代码仓库用于接收代码并将所述代码转化为git,所述第一代码仓库通过所述replication向所述第二代码仓库同步所述git,所述第一代码仓库设有所述mariadb;
所述replication设有日志,所述日志记录所述git;
所述mariadb用于存储所述git对应的changesid;
所述日志分析工具用于接收日志,并将未同步的n-git进行统计;
当所述replication失效时,所述日志分析工具将所述n-git进行统计,并将所述第一代码仓库内的所述n-git删除,所述mariadb删除所述n-git对应的所述changesid。
进一步,所述日志分析工具预设有固定模式的字符串,所述日志分析工具接收所述日志,根据固定模式的字符串将所述n-git对应的所述changesid截取出来,并将所述n-git在所述第一代码仓库删除。
进一步,所述mariadb设有若干数据库表,所述数据库表存储有所述changesid。
进一步,所述日志分析工具将所述n-git进行显示。
本发明还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时,实现所述的一种代码历史记录恢复方法步骤。
本发明的有益效果是:
1、本发明所述的一种代码历史记录恢复方法,可以及时有效的恢复当replication失效时,git的运行环境,避免因为git记录不同步导致的代码丢失或者代码出错的问题,以及将恢复采用自动化代替人工方式恢复,设计了脚本,可以及时的将mariadb的数据库表内的changesid同意处理,避免人工操作出现的误删除风险。
2、本发明所述的一种代码历史记录恢复系统,可以实现有效的恢复git运行环境,设立了日志分析工具寻找未能同步的n-git历史记录。
3、本发明所述的一种代码历史记录恢复介质,可以实现对未同步的git进行统计,并将未同步的n-git对应的changesid进行统一删除。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例1所述的代码历史记录恢复方法的流程图;
图2是本发明实施例1所述的代码历史记录恢复方法的统计未同步git的流程图;
图3是本发明实施例2所述的代码历史记录恢复系统的拓扑图。
具体实施方式
下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本发明的描述中,需要说明的是,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性。
在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”应做广义理解。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
需要说明的是,在本发明的描述中web(worldwideweb)是全球广域网、changesid是更改编号、n-git是未能同步的git、d-git是已经同步的git。
实施例1
本发明实施例提供一种代码历史记录恢复方法,请参阅图1,包括以下步骤:
s100、建立第一代码仓库,本发明中第一代码仓库为gerrit,此代码仓库是免费,开源的代码审查软件,使用网页浏览器,可以使同一个团队的开发者相互审阅修改程序代码,可以通过大家来决定此代码是否可以提交、退回或者继续修改,在第一代码仓库内安装插件replication,建立第二代码仓库gitlab,gitlab是代码托管仓库,开发者们可以通过web界面进行访问公开或者私人的代码项目,gitlab可以对开发者提交的历史代码项目进行缺陷管理以及注释,并且还提供代码片段收集功能,通过此功能开发者可以轻松实现对代码的复用。
s200、gerrit通过replication向第二代码仓库同步代码,gerrit在设有数据库mariadb,gerrit在向gitlab进行代码同步的时候,mariadb会将记录gerrit的代码变更以及代码变更对应的changesid,每一次代码变更都会生成一个changesid,replication设有日志,当gerrit通过replication对gitlab进行数据同步的时候,无论代码是否同步成功,replication的日志都会记录changesid。
s300、请参阅图2,统计gerrit向gitlab进行代码同步时,未能同步的代码,第一种方法为开发者进行人工统计,开发者对照gerrit与gitlab,将未能同步的代码的changesid记录,此方法适用于代码变更次数较少的情况,当gerrit向gitlab同步的代码数量较多的情况采用日志分析工具,未同步的代码changesid一般由其固定的模式,将日志输入到日志分析工具内,匹配预设的固定模式的字符串,截取未同步的changesid,日志分析工具可以将gerrit的未同步代码变更的changesid统计出来。
s400、mariadb为gerrit中记录changesid的数据库,因为是gerrit向gitlab同步代码,所以删除mariadb中gerrit向gitlab未能同步的changesid,因为changesid会在多个关于gerrit的数据库表中出现,删除内容较多,为了较少失误删除正常的changesid,此发明采用脚本的方式,将未同步的git对应的changesid删除。
s500、因为同步git的过程中,以gitlab为基准,所以在同步完成git后,查看第一代码仓库、第二代码仓库和replication是否正常运行,若可以正常运行,则开发者继续向第一代码仓库推送代码,若不可以正常运行,则通知开发者。
实施例2
本发明实施例还提供一种代码历史记录恢复系统,请参阅3,包括:gerrit、gitlab、mariadb、replication;
开发者向gerrit推送代码,gerrit作为代码的审阅单元,当代码推送到gerrit中,开发者对代码进行审核,若代码满足要求则将代码同步到gitlab中,代码由gerrit到gitlab通过replication实现,当replication失效时,代码无法同步到gitlab,开发者推送到gerrit的代码,经开发者互相批阅,并生成git,git含有代码,以及对比上一次的代码版本所增加的内容,并将增加的内容进行标准,gerrit同步git到gitlab,每一个git都由有对应的changesid,因为在gerrit中,存储changesid为mariadb,存储changesid的数据库表有很多,所以当replication出现异常,导致gerrit无法同步git到gitlab时,首先统计gerrit内未同步的git的changesid,统计方法有两种,第一种为开发者进行人工统计,第二种为通过日志分析工具,检查replication的日志,并将未同步的git对应的changesid统计,在gerrit中删除未能同步的git,并根据gitlab拉取git项目同步到gerrit,并将mariadb内未同步git对应的数据库表内的changesid删除,完成以上的步骤后,重启gerrit,查看replication启动日志是否正常,若正常,则开发者继续将代码推送到gerrit内,gerrit将代码转换为git并同步到gitlab。
基于与前述实施例中方法同样的发明构思,本说明书实施例还提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现如前述公开的一种代码历史记录恢复方法的步骤。
上述本发明实施例公开实施例序号仅仅为了描述,不代表实施例的优劣。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。