CN111831271B - 一种支持模拟预合入流水线的Git代码评审系统及其方法 - Google Patents
一种支持模拟预合入流水线的Git代码评审系统及其方法 Download PDFInfo
- Publication number
- CN111831271B CN111831271B CN202010697174.3A CN202010697174A CN111831271B CN 111831271 B CN111831271 B CN 111831271B CN 202010697174 A CN202010697174 A CN 202010697174A CN 111831271 B CN111831271 B CN 111831271B
- Authority
- CN
- China
- Prior art keywords
- code
- branch
- module
- review
- pipeline
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/33—Intelligent editors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种支持模拟预合入流水线的Git代码评审系统,包括代码系统、流水线系统和消息中间件;所述代码系统包括用户交互模块、与用户交互模块连接的代码操作模块、与代码操作模块连接的代码存储模块、以及分别与用户交互模块和代码操作模块连接的代码评审模块;所述代码存储模块与消息中间件连接;所述流水线系统包括流水线配置编排模块、与流水线配置编排模块连接的流水线调度执行模块、以及与流水线调度执行模块连接的构建记录存储模块;所述消息中间件与流水线调度执行模块连接;本发明能够前置代码问题发现的时间,极大的提升了代码评审效率,有效的提高了代码质量,并且能够覆盖目前同一Git代码库内进行代码评审的所有评审模型。
Description
技术领域
本发明涉及一种代码评审系统,具体是一种支持模拟预合入流水线的Git代码评审系统及其方法。
背景技术
在现代软件工程的实践中,代码评审已经被广泛采用,Git也在当前代码系统中得到普遍使用。目前,业界已经存在一些基于Git的专业代码评审工具,例如谷歌公司的ChangeRequest代码评审模型;Gitlab公司的MergeRequest代码评审模型;国内的DirectCode Review代码评审模型(专利申请号201911299362.4)。
上述三种评审模型按照是否使用匿名分支可以分为两类:
1、不适用匿名分支,使用实体分支作为源分支,向目标分支发起合入的代码评审,例如Gitlab的MergeRequest代码评审模型;
2、使用匿名分支,将要合入目标分支的代码存储在一个匿名分支上,发起从匿名分支向目标分支合入的代码评审,例如谷歌公司的ChangeRequest代码评审模型,国内的Direct Code Review代码评审模型。
在进行代码评审的过程中,工具平台通常会提供代码扫描、持续集成流水线执行状态等相关信息辅助进行代码评审,提升代码的质量和代码评审效率。
代码评审从理论上来说至少需要如下两种类型的流水线:
一、保障即将被合入到目标分支上的代码质量的流水线:如果即将被合入到目标分支上的代码流水线构建失败,大概率的说明这些代码本身有问题,评审应当予以打回。
二、保障代码合入到目标分支之后的代码质量的流水线:如果评审代码合入到目标分支后流水线的构建失败,说明合并后的代码有问题,应该进行快速修复或者进行代码回滚。
以上是目前业界比较先进的代码评审系统提供的流水线功能,但是,对于流水线类型二,如果评审代码合入到目标分支后流水线的构建失败,说明合并后的代码有问题,这个时候发现代码问题的时间比较滞后。
如果能在代码评审阶段就能够提前知晓合并后的代码质量问题,前置代码问题发现的时间,对于提升代码评审效率,提高代码质量都会有很大收益。
发明内容
本发明的目的在于提供一种支持模拟预合入流水线的Git代码评审系统及其方法,以解决上述背景技术中提出的问题。
为实现上述目的,本发明提供如下技术方案:
一种支持模拟预合入流水线的Git代码评审系统,包括代码系统、流水线系统和消息中间件;
所述代码系统包括用户交互模块、与用户交互模块连接的代码操作模块、与代码操作模块连接的代码存储模块、以及分别与用户交互模块和代码操作模块连接的代码评审模块;所述代码存储模块与消息中间件连接;
所述流水线系统包括流水线配置编排模块、与流水线配置编排模块连接的流水线调度执行模块、以及与流水线调度执行模块连接的构建记录存储模块;所述消息中间件与流水线调度执行模块连接,所述构建记录存储模块与代码评审模块连接;
所述流水线调度执行模块用于监听代码评审的模拟预合入事件或者流水线内部的定时事件,并调度执行符合触发条件的流水线;
一种支持模拟预合入流水线的Git代码评审方法,包括如下场景:
场景一、流水线配置场景;
用户通过流水线系统中的流水线配置编排模块,为代码系统合入需要经过代码评审的分支配置模拟预合入流水线,并且该流水线的触发条件为评审模拟预合入;
场景二、发起MergeRequest代码评审场景,包括以下步骤:
步骤201、用户通过代码系统中的用户交互模块,创建从源分支A2到目标分支B2的Merge Request代码评审MR2,此时分支A2的最新Commit记为CommitA2, 分支B的最新Commit记为CommitB2;
步骤202、代码评审模块在完成 MR2的创建之后,向代码操作模块发送指令,要求代码操作模块在代码存储模块中创建CommitA2和CommitB2的一个临时合并提交,记为CommitC2;
步骤203、代码操作模块向代码存储模块发送指令,并要求代码存储模块进行CommitC2的创建,如果CommitA2和CommitB2发生代码冲突,无法生成CommitC2,则流程结束;
步骤204、如果CommitA2和CommitB2没有代码冲突,代码存储模块创建CommitC2成功后,向消息中间件发送评审模拟预合入事件消息;
其中,消息体中的分支信息伪造为代码评审MR2的目标分支B2,并将Commit信息伪造为临时CommitC2,事件类型设置为模拟预合入,消息体还包括代码评审单号信息;
步骤205、流水线系统中的流水线调度执行模块获取消息中间件传送的消息,获得步骤204中代码存储模块发送的消息体,并对消息体内容进行解析,获取事件源的分支为分支B2,事件类型为模拟预合入,Commit为CommitC2;
步骤206、流水线调度执行模块通过流水线配置编排模块查找用户在场景一中为分支B2配置的模拟预合入流水线信息,并将该流水线进行调度执行,执行状态信息存储至构建记录存储模块;
步骤207、构建记录存储模块将分支B2的模拟预合入流水线执行状态信息根据评审单号,回传至代码评审模块,从而实现用户在代码评审的过程中,提前得到代码预合入后流水线构建是否能够成功的信息;
场景三、更新MergeRequest代码评审源分支场景,包括以下步骤:
步骤301、基于场景二,用户创建从源分支A2到目标分支B2的Merge Request代码评审记为MR2,此时分支A2的最新Commit记为CommitA2,分支B2的最新Commit记为CommitB2,由于代码评审被驳回,用户通过命令行向分支A2提交更新后的代码记为CommitA2-2;
步骤302、用户交互模块将步骤301中用户代码提交命令转发至代码操作模块;
步骤303、代码操作模块向代码评审模块发送查询请求,查询分支A2是否含有正在评审进行中的Merge Request;
如果没有,代码操作模块将CommitA2-2 提交至代码存储模块中,流程结束;
如果有,则通过代码评审模块获取分支A2正在进行中的Merge Request集合,并记为list3;
步骤304、代码操作模块向代码存储模块发送指令,将分支A2的CommitA2-2提交至代码存储模块;
步骤305、对list3中的每个MR进行步骤306至步骤3010的循环操作;其中,将list3中的每个Merge Request记为MR{n},n表示list3中MergeRequest的数目;
步骤306、代码操作模块向代码存储模块发送指令,在代码存储模块中创建CommitA2-2和CommitB2的一个临时合并提交,记为CommitC3;
如果CommitA2-2和CommitB2发生代码冲突,无法生成CommitC3,则MR{n}的处理流程结束;
步骤307、如果CommitA2-2和CommitB2没有代码冲突,代码存储模块创建CommitC3成功后,向消息中间件发送评审模拟预合入事件消息;
其中,消息体中的分支信息伪造为代码评审的目标分支B2,并将Commit信息伪造为临时CommitC3,事件类型设置为模拟预合入;
步骤308、流水线系统的调度执行模块获取消息中间件中的消息,获得步骤307中代码存储模块发送的消息体,并对消息体内容进行解析,获取事件源的分支为分支B2、事件类型为模拟预合入、Commit信息为CommitC3、评审单号信息MR{n};
步骤309、流水线调度执行模块通过流水线配置编排模块查找用户在场景一中为分支B2配置的模拟预合入流水线信息,并将该流水线进行调度执行,执行状态信息存储至构建记录存储模块;
步骤3010、构建记录存储模块将分支B2的模拟预合入流水线执行状态信息根据评审单号MR{n},回传至代码评审模块,从而实现用户在代码评审的过程中,提前得到代码预合入后流水线构建是否能够成功的信息;
场景四、创建ChangeRequest或Direct Code Review代码评审场景,包括以下步骤:
步骤401、用户将本地编写完成的代码通过客户端发起向目标分支B4的代码评审创建命令,其中,目标分支B4的最新Commit记为CommitB4;
步骤402、代码操作模块向代码存储模块发送指令,创建临时匿名分支A4,并在分支A4上存储用户从客户端在步骤401中提交上来的代码,记为CommitA4;
步骤403、代码操作模块向代码评审模块发送指令,创建代码评审CR4,CR4的目标分支为B4,源分支用户不可见,是匿名的临时分支A4;
步骤404、代码评审模块将代码评审CR4的信息回传至代码操作模块;
步骤405、代码操作模块向代码存储模块发送指令,要求其在代码存储模块中创建CommitA4和CommitB4的一个临时合并提交,记为CommitC4;
如果CommitA4和CommitB4发生代码冲突,无法生成CommitC4,则CR4的处理流程结束;
步骤406、如果CommitA4和CommitB4没有代码冲突,代码存储模块创建CommitC4成功后,向消息中间件发送评审模拟预合入事件消息;
其中,消息体中的分支信息伪造为代码评审的目标分支B4,并将Commit信息伪造为临时CommitC4,事件类型设置为模拟预合入;
步骤407、流水线系统中的调度执行模块获取消息中间件中的消息,获得步骤406中代码存储模块发送的消息体,并对消息体内容进行解析,获取事件源的分支为分支B4、事件类型为模拟预合入、Commit信息为CommitC4、评审单号信息CR4;
步骤408、流水线调度执行模块通过流水线配置编排模块查找用户在场景一中为分支B4配置的模拟预合入流水线信息,并将该流水线进行调度执行,执行状态信息存储至构建记录存储模块;
步骤409、构建记录存储模块将分支B4的模拟预合入流水线执行状态信息根据评审单号CR4,回传至代码评审模块,从而实现用户在代码评审的过程中,提前得到代码预合入后流水线构建是否能够成功的信息;
场景五、更新Change Request或Direct Code Review代码评审匿名临时分支场景,包括以下步骤:
步骤501、基于场景四,用户创建了到目标分支B4的Change Request和DirectCode Review的代码评审记为CR4,此时评审的源分支是用户不可见的匿名临时分支A4,其最新Commit记为CommitA4, 分支B4的最新Commit记为CommitB4,由于代码评审被驳回,用户通过命令行将本地最新的代码推送至服务器端;
步骤502、用户交互模块将步骤501中的用户代码提交命令转发至代码操作模块;
步骤503、代码操作模块根据提交命令中的目标分支信息和提交者信息,从代码评审模块查询到CR4;
步骤504、代码操作模块向代码存储模块发送指令,将用户在步骤501中推送过来的最新代码提交至分支A4,最新的代码记为CommitA4-2;
步骤505、代码操作模块向代码存储模块发送指令,要求其在代码存储模块中创建CommitA4-2和CommitB4的一个临时合并提交,记为CommitC4-2;
如果CommitA4-2和CommitB4发生代码冲突,无法生成CommitC4-2,则CR4的处理流程结束;
步骤506、如果CommitA4和CommitB4没有代码冲突,代码存储模块创建CommitC4-2成功后,向消息中间件发送评审模拟预合入事件消息;
其中,消息体中的分支信息伪造为代码评审的目标分支B4,并将Commit信息伪造为临时CommitC4-2,事件类型设置为模拟预合入;
步骤507、流水线系统中的调度执行模块获取消息中间体的消息,获得步骤506中代码存储模块发送的消息体,并对消息体内容进行解析,获取事件源的分支为分支B4、事件类型为模拟预合入、Commit信息为CommitC4-2、评审单号信息CR4;
步骤508、流水线调度执行模块通过流水线配置编排模块查找用户在场景一中为分支B4配置的模拟预合入流水线信息,并将该流水线进行调度执行,执行状态信息存储至构建记录存储模块;
步骤509、构建记录存储模块将分支B4的模拟预合入流水线执行状态信息根据评审单号CR4,回传至代码评审模块,从而实现用户在代码评审的过程中,提前得到代码预合入后流水线构建是否能够成功的信息;
场景六、评审目标分支更新场景,包括以下步骤:
步骤601、假设多个用户向目标分支B6创建了若干个不同的代码评审,同时具有MergeRequest、Change Request和Direct Code Review,提交更新后的代码记为CommitB6;
步骤602、代码操作模块向代码评审模块发起查询请求,查询分支B6是否有作为目标分支且评审状态正在进行中的评审;如果没有,流程结束;如果有,获取分支B6正在进行中的全部评审集合,记为list6;
步骤603、对list6中的每一个评审进行步骤604至步骤608的循环操作;其中,将list6中的每一个评审记为XR{k},k表示list6中评审的数目;XR{k}的目标分支为B6,B6的最新代码为CommitB6-2,当XR{k}为MergeRequest时,其源分支为实体分支,记为A6-1;当XR{k}为Change Request时,其源分支为匿名临时分支,记为A6-2;当XR{k}为Direct CodeReview时,其源分支也为匿名临时分支,记为A6-3;统一将分支A6-{i}(i=1,2,3)的最新代码记为CommitA6-{i};
步骤604、代码操作模块向代码存储模块发送指令,要求其在代码存储模块中创建CommitA6-{i}和CommitB6-2的一个临时合并提交,记为CommitC6;
如果CommitA6-{i}和CommitB6-2发生代码冲突,无法生成CommitC6,则XR{k}的处理流程结束;
步骤605、如果CommitA6-{i}和CommitB6-2没有代码冲突,代码存储模块创建CommitC6成功后,向消息中间件发送评审模拟预合入事件消息;
其中,消息体中的分支信息伪造为代码评审的目标分支B6,并将Commit信息伪造为临时CommitC6,事件类型设置为模拟预合入;
步骤606、流水线系统中的调度执行模块获取消息中间件的消息,获得步骤605中代码存储模块发送的消息体,并对消息体内容进行解析,获取事件源的分支为分支B6、事件类型为模拟预合入、Commit信息为CommitC6,评审单号信息XR{k};
步骤607、流水线调度执行模块通过流水线配置编排模块查找用户在场景一中为分支B6配置的模拟预合入流水线信息,并将该流水线进行调度执行,执行状态信息存储至构建记录存储模块;
步骤608、构建记录存储模块将分支B6的模拟预合入流水线执行状态信息根据评审单号XR{k},回传至代码评审模块,从而实现用户在代码评审的过程中,提前得到代码预合入后流水线构建是否能够成功的信息。
作为本发明进一步的方案:所述用户交互模块用于向用户提供图形操作界面,以及获取用户通过代码客户端发送的操作命令。
作为本发明进一步的方案:所述代码操作模块用于对代码库进行具体操作。
作为本发明进一步的方案:所述代码存储模块用于存储代码库。
作为本发明进一步的方案:所述代码评审模块用于根据用户操作,创建和更新评审状态,记录代码评审的相关信息。
作为本发明进一步的方案:所述流水线配置编排模块用于对流水线的任务、任务执行的传并行关系、执行的触发条件、关联的代码库分支信息进行编排配置。
作为本发明进一步的方案:所述构建记录存储模块用于存储流水线执行记录数据,并提供查询接口。
与现有技术相比,本发明的有益效果是:
本发明提供了一种支持模拟预合入流水线的Git代码评审系统,前置代码问题发现的时间,极大的提升了代码评审效率,有效的提高了代码质量。本发明对流水线系统中可监听的事件类型进行扩充,使其可监听代码评审的模拟预合入事件。用户在流水线系统中,为目标分支编排配置模拟预合入事件发生时触发的流水线。在代码评审创建、更新、目标分支有代码变更时,对目标分支最新的Commit以及被评审的Commit进行模拟预合并,生成一个临时Commit。 临时Commit生成后,代码评审系统向下游流水线系统发送模拟预合入事件消息,但是消息体中的分支信息伪造为代码评审的目标分支,并将Commit信息伪造为临时Commit,事件类型设置为模拟预合入,其他信息如代码评审单号信息、事件触发人信息、事件触发事件信息等一并作为消息体发送。流水线系统接收到代码评审系统发送的模拟预合入事件消息后,触发目标分支上符合条件的模拟预合入流水线,并将流水线执行结果回传给代码评审系统。
本发明能够在代码评审阶段提前获知代码评审是否能够通过,前置代码问题发现的时间,极大的提升了代码评审效率,有效的提高了代码质量,并且能够覆盖目前同一Git代码库内进行代码评审的所有评审模型。
附图说明
图1为本发明的整体示意图。
图2为本发明的流水线配置场景示意图。
图3为本发明的发起MergeRequest代码评审场景示意图。
图4为本发明的更新MergeRequest代码评审源分支场景示意图。
图5为本发明的创建ChangeRequest和Direct Code Review代码评审场景的结构示意图。
图6为本发明的更新Change Request和Direct Code Review代码评审匿名临时分支场景示意图。
图7为本发明的评审目标分支更新场景示意图。
实施方式
下面结合具体实施方式对本专利的技术方案作进一步详细地说明。
请参阅图1-7,一种支持模拟预合入流水线的Git代码评审系统,包括代码系统、流水线系统和消息中间件。
所述代码系统包括用户交互模块、与用户交互模块连接的代码操作模块、与代码操作模块连接的代码存储模块、以及分别与用户交互模块和代码操作模块连接的代码评审模块;所述代码存储模块与消息中间件连接。所述用户交互模块用于向用户提供图形操作界面,以及获取用户通过代码客户端发送的操作命令;所述代码操作模块用于对代码库进行具体操作;所述代码存储模块用于存储代码库;所述代码评审模块用于根据用户操作,创建和更新评审状态,记录代码评审的相关信息。
所述流水线系统包括流水线配置编排模块、与流水线配置编排模块连接的流水线调度执行模块、以及与流水线调度执行模块连接的构建记录存储模块;所述消息中间件与流水线调度执行模块连接,所述构建记录存储模块与代码评审模块连接。所述流水线配置编排模块用于对流水线的任务、任务执行的传并行关系、执行的触发条件、关联的代码库分支等信息进行编排配置;所述流水线调度执行模块用于监听代码评审的模拟预合入事件或者流水线内部的定时事件,并调度执行符合触发条件的流水线;所述构建记录存储模块用于存储流水线执行记录数据,并提供查询接口。
一种支持模拟预合入流水线的Git代码评审方法,包括如下场景:
场景一、流水线配置场景;
用户通过流水线系统中的流水线配置编排模块,为代码系统合入需要经过代码评审的分支配置模拟预合入流水线,并且该流水线的触发条件为评审模拟预合入,如图2箭头1所示。
场景二、发起Merge Request代码评审场景,包括以下步骤:
步骤201、用户通过代码系统中的用户交互模块,创建从源分支A2到目标分支B2的Merge Request代码评审MR2,此时分支A2的最新Commit记为CommitA2, 分支B的最新Commit记为CommitB2,如图3箭头1、箭头2所示。
步骤202、代码评审模块在完成 MR2的创建之后,向代码操作模块发送指令,要求代码操作模块在代码存储模块中创建CommitA2和CommitB2的一个临时合并提交,记为CommitC2,如图3箭头3所示。
步骤203、代码操作模块向代码存储模块发送指令,并要求代码存储模块进行CommitC2的创建,如果CommitA2和CommitB2发生代码冲突,无法生成CommitC2,则流程结束;此评审无法也没有必要进行模拟预合入流水线的执行,此次代码评审应当被打回,如图3箭头4所示。
步骤204、如果CommitA2和CommitB2没有代码冲突,代码存储模块创建CommitC2成功后,向消息中间件发送评审模拟预合入事件消息,如图3箭头5所示。
其中,消息体中的分支信息伪造为代码评审MR的目标分支B2,并将Commit信息伪造为临时CommitC2,事件类型设置为模拟预合入,消息体还包括代码评审单号信息;并且其他信息如代码评审单号信息、事件触发人信息、事件触发事件信息等一并作为消息体发送。
步骤205、流水线系统中的流水线调度执行模块获取消息中间件传送的消息,如图3箭头6所示,获得步骤204中代码存储模块发送的消息体,并对消息体内容进行解析,获取事件源的分支为分支B2,事件类型为模拟预合入,Commit为CommitC2;
步骤206、流水线调度执行模块通过流水线配置编排模块查找用户在场景一中为分支B2配置的模拟预合入流水线信息,如图3箭头7、箭头8所示,并将该流水线进行调度执行,执行状态信息存储至构建记录存储模块,如图3箭头9所示。
步骤207、构建记录存储模块将分支B2的模拟预合入流水线执行状态信息根据评审单号,回传至代码评审模块,如图3箭头10所示,从而实现用户在代码评审的过程中,提前得到代码预合入后流水线构建是否能够成功的信息;
场景三、更新Merge Request代码评审源分支场景,包括以下步骤:
步骤301、基于场景二,用户创建从源分支A2到目标分支B2的Merge Request代码评审记为MR2,此时分支A2的最新Commit记为CommitA2,分支B2的最新Commit记为CommitB2,由于特殊原因导致代码评审被驳回,用户通过命令行向分支A3提交更新后的代码记为CommitA2-2,如图4箭头1所示。
步骤302、用户交互模块将步骤301中用户代码提交命令转发至代码操作模块,如图4箭头2所示。
步骤303、代码操作模块向代码评审模块发送查询请求,如图4箭头3所示,查询分支A2是否含有正在评审进行中的MergeRequest;
如果没有,代码操作模块将CommitA2-2 提交至代码存储模块中,流程结束,如图4箭头5所示。
如果有,则通过代码评审模块获取分支A2正在进行中的MergeRequest集合,并记为list3,如图4箭头4所示。
步骤304、代码操作模块向代码存储模块发送指令,将分支A2的CommitA2-2提交至代码存储模块;如图4箭头5所示。
步骤305、对list3中的每个MR进行步骤306至步骤3010的循环操作;其中,将list3中的每个MR记为MR{n},n表示list3中MergeRequest的数目;
步骤306、代码操作模块向代码存储模块发送指令,在代码存储模块中创建CommitA2-2和CommitB2的一个临时合并提交,记为CommitC3;
如果CommitA2-2和CommitB2发生代码冲突,无法生成CommitC3,则MR{n}的处理流程结束;此MR{n}评审无法也没有必要进行模拟预合入流水线的执行,此次代码评审应当被打回;如图4箭头5所示。
步骤307、如果CommitA2-2和CommitB2没有代码冲突,代码存储模块创建CommitC3成功后,向消息中间件发送评审模拟预合入事件消息,如图4箭头6所示。
其中,消息体中的分支信息伪造为代码评审的目标分支B2,并将Commit信息伪造为临时CommitC3,事件类型设置为模拟预合入;其他信息如代码评审单号信息MR{n}、事件触发人信息、事件触发事件信息等一并作为消息体发送;
步骤308、流水线系统的调度执行模块获取消息中间件中的消息,如图4箭头7所示,获得步骤307中代码存储模块发送的消息体,并对消息体内容进行解析,获取事件源的分支为分支B2、事件类型为模拟预合入、Commit信息为CommitC3、评审单号信息MR{n};
步骤309、流水线调度执行模块通过流水线配置编排模块查找用户在场景一中为分支B2配置的模拟预合入流水线信息,如图4箭头8、箭头9所示,并将该流水线进行调度执行,执行状态信息存储至构建记录存储模块,如图4箭头10所示。
步骤3010、构建记录存储模块将分支B2的模拟预合入流水线执行状态信息根据评审单号MR{n},回传至代码评审模块,如图4箭头11所示,从而实现用户在代码评审的过程中,提前得到代码预合入后流水线构建是否能够成功的信息;
场景四、创建Change Request或Direct Code Review代码评审场景,虽然ChangeRequest和Direct Code Review的评审创建过程和方法不同,但是这两种评审模型都是通过服务器端匿名评审分支实现的,所以可以作为一种模型处理。包括以下步骤:
步骤401、用户将本地编写完成的代码通过客户端发起向目标分支B4的代码评审创建命令,如图5箭头1所示,其中,目标分支B4的最新Commit记为CommitB4;
步骤402、代码操作模块向代码存储模块发送指令,如图5箭头5所示,创建临时匿名分支A4,并在分支A4上存储用户从客户端在步骤401中提交上来的代码,记为CommitA4;
步骤403、代码操作模块向代码评审模块发送指令,如图5箭头3所示,创建代码评审CR4,CR4的目标分支为B4,源分支用户不可见,是匿名的临时分支A4;
步骤404、代码评审模块将代码评审CR4的信息回传至代码操作模块,如图5箭头4所示。
步骤405、代码操作模块向代码存储模块发送指令,如图5箭头5所示,要求其在代码存储模块中创建CommitA4和CommitB4的一个临时合并提交,记为CommitC4;
如果CommitA4和CommitB4发生代码冲突,无法生成CommitC4,则CR4的处理流程结束;此CR4评审无法也没有必要进行模拟预合入流水线的执行,此次代码评审应当被打回。
步骤406、如果CommitA4和CommitB4没有代码冲突,代码存储模块创建CommitC4成功后,向消息中间件发送评审模拟预合入事件消息,如图5箭头6所示。
其中,消息体中的分支信息伪造为代码评审的目标分支B4,并将Commit信息伪造为临时CommitC4,事件类型设置为模拟预合入,其他信息如代码评审单号信息CR4、事件触发人信息、事件触发事件信息等一并作为消息体发送。
步骤407、流水线系统中的调度执行模块获取消息中间件中的消息,如图5箭头7所示,获得步骤406中代码存储模块发送的消息体,并对消息体内容进行解析,获取事件源的分支为分支B4、事件类型为模拟预合入、Commit信息为CommitC4、评审单号信息CR4;
步骤408、流水线调度执行模块通过流水线配置编排模块查找用户在场景一中为分支B4配置的模拟预合入流水线信息,如图5箭头8、箭头9所示,并将该流水线进行调度执行,执行状态信息存储至构建记录存储模块,如图5箭头10所示。
步骤409、构建记录存储模块将分支B4的模拟预合入流水线执行状态信息根据评审单号CR4,回传至代码评审模块,如图5箭头11所示,从而实现用户在代码评审的过程中,提前得到代码预合入后流水线构建是否能够成功的信息;
场景五、更新Change Request或Direct Code Review代码评审匿名临时分支场景,虽然CR/DCR的评审更新过程和方法不同,但是这两种评审模型都是通过更新服务器端匿名评审分支实现的,所以可以作为一种模型处理。包括以下步骤:
步骤501、基于场景四,用户创建了到目标分支B4的Change Request和DirectCode Review的代码评审记为CR4,此时评审的源分支是用户不可见的匿名临时分支A4,其最新Commit记为CommitA4, 分支B4的最新Commit记为CommitB4,由于特殊原因导致代码评审被驳回,用户通过命令行将本地最新的代码推送至服务器端,如图6箭头1所示。
步骤502、用户交互模块将步骤501中的用户代码提交命令转发至代码操作模块,如图6箭头2所示。
步骤503、代码操作模块根据提交命令中的目标分支信息和提交者信息,从代码评审模块查询到CR4,如图6箭头3、箭头4所示。
步骤504、代码操作模块向代码存储模块发送指令,如图6箭头5所示,将用户在步骤501中推送过来的最新代码提交至分支A4,最新的代码记为CommitA4-2;
步骤505、代码操作模块向代码存储模块发送指令,如图6箭头5所示,要求其在代码存储模块中创建CommitA4-2和CommitB4的一个临时合并提交,记为CommitC4-2;
如果CommitA4-2和CommitB4发生代码冲突,无法生成CommitC4-2,则CR4的处理流程结束;此CR4评审无法也没有必要进行模拟预合入流水线的执行,此次代码评审应当被打回。
步骤506、如果CommitA4和CommitB4没有代码冲突,代码存储模块创建CommitC4-2成功后,向消息中间件发送评审模拟预合入事件消息,如图6箭头6所示。
其中,消息体中的分支信息伪造为代码评审的目标分支B4,并将Commit信息伪造为临时CommitC4-2,事件类型设置为模拟预合入,其他信息如代码评审单号信息CR4、事件触发人信息、事件触发事件信息等一并作为消息体发送。
步骤507、流水线系统中的调度执行模块获取消息中间体的消息,如图6箭头7所示,获得步骤506中代码存储模块发送的消息体,并对消息体内容进行解析,获取事件源的分支为分支B4、事件类型为模拟预合入、Commit信息为CommitC4-2、评审单号信息CR4;
步骤508、流水线调度执行模块通过流水线配置编排模块查找用户在场景一中为分支B4配置的模拟预合入流水线信息,如图6箭头8、箭头9所示,并将该流水线进行调度执行,执行状态信息存储至构建记录存储模块,如图6箭头10所示。
步骤509、构建记录存储模块将分支B4的模拟预合入流水线执行状态信息根据评审单号CR4,回传至代码评审模块,如图6箭头11所示,从而实现用户在代码评审的过程中,提前得到代码预合入后流水线构建是否能够成功的信息;
场景六、评审目标分支更新场景,在代码评审进行期间,除了场景三、场景五提到的Merge Request源分支或者Change Request和Direct Code Review匿名临时分支,会因为新的代码提交导致的变更外,评审的目标分支可能会被其他用户提交了新的代码。包括以下步骤:
步骤601、假设多个用户向目标分支B6创建了若干个不同的代码评审,同时具有Merge Request、Change Request和Direct Code Review,此时分支B因为某种原因,例如被管理员通过直接Push的方式或者因为有些其他评审被合入到了分支B,提交更新后的代码记为CommitB6,如图7箭头1所示。目标分支B的更新过程是现有代码系统逻辑,在此不再赘述。
步骤602、代码操作模块向代码评审模块发起查询请求,如图7箭头2所示,查询分支B6是否有作为目标分支且评审状态正在进行中的评审;如果没有,流程结束;如果有,获取分支B6正在进行中的全部评审集合,记为list6,如图7箭头3所示。
步骤603、对list6中的每一个评审进行步骤604至步骤608的循环操作;其中,将list6中的每一个评审记为XR{k},k表示list6中评审的数目;为说明方便,以list6中的某个评审XR{k}为例来说明后续操作流程,XR{k}的目标分支为B6,B6的最新代码为CommitB6-2,当XR{k}为Merge Request时,其源分支为实体分支,记为A6-1;当XR{k}为ChangeRequest时,其源分支为匿名临时分支,记为A6-2;当XR{k}为Direct Code Review时,其源分支也为匿名临时分支,记为A6-3;统一将分支A6-{i}(i=1,2,3)的最新代码记为CommitA6-{i};
步骤604、代码操作模块向代码存储模块发送指令,如图7通过箭头1所示,要求其在代码存储模块中创建CommitA6-{i}和CommitB6-2的一个临时合并提交,记为CommitC6;
如果CommitA6-{i}和CommitB6-2发生代码冲突,无法生成CommitC6,则XR{k}的处理流程结束;此XR{k}评审无法也没有必要进行模拟预合入流水线的执行,此次代码评审应当被打回。
步骤605、如果CommitA6-{i}和CommitB6-2没有代码冲突,代码存储模块创建CommitC6成功后,向消息中间件发送评审模拟预合入事件消息,如图7箭头4所示;
其中,消息体中的分支信息伪造为代码评审的目标分支B6,并将Commit信息伪造为临时CommitC6,事件类型设置为模拟预合入,其他信息如代码评审单号信息XR{k}、事件触发人信息、事件触发事件信息等一并作为消息体发送。
步骤606、流水线系统中的调度执行模块获取消息中间件的消息,如图7箭头5所示,获得步骤605中代码存储模块发送的消息体,并对消息体内容进行解析,获取事件源的分支为分支B6、事件类型为模拟预合入、Commit信息为CommitC6,评审单号信息XR{k};
步骤607、流水线调度执行模块通过流水线配置编排模块查找用户在场景一中为分支B6配置的模拟预合入流水线信息,如图7箭头6、箭头7所示,并将该流水线进行调度执行,执行状态信息存储至构建记录存储模块,如图7箭头8所示。
步骤608、构建记录存储模块将分支B6的模拟预合入流水线执行状态信息根据评审单号XR{k},回传至代码评审模块,如图7箭头9所示,从而实现用户在代码评审的过程中,提前得到代码预合入后流水线构建是否能够成功的信息。
在本实施例中,所述消息中间件用于上下游系统进行异步信息交互,此为现有技术,在此不再赘述。另外,需要说明的是,本申请中流水线系统执行某个分支上的流水线时,需要通过Commit信息下载代码进行构建,根据Git指定的Commit获取代码库的代码的方法为现有技术,因此在此不再赘述其连接关系及原理。
上面对本专利的较佳实施方式作了详细说明,但是本专利并不限于上述实施方式,在本领域的普通技术人员所具备的知识范围内,还可以在不脱离本专利宗旨的前提下做出各种变化。
Claims (7)
1.一种支持模拟预合入流水线的Git代码评审方法,其特征在于,包括代码系统、流水线系统和消息中间件;
所述代码系统包括用户交互模块、与用户交互模块连接的代码操作模块、与代码操作模块连接的代码存储模块、以及分别与用户交互模块和代码操作模块连接的代码评审模块;所述代码存储模块与消息中间件连接;
所述流水线系统包括流水线配置编排模块、与流水线配置编排模块连接的流水线调度执行模块、以及与流水线调度执行模块连接的构建记录存储模块;所述消息中间件与流水线调度执行模块连接,所述构建记录存储模块与代码评审模块连接;
所述流水线调度执行模块用于监听代码评审的模拟预合入事件或者流水线内部的定时事件,并调度执行符合触发条件的流水线;
该方法包括如下场景:
场景一、流水线配置场景;
用户通过流水线系统中的流水线配置编排模块,为代码系统合入需要经过代码评审的分支配置模拟预合入流水线,并且该流水线的触发条件为评审模拟预合入;
场景二、发起MergeRequest代码评审场景,包括以下步骤:
步骤201、用户通过代码系统中的用户交互模块,创建从源分支A2到目标分支B2的MergeRequest代码评审MR2,此时分支A2的最新Commit记为CommitA2, 分支B的最新Commit记为CommitB2;
步骤202、代码评审模块在完成 MR2的创建之后,向代码操作模块发送指令,要求代码操作模块在代码存储模块中创建CommitA2和CommitB2的一个临时合并提交,记为CommitC2;
步骤203、代码操作模块向代码存储模块发送指令,并要求代码存储模块进行CommitC2的创建,如果CommitA2和CommitB2发生代码冲突,无法生成CommitC2,则流程结束;
步骤204、如果CommitA2和CommitB2没有代码冲突,代码存储模块创建CommitC2成功后,向消息中间件发送评审模拟预合入事件消息;
其中,消息体中的分支信息伪造为代码评审MR2的目标分支B2,并将Commit信息伪造为临时CommitC2,事件类型设置为模拟预合入,消息体还包括代码评审单号信息;
步骤205、流水线系统中的流水线调度执行模块获取消息中间件传送的消息,获得步骤204中代码存储模块发送的消息体,并对消息体内容进行解析,获取事件源的分支为分支B2,事件类型为模拟预合入,Commit为CommitC2;
步骤206、流水线调度执行模块通过流水线配置编排模块查找用户在场景一中为分支B2配置的模拟预合入流水线信息,并将该流水线进行调度执行,执行状态信息存储至构建记录存储模块;
步骤207、构建记录存储模块将分支B2的模拟预合入流水线执行状态信息根据评审单号,回传至代码评审模块,从而实现用户在代码评审的过程中,提前得到代码预合入后流水线构建是否能够成功的信息;
场景三、更新MergeRequest代码评审源分支场景,包括以下步骤:
步骤301、基于场景二,用户创建从源分支A2到目标分支B2的MergeRequest代码评审记为MR2,此时分支A2的最新Commit记为CommitA2,分支B2的最新Commit记为CommitB2,由于代码评审被驳回,用户通过命令行向分支A2提交更新后的代码记为CommitA2-2;
步骤302、用户交互模块将步骤301中用户代码提交命令转发至代码操作模块;
步骤303、代码操作模块向代码评审模块发送查询请求,查询分支A2是否含有正在评审进行中的MergeRequest;
如果没有,代码操作模块将CommitA2-2 提交至代码存储模块中,流程结束;
如果有,则通过代码评审模块获取分支A2正在进行中的MergeRequest集合,并记为list3;
步骤304、代码操作模块向代码存储模块发送指令,将分支A2的CommitA2-2提交至代码存储模块;
步骤305、对list3中的每个MR进行步骤306至步骤3010的循环操作;其中,将list3中的每个MergeRequest记为MR{n},n表示list3中MergeRequest的数目;
步骤306、代码操作模块向代码存储模块发送指令,在代码存储模块中创建CommitA2-2和CommitB2的一个临时合并提交,记为CommitC3;
如果CommitA2-2和CommitB2发生代码冲突,无法生成CommitC3,则MR{n}的处理流程结束;
步骤307、如果CommitA2-2和CommitB2没有代码冲突,代码存储模块创建CommitC3成功后,向消息中间件发送评审模拟预合入事件消息;
其中,消息体中的分支信息伪造为代码评审的目标分支B2,并将Commit信息伪造为临时CommitC3,事件类型设置为模拟预合入;
步骤308、流水线系统的调度执行模块获取消息中间件中的消息,获得步骤307中代码存储模块发送的消息体,并对消息体内容进行解析,获取事件源的分支为分支B2、事件类型为模拟预合入、Commit信息为CommitC3、评审单号信息MR{n};
步骤309、流水线调度执行模块通过流水线配置编排模块查找用户在场景一中为分支B2配置的模拟预合入流水线信息,并将该流水线进行调度执行,执行状态信息存储至构建记录存储模块;
步骤3010、构建记录存储模块将分支B2的模拟预合入流水线执行状态信息根据评审单号MR{n},回传至代码评审模块,从而实现用户在代码评审的过程中,提前得到代码预合入后流水线构建是否能够成功的信息;
场景四、创建ChangeRequest或Direct Code Review代码评审场景,包括以下步骤:
步骤401、用户将本地编写完成的代码通过客户端发起向目标分支B4的代码评审创建命令,其中,目标分支B4的最新Commit记为CommitB4;
步骤402、代码操作模块向代码存储模块发送指令,创建临时匿名分支A4,并在分支A4上存储用户从客户端在步骤401中提交上来的代码,记为CommitA4;
步骤403、代码操作模块向代码评审模块发送指令,创建代码评审CR4,CR4的目标分支为B4,源分支用户不可见,是匿名的临时分支A4;
步骤404、代码评审模块将代码评审CR4的信息回传至代码操作模块;
步骤405、代码操作模块向代码存储模块发送指令,要求其在代码存储模块中创建CommitA4和CommitB4的一个临时合并提交,记为CommitC4;
如果CommitA4和CommitB4发生代码冲突,无法生成CommitC4,则CR4的处理流程结束;
步骤406、如果CommitA4和CommitB4没有代码冲突,代码存储模块创建CommitC4成功后,向消息中间件发送评审模拟预合入事件消息;
其中,消息体中的分支信息伪造为代码评审的目标分支B4,并将Commit信息伪造为临时CommitC4,事件类型设置为模拟预合入;
步骤407、流水线系统中的调度执行模块获取消息中间件中的消息,获得步骤406中代码存储模块发送的消息体,并对消息体内容进行解析,获取事件源的分支为分支B4、事件类型为模拟预合入、Commit信息为CommitC4、评审单号信息CR4;
步骤408、流水线调度执行模块通过流水线配置编排模块查找用户在场景一中为分支B4配置的模拟预合入流水线信息,并将该流水线进行调度执行,执行状态信息存储至构建记录存储模块;
步骤409、构建记录存储模块将分支B4的模拟预合入流水线执行状态信息根据评审单号CR4,回传至代码评审模块,从而实现用户在代码评审的过程中,提前得到代码预合入后流水线构建是否能够成功的信息;
场景五、更新Change Request或Direct Code Review代码评审匿名临时分支场景,包括以下步骤:
步骤501、基于场景四,用户创建了到目标分支B4的Change Request和Direct CodeReview的代码评审记为CR4,此时评审的源分支是用户不可见的匿名临时分支A4,其最新Commit记为CommitA4, 分支B4的最新Commit记为CommitB4,由于代码评审被驳回,用户通过命令行将本地最新的代码推送至服务器端;
步骤502、用户交互模块将步骤501中的用户代码提交命令转发至代码操作模块;
步骤503、代码操作模块根据提交命令中的目标分支信息和提交者信息,从代码评审模块查询到CR4;
步骤504、代码操作模块向代码存储模块发送指令,将用户在步骤501中推送过来的最新代码提交至分支A4,最新的代码记为CommitA4-2;
步骤505、代码操作模块向代码存储模块发送指令,要求其在代码存储模块中创建CommitA4-2和CommitB4的一个临时合并提交,记为CommitC4-2;
如果CommitA4-2和CommitB4发生代码冲突,无法生成CommitC4-2,则CR4的处理流程结束;
步骤506、如果CommitA4和CommitB4没有代码冲突,代码存储模块创建CommitC4-2成功后,向消息中间件发送评审模拟预合入事件消息;
其中,消息体中的分支信息伪造为代码评审的目标分支B4,并将Commit信息伪造为临时CommitC4-2,事件类型设置为模拟预合入;
步骤507、流水线系统中的调度执行模块获取消息中间体的消息,获得步骤506中代码存储模块发送的消息体,并对消息体内容进行解析,获取事件源的分支为分支B4、事件类型为模拟预合入、Commit信息为CommitC4-2、评审单号信息CR4;
步骤508、流水线调度执行模块通过流水线配置编排模块查找用户在场景一中为分支B4配置的模拟预合入流水线信息,并将该流水线进行调度执行,执行状态信息存储至构建记录存储模块;
步骤509、构建记录存储模块将分支B4的模拟预合入流水线执行状态信息根据评审单号CR4,回传至代码评审模块,从而实现用户在代码评审的过程中,提前得到代码预合入后流水线构建是否能够成功的信息;
场景六、评审目标分支更新场景,包括以下步骤:
步骤601、假设多个用户向目标分支B6创建了若干个不同的代码评审,同时具有MergeRequest、Change Request和Direct Code Review,提交更新后的代码记为CommitB6;
步骤602、代码操作模块向代码评审模块发起查询请求,查询分支B6是否有作为目标分支且评审状态正在进行中的评审;如果没有,流程结束;如果有,获取分支B6正在进行中的全部评审集合,记为list6;
步骤603、对list6中的每一个评审进行步骤604至步骤608的循环操作;其中,将list6中的每一个评审记为XR{k},k表示list6中评审的数目;XR{k}的目标分支为B6,B6的最新代码为CommitB6-2,当XR{k}为MergeRequest时,其源分支为实体分支,记为A6-1;当XR{k}为Change Request时,其源分支为匿名临时分支,记为A6-2;当XR{k}为Direct Code Review时,其源分支也为匿名临时分支,记为A6-3;统一将分支A6-{i}(i=1,2,3)的最新代码记为CommitA6-{i};
步骤604、代码操作模块向代码存储模块发送指令,要求其在代码存储模块中创建CommitA6-{i}和CommitB6-2的一个临时合并提交,记为CommitC6;
如果CommitA6-{i}和CommitB6-2发生代码冲突,无法生成CommitC6,则XR{k}的处理流程结束;
步骤605、如果CommitA6-{i}和CommitB6-2没有代码冲突,代码存储模块创建CommitC6成功后,向消息中间件发送评审模拟预合入事件消息;
其中,消息体中的分支信息伪造为代码评审的目标分支B6,并将Commit信息伪造为临时CommitC6,事件类型设置为模拟预合入;
步骤606、流水线系统中的调度执行模块获取消息中间件的消息,获得步骤605中代码存储模块发送的消息体,并对消息体内容进行解析,获取事件源的分支为分支B6、事件类型为模拟预合入、Commit信息为CommitC6,评审单号信息XR{k};
步骤607、流水线调度执行模块通过流水线配置编排模块查找用户在场景一中为分支B6配置的模拟预合入流水线信息,并将该流水线进行调度执行,执行状态信息存储至构建记录存储模块;
步骤608、构建记录存储模块将分支B6的模拟预合入流水线执行状态信息根据评审单号XR{k},回传至代码评审模块,从而实现用户在代码评审的过程中,提前得到代码预合入后流水线构建是否能够成功的信息。
2.根据权利要求1所述的一种支持模拟预合入流水线的Git代码评审方法,其特征在于,所述用户交互模块用于向用户提供图形操作界面,以及获取用户通过代码客户端发送的操作命令。
3.根据权利要求1所述的一种支持模拟预合入流水线的Git代码评审方法,其特征在于,所述代码操作模块用于对代码库进行具体操作。
4.根据权利要求1所述的一种支持模拟预合入流水线的Git代码评审方法,其特征在于,所述代码存储模块用于存储代码库。
5.根据权利要求1所述的一种支持模拟预合入流水线的Git代码评审方法,其特征在于,所述代码评审模块用于根据用户操作,创建和更新评审状态,记录代码评审的相关信息。
6.根据权利要求1所述的一种支持模拟预合入流水线的Git代码评审方法,其特征在于,所述流水线配置编排模块用于对流水线的任务、任务执行的传并行关系、执行的触发条件、关联的代码库分支信息进行编排配置。
7.根据权利要求1所述的一种支持模拟预合入流水线的Git代码评审方法,其特征在于,所述构建记录存储模块用于存储流水线执行记录数据,并提供查询接口。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010697174.3A CN111831271B (zh) | 2020-07-20 | 2020-07-20 | 一种支持模拟预合入流水线的Git代码评审系统及其方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010697174.3A CN111831271B (zh) | 2020-07-20 | 2020-07-20 | 一种支持模拟预合入流水线的Git代码评审系统及其方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111831271A CN111831271A (zh) | 2020-10-27 |
CN111831271B true CN111831271B (zh) | 2023-07-07 |
Family
ID=72922989
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010697174.3A Active CN111831271B (zh) | 2020-07-20 | 2020-07-20 | 一种支持模拟预合入流水线的Git代码评审系统及其方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111831271B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114860225B (zh) * | 2022-05-20 | 2023-11-10 | 北京智源人工智能研究院 | 基于git子模块的类型安全系统、实现方法和电子设备 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105739968A (zh) * | 2016-01-20 | 2016-07-06 | 北京京东尚科信息技术有限公司 | 基于分布式版本控制系统Git的更新内容的评审方法和装置 |
CN109117170A (zh) * | 2017-06-22 | 2019-01-01 | 中兴通讯股份有限公司 | 一种运行环境搭建方法及装置、代码合入方法及系统 |
US10289407B1 (en) * | 2013-03-15 | 2019-05-14 | Atlassian Pty Ltd | Correcting comment drift in merges in a version control system |
CN109901876A (zh) * | 2019-02-28 | 2019-06-18 | 携程旅游信息技术(上海)有限公司 | 代码评审方法、系统、设备及存储介质 |
CN110809756A (zh) * | 2017-06-29 | 2020-02-18 | 微软技术许可有限责任公司 | 代码评审重新设定差异 |
CN110968301A (zh) * | 2019-12-17 | 2020-04-07 | 刘庆 | 基于代码版本控制原生客户端及命令的代码评审创建方法 |
CN111240692A (zh) * | 2020-01-17 | 2020-06-05 | 北京简单一点科技有限公司 | 一种代码分支冲突提前预警方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080295085A1 (en) * | 2007-05-25 | 2008-11-27 | Microsoft Corporation | Integrated code review tool |
-
2020
- 2020-07-20 CN CN202010697174.3A patent/CN111831271B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10289407B1 (en) * | 2013-03-15 | 2019-05-14 | Atlassian Pty Ltd | Correcting comment drift in merges in a version control system |
CN105739968A (zh) * | 2016-01-20 | 2016-07-06 | 北京京东尚科信息技术有限公司 | 基于分布式版本控制系统Git的更新内容的评审方法和装置 |
CN109117170A (zh) * | 2017-06-22 | 2019-01-01 | 中兴通讯股份有限公司 | 一种运行环境搭建方法及装置、代码合入方法及系统 |
CN110809756A (zh) * | 2017-06-29 | 2020-02-18 | 微软技术许可有限责任公司 | 代码评审重新设定差异 |
CN109901876A (zh) * | 2019-02-28 | 2019-06-18 | 携程旅游信息技术(上海)有限公司 | 代码评审方法、系统、设备及存储介质 |
CN110968301A (zh) * | 2019-12-17 | 2020-04-07 | 刘庆 | 基于代码版本控制原生客户端及命令的代码评审创建方法 |
CN111240692A (zh) * | 2020-01-17 | 2020-06-05 | 北京简单一点科技有限公司 | 一种代码分支冲突提前预警方法 |
Non-Patent Citations (4)
Title |
---|
Git仓库代码演化过程中的注解定位技术研究;诸葛文杜;《中国优秀硕士学位论文全文数据库信息科技辑》(第02期);全文 * |
Peter C. Rigby et al..The Art and Science of Analyzing Software Data.Morgan Kaufmann Publishers,2015,231-255. * |
Stephan Krusche et al..Teaching code review management using branch based workflows.ICSE '16: Proceedings of the 38th International Conference on Software Engineering Companion.2016,全文. * |
面向Git的代码评审系统的设计与实现;尤璐洁;《中国优秀硕士学位论文全文数据库信息科技辑》(第08期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN111831271A (zh) | 2020-10-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9432455B2 (en) | Synchronizing events between mobile devices and servers | |
CN107017992B (zh) | 一种基于双链结构的高性能联盟区块链的设计方法 | |
CN111400011B (zh) | 一种实时任务调度方法、系统、设备及可读存储介质 | |
US9171252B2 (en) | Synchronization for context-aware complex event processing | |
WO2018001200A1 (zh) | 数据处理方法、集群管理器、资源管理器、数据处理系统 | |
CN112700310B (zh) | 一种基于电商平台的交易订单数据优化处理方法 | |
CN113505520A (zh) | 用于支持异构联邦学习的方法、装置和系统 | |
CN111831271B (zh) | 一种支持模拟预合入流水线的Git代码评审系统及其方法 | |
CN112131315A (zh) | 多任务并行开发下的数据库同步方法及装置 | |
US11249793B2 (en) | Executing a pipeline command sequence designed for execution on a single node across a fleet of nodes | |
CN115220779A (zh) | 一种代码库管理方法、装置及计算机介质 | |
CN111553652A (zh) | 业务处理方法及装置 | |
CN111159300A (zh) | 基于区块链的数据处理方法及装置 | |
CN114157550A (zh) | 一种基于无冲突事务合并的联盟区块链系统 | |
US8719316B2 (en) | Write agent delayed write to data stores | |
CN113111125A (zh) | 一种基于区块链的业务存证方法 | |
CN112825525A (zh) | 用于处理事务的方法和装置 | |
CN114996246A (zh) | 一种基于NiFi组件的表多个字段校验的数据清洗方法 | |
CN110365535B (zh) | 一种基于安全多方计算的模型上线方法及装置 | |
CN113360365A (zh) | 一种流程测试方法和流程测试系统 | |
Nikiforova et al. | Towards a concurrence analysis in business processes | |
CN110839064A (zh) | 一种分布式系统执行脚本的方法及装置 | |
CN113031960B (zh) | 代码编译方法、装置、服务器及存储介质 | |
Baxter | Mastering Akka | |
CN110990475B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |