CN113760234A - 一种软件开发方法和系统 - Google Patents
一种软件开发方法和系统 Download PDFInfo
- Publication number
- CN113760234A CN113760234A CN202111040287.7A CN202111040287A CN113760234A CN 113760234 A CN113760234 A CN 113760234A CN 202111040287 A CN202111040287 A CN 202111040287A CN 113760234 A CN113760234 A CN 113760234A
- Authority
- CN
- China
- Prior art keywords
- warehouse
- branch
- main
- development
- local
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2358—Change logging, detection, and notification
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2365—Ensuring data consistency and integrity
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
-
- 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
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Computer Security & Cryptography (AREA)
- Computing Systems (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明实施例公开了一种软件开发方法,包括:从主仓库中复刻开发项目至私有仓库;从私有仓库中克隆开发项目至本地仓库;增加本地仓库与主仓库的关联;基于主分支创建开发分支,在开发分支上完成功能开发,并提交变更记录至本地仓库或私有仓库;切换至测试分支,将开发分支的代码合并到测试分支测试;切换至预上线分支,将开发分支的代码合并至预上线分支测试;切换至主分支,将开发分支的代码合并至主分支进行上线;删除本地仓库和私有仓库中已经上线的开发分支。本发明实施例还公开了一种软件开发系统。本发明可避免协同开发时出现错误,提高协同开发的有效性。
Description
技术领域
本发明涉及计算机技术领域,具体而言,涉及一种软件开发方法和系统。
背景技术
目前软件架构由于其复杂性需要多个开发人员协同开发完成。开发过程中经常会出现多个开发人员对同一个项目的代码进行修改的情况,不同的需求可能对同一份代码块做出修改。这种情况会出现新的开发功能可能导致原有的功能或是其他人员开发的功能出现错误或不可用。
发明内容
为解决上述问题,本发明的目的在于提供一种软件开发方法和系统,可以避免多个开发人员协同开发时出现错误,提高协同开发的有效性。
本发明实施例提供了一种软件开发方法,所述方法包括:
从主仓库中复刻开发项目至私有仓库;
从所述私有仓库中克隆所述开发项目至本地仓库;
增加所述本地仓库与所述主仓库的关联;
在所述本地仓库中切换至主分支,从所述主仓库拉取所述主仓库的主分支的代码至所述本地仓库,并基于所述本地仓库的主分支创建开发分支,在所述开发分支上完成功能开发,并提交变更记录至所述本地仓库或所述私有仓库;
在所述本地仓库中切换至测试分支,将所述开发分支的代码合并至所述本地仓库的测试分支中,提交所述本地仓库的测试分支的修改记录到所述私有仓库的测试分支中,发送所述私有仓库的测试分支合并至所述主仓库的测试分支的合并请求,管理员审核确认合并请求中的代码无误后,执行合并操作并将所述主仓库中的测试分支的代码部署至测试环境中进行测试;
在所述本地仓库中切换至预上线分支,将所述开发分支的代码合并至所述本地仓库的预上线分支中,提交所述本地仓库的预上线分支的修改记录到所述私有仓库的预上线分支中,发送所述私有仓库的预上线分支合并至所述主仓库的预上线分支的合并请求,管理员审核确认代码无误后,执行合并操作并将所述主仓库的预上线分支的代码部署至预上线环境中进行测试;
在所述本地仓库中切换至主分支,将所述开发分支的代码合并至所述本地仓库的主分支中,提交所述本地仓库的主分支的修改记录到所述私有仓库的主分支中,发送所述私有仓库的主分支合并至所述主仓库的主分支的合并请求,管理员审核确认代码无误后,执行合并操作并将所述主仓库的主分支的代码部署至线上环境中进行上线;
删除所述本地仓库和所述私有仓库中已经上线的开发分支。
作为本发明进一步的改进,所述主仓库中设主分支、测试分支和预上线分支,
所述私有仓库中设主分支、测试分支、预上线分支和多个开发分支,
所述本地仓库中设主分支、测试分支、预上线分支和多个开发分支。
作为本发明进一步的改进,所述增加所述本地仓库与所述主仓库的关联,包括:
在所述本地仓库中修改已经关联的开发项目中的.git/config配置文件,增加所述主仓库的地址,并保存配置文件。
作为本发明进一步的改进,所述开发分支采用自定义前缀_任务功能名称进行命名。
作为本发明进一步的改进,所述在所述开发分支上完成功能开发,包括:
在所述本地仓库中切换至主分支,从所述主仓库中拉取所述主分支的代码,并将拉取的代码同步至所述私有仓库中;
在所述本地仓库中切换至所述开发分支,将拉取的所述主分支的代码合并至所述开发分支,在所述开发分支上完成功能开发。
作为本发明进一步的改进,所述方法还包括:重置测试环境,包括:
依次删除所述主仓库、所述私有仓库和所述本地仓库中已有的测试分支;
在所述本地仓库中,切换至所述主分支,所述本地仓库从所述主仓库中拉取所述主分支的代码,并基于所述主分支创建测试分支;
依次在所述主仓库和所述私有仓库中创建测试分支;
所述方法还包括:重置预上线环境,包括:
依次删除所述主仓库、所述私有仓库和所述本地仓库中已有的预上线分支;
在所述本地仓库中切换至所述主分支,所述本地仓库从所述主仓库中拉取所述主分支的代码,并基于所述主分支创建预上线分支;
依次在所述主仓库和所述私有仓库中创建预上线分支。
作为本发明进一步的改进,所述在所述开发分支上完成功能开发,还包括:
在所述本地仓库中切换各个分支,且不需要提交变更记录至所述本地仓库或所述私有仓库时,使用git stash命令完成临时存储。
本发明实施例还提供了一种软件开发系统,所述系统包括:
复刻模块,用于从主仓库中复刻开发项目至私有仓库;
克隆模块,用于从所述私有仓库中克隆所述开发项目至本地仓库;
关联模块,用于增加所述本地仓库与所述主仓库的关联;
开发模块,用于在所述本地仓库中切换至主分支,从所述主仓库拉取所述主仓库的主分支的代码至所述本地仓库,并基于所述本地仓库的主分支创建开发分支,在所述开发分支上完成功能开发,并提交变更记录至所述本地仓库或所述私有仓库;
测试模块,用于在所述本地仓库中切换至测试分支,将所述开发分支的代码合并至所述本地仓库的测试分支中,提交所述本地仓库的测试分支的修改记录到所述私有仓库的测试分支中,发送所述私有仓库的测试分支合并至所述主仓库的所述测试分支的合并请求,管理员审核确认合并请求中的代码无误后,执行合并操作并将所述主仓库中的测试分支的代码部署至测试环境中进行测试;
预上线模块,用于在所述本地仓库中切换至预上线分支,将所述开发分支的代码合并至所述本地仓库的预上线分支中,提交所述本地仓库的预上线分支的修改记录到所述私有仓库的预上线分支中,发送所述私有仓库的预上线分支合并至所述主仓库的预上线分支的合并请求,管理员审核确认代码无误后,执行合并操作并将所述主仓库的预上线分支的代码部署至预上线环境中进行测试;
上线模块,用于在所述本地仓库中切换至主分支,将所述开发分支的代码合并至所述本地仓库的主分支中,提交所述本地仓库的主分支的修改记录到所述私有仓库的主分支中,发送所述私有仓库的主分支合并至所述主仓库的主分支的合并请求,管理员审核确认代码无误后,执行合并操作并将所述主仓库的主分支的代码部署至线上环境中进行上线;
清理模块,用于删除所述本地仓库和所述私有仓库中已经上线的开发分支。
作为本发明进一步的改进,所述主仓库中设主分支、测试分支和预上线分支,
所述私有仓库中设主分支、测试分支、预上线分支和多个开发分支,
所述本地仓库中设主分支、测试分支、预上线分支和多个开发分支。
作为本发明进一步的改进,所述修改模块,包括:
在所述本地仓库中修改已经关联的开发项目中的.git/config配置文件,增加所述主仓库的地址,并保存配置文件。
作为本发明进一步的改进,所述开发分支采用自定义前缀_任务功能名称进行命名。
作为本发明进一步的改进,所述开发模块,包括:
在所述本地仓库中切换至主分支,从所述主仓库中拉取所述主分支的代码,并将拉取的代码同步至所述私有仓库中;
在所述本地仓库中切换至所述开发分支,将拉取的所述主分支的代码合并至所述开发分支,在所述开发分支上完成功能开发。
作为本发明进一步的改进,所述系统还包括测试环境重置模块,包括:
依次删除所述主仓库、所述私有仓库和所述本地仓库中已有的测试分支;
在所述本地仓库中,切换至所述主分支,所述本地仓库从所述主仓库中拉取所述主分支的代码,并基于所述主分支创建测试分支;
依次在所述主仓库和所述私有仓库中创建测试分支;
所述系统还包括重置预上线环境模块,包括:
依次删除所述主仓库、所述私有仓库和所述本地仓库中已有的预上线分支;
在所述本地仓库中切换至所述主分支,所述本地仓库从所述主仓库中拉取所述主分支的代码,并基于所述主分支创建预上线分支;
依次在所述主仓库和所述私有仓库中创建预上线分支。
作为本发明进一步的改进,所述开发模块,还包括:
在所述本地仓库中切换各个分支,且不需要提交变更记录至所述本地仓库或所述私有仓库时,使用git stash命令完成临时存储。
本发明的有益效果为:
在多个开发人员协同开发过程中,每个开发人员均执行同样的开发流程,每个开发人员只管理和自己相关的开发分支,各个开发人员之间的开发流程互不干涉,避免了多个开发人员在协同开发时的开发冲突,减少了协同开发时出现的错误,提高了协同开发的有效性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明一示例性实施例所述的一种软件开发方法的流程示意图;
图2为本发明一示例性实施例所述的主仓库、私有仓库和本地仓库之间的工作流程示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明,若本发明实施例中有涉及方向性指示(诸如上、下、左、右、前、后……),则该方向性指示仅用于解释在某一特定姿态(如附图所示)下各部件之间的相对位置关系、运动情况等,如果该特定姿态发生改变时,则该方向性指示也相应地随之改变。
另外,在本发明的描述中,所用术语仅用于说明目的,并非旨在限制本发明的范围。术语“包括”和/或“包含”用于指定所述元件、步骤、操作和/或组件的存在,但并不排除存在或添加一个或多个其他元件、步骤、操作和/或组件的情况。术语“第一”、“第二”等可能用于描述各种元件,不代表顺序,且不对这些元件起限定作用。此外,在本发明的描述中,除非另有说明,“多个”的含义是两个及两个以上。这些术语仅用于区分一个元素和另一个元素。结合以下附图,这些和/或其他方面变得显而易见,并且,本领域普通技术人员更容易理解关于本发明所述实施例的说明。附图仅出于说明的目的用来描绘本发明所述实施例。本领域技术人员将很容易地从以下说明中认识到,在不背离本发明所述原理的情况下,可以采用本发明所示结构和方法的替代实施例。
本发明实施例所述的一种软件开发方法,如图1和2所示,所述方法包括:
S1,从主仓库中复刻开发项目至私有仓库;
S2,从所述私有仓库中克隆所述开发项目至本地仓库;
S3,增加所述本地仓库与所述主仓库的关联;
S4,在所述本地仓库中切换至主分支,从所述主仓库拉取所述主仓库的主分支的代码至所述本地仓库,并基于所述本地仓库的主分支创建开发分支,在所述开发分支上完成功能开发,并提交变更记录至所述本地仓库或所述私有仓库;
S5,在所述本地仓库中切换至测试分支,将所述开发分支的代码合并至所述本地仓库的测试分支中,提交所述本地仓库的测试分支的修改记录到所述私有仓库的测试分支中,发送所述私有仓库的测试分支合并至所述主仓库的测试分支的合并请求,管理员审核确认合并请求中的代码无误后,执行合并操作并将所述主仓库中的测试分支的代码部署至测试环境中进行测试;
S6,在所述本地仓库中切换至预上线分支,将所述开发分支的代码合并至所述本地仓库的预上线分支中,提交所述本地仓库的预上线分支的修改记录到所述私有仓库的预上线分支中,发送所述私有仓库的预上线分支合并至所述主仓库的预上线分支的合并请求,管理员审核确认代码无误后,执行合并操作并将所述主仓库的预上线分支的代码部署至预上线环境中进行测试;
S7,在所述本地仓库中切换至主分支,将所述开发分支的代码合并至所述本地仓库的主分支中,提交所述本地仓库的主分支的修改记录到所述私有仓库的主分支中,发送所述私有仓库的主分支合并至所述主仓库的主分支的合并请求,管理员审核确认代码无误后,执行合并操作并将所述主仓库的主分支的代码部署至线上环境中进行上线;
S8,删除所述本地仓库中的所述开发分支和所述私有仓库中所述开发分支的更新记录。
在多个开发人员协同开发过程中,每个开发人员均执行本发明所述方法同样的开发流程,每个开发人员只管理和自己相关的开发分支,各个开发人员之间的开发流程互不干涉,避免了多个开发人员在协同开发时的开发冲突,减少了协同开发时出现的错误,提高了协同开发的有效性。
其中,所述主仓库(main)是gitlab仓库。S1中,在main中Fork(复刻)开发项目(所开发的项目),将项目Fork至私有仓库(origin,自己的仓库)中。S2中,从origin中clone(克隆)项目至本地仓库,clone过程中会将私有仓库的地址clone至本地仓库。
一种可选的实施方式中,所述主仓库中设主分支、测试分支和预上线分支,
所述私有仓库中设主分支、测试分支、预上线分支和多个开发分支,
所述本地仓库中设主分支、测试分支、预上线分支和多个开发分支。
需要指出的是,主仓库中设主分支(master)、测试分支(test)和预上线分支(pre),尽量不要有其他分支。如果需要设其他特殊分支,可通过管理员添加,但不能增加开发分支。私有仓库中除了(master)、测试分支(test)和预上线分支(pre),还有多个开发分支,例如sun_user、sun_order等。本地仓库中除了(master)、测试分支(test)和预上线分支(pre),还有多个开发分支,例如sun_user、sun_order等。
一种可选的实施方式中,所述增加所述本地仓库与所述主仓库的关联,包括:
在所述本地仓库中修改已经关联的开发项目中的.git/config配置文件,增加所述主仓库的地址,并保存配置文件。
在多个开发人员同步开发时,需要同步开发项目,在此基础上进行二次开发。但是,开发项目的版本一直在更新,为了保持与其一致,在本地仓库进行二次开发前,需要增加与主仓库的关联,以使本地仓库能同步其最新的代码。S3中,在增加所述本地仓库与所述主仓库的关联时,采用修改本地仓库中已经关联的开发项目中的.git/config配置文件,即.git文件夹下的config文件,增加主仓库main的地址,可以复制私有仓库的格式,直接修改config文件中的url地址(该url地址为本地仓库clone过程从私有仓库clone来的主仓库地址)即可,修改完保存配置文件。
可以理解的是,在开发人员接到开发任务时,配置完成前述S1-S3步骤后,S4中,需要从主仓库中拉取本地仓库中本地分支的最新的代码,此过程不能从私有仓库中拉取。如果目前本地分支是主分支(master),则直接从主仓库拉取master的代码,执行拉取命令为:git pull main master。每个开发人员在开发完成后都会合并代码至线上分支,把master作为线上分支,这一步骤通过拉取main中master最新的代码,即便有其他开发人员修改并提交了代码,也能得到最新的代码。需要指出的是,本发明中将master作为了线上分支,在实际应用时,还可以是例如online或其他分支作为线上分支,此时从main中拉取online或其他分支最新的代码即可。需要注意的是,本地仓库目前是什么分支,就从主仓库中相应的拉取什么分支的代码,不要交叉拉取。
一种可选的实施方式中,所述开发分支采用自定义前缀_任务功能名称进行命名。
需要指出的是,基于master创建自己的开发分支时,每个开发人员对自己的开发分支需要执行相同的命名规范,均采用自定义前缀_任务功能名称的方式进行命名。前缀例如可以为开发人员自己的名字的缩写等,例如开发分支命名为sun_user,这个分支是sun这个开发人员关于用户功能的开发。
在本地仓库的开发分支上进行开发时,开发过程中可以不断地commit(提交)代码,代码可以提交至本地仓库,也可以提交至私有仓库,但不能提交至主仓库。本地仓库的开发分支可以作为临时分支,待代码提交上线后该临时分支可以删除。
一种可选的实施方式中,所述在所述开发分支上完成功能开发,包括:
在所述本地仓库中切换至主分支,从所述主仓库中拉取所述主分支的代码,并将拉取的代码同步至所述私有仓库中;
在所述本地仓库中切换至所述开发分支,将拉取的所述主分支的代码合并至所述开发分支,在所述开发分支上完成功能开发。
可以理解的是,某一开发人员在开发过程中可能代码没有合并至主分支,然而主分支的代码被其他开发人员修改提交了多次,因此在开发过程中需要同步线上代码,即将主分支的代码同步至自己的开发分支,在此基础上进行开发。先在本地仓库切换至master,然后拉取main中master的最新代码,执行命令为:git pull main master。执行完master的代码更新之后可以执行git push,把最新代码同步到私有仓库中。再在本地仓库切换至自己的开发分支sun_user上,然后把master的代码合并到sun_user上,执行命令为:gitmerge master--no-commit--squash。合并完不要执行commit操作,先确定merge的文件是否做了修改,防止merge出现错误,通过--squash将开发分支上的所有变更记录合并成一个commit,以便于开发人员确定sun_user上的功能变化。另外merge过程中可能会出现冲突,在这一步需要解决冲突。
需要指出的是,在将主分支的代码合并至开发分支的过程中,可能会产生冲突,直接解决冲突即可,解决完冲突后主分支的代码即可同步至自己的开发分支,就可以继续开发了。
在开发过程中同步主分支代码至自己的开发分支,可以尽可能避免在后续执行最终的合并操作(代码上线)时产生过多的冲突,致使线上运行错误。通过在开发过程中同步代码解决各个冲突,将错误尽量暴露于开发阶段,还可以解决由于其他开发人员修改了公共方法,导致开发过程中依赖之前公共方法需要重写代码的问题。
一种可选的实施方式中,所述在所述开发分支上完成功能开发,还包括:
在所述本地仓库中切换各个分支,且不需要提交变更记录至所述本地仓库或所述私有仓库时,使用git stash命令完成临时存储。
还可以理解的是,在开发过程中,开发人员还会遇到频繁的切换分支,比如正在开发分支上开发时,但因为某种原因需要切换至其他分支,但又不提交代码,此时,可以使用git stash命令进行解决,将当前未提交到本地仓库或私有仓库的代码推入到缓存栈中,随时可以重新再应用。
例如,可以使用git stash.命令,缓存当前修改,可以使用git stash pop.命令,将缓存堆栈中的第一个stash删除,并将对应修改应用到当前的工作目录下,还可以使用git stash apply命令,将缓存堆栈中的stash多次应用到工作目录中,但并不删除stash拷贝。
一种可选的实施方式中,所述方法还包括:重置测试环境,包括:
依次删除所述主仓库、所述私有仓库和所述本地仓库中已有的测试分支;
在所述本地仓库中,切换至所述主分支,所述本地仓库从所述主仓库中拉取所述主分支的代码,并基于所述主分支创建测试分支;
依次在所述主仓库和所述私有仓库中创建测试分支。
在本地的开发分支上开发完功能后,需要进行测试,重置测试环境是一个非常必要的过程,为功能测试提供相对干净的环境,避免由于环境的不同,造成测试过程中产生很多bug。重置测试环境的操作最好是由管理员进行操作。首先可以通过gitlab仓库删除main中的test(测试分支),也可以通过命令删除。其次删除私有仓库中的test,最后删除本地仓库中的test,删除过程同删除main仓库中的test。三个仓库删除测试分支的命令分别如下:
git push main--delete test
git push origin--delete test
git brand-D test。
在本地仓库中切换至master,拉取最新的main master的代码,基于master创建test。命令如下:
git checkout master
git pull main master
git checkout-b test
最后是创建main和origin的test分支。命令如下:
git push--set-upstream main test
git push--set-upstream origin test
基于上述流程,测试环境就重置完成了,此时本地仓库中的测试环境与线上(即main)就做了同步,之后就可以进行代码的测试流程了。
在本地仓库中提交测试时,首选需要切换至test(该test即是重置测试环境后建立的test),拉取main中最新的代码,再将开发分支merge(合并)至test。命令如下:
git checkout test
git pull main test
git merge sunlf_user--no-commit--squash
需要指出的是,开发分支merge至test时,合并完不要执行commit操作,先确定merge的文件是否做了修改,防止merge出现错误,另外merge过程中可能会出现冲突,在这一步需要解决冲突。待确认完成并解决冲突后,通过--squash将开发分支上的所有变更记录合并成一个commit,以便于开发人员确定test上的功能变化。merge之后,做一次commit提交,可以注明此次提交的开发任务,加上需求功能等信息,提交至私有仓库中(这里可以直接执行git push)。
在完成测试后,开发人员登陆至自己的私有仓库中发送一个merge request(合并请求),提交完merge request以后,通知有管理权限的人做merge request的合并操作。接下来,管理员登陆至主仓库中,查看merge request,并进入merge request操作界面,可以点击Open in Web IDE对合并的代码检查(review),如果review过程中没有发现问题,可以点击merge执行最终的合并操作,即将merge request中合并的代码合并至主分支中,如果review过程中发现问题,则点击close merge request把此次合并请求退回,通知开发人员修改。在执行最后的合并操作之后,管理员就可以执行部署,将相应分支的代码部署至相应环境。
一种可选的实施方式中,所述方法还包括:重置预上线环境,包括:
依次删除所述主仓库、所述私有仓库和所述本地仓库中已有的预上线分支;
在所述本地仓库中切换至所述主分支,所述本地仓库从所述主仓库中拉取所述主分支的代码,并基于所述主分支创建预上线分支;
依次在所述主仓库和所述私有仓库中创建预上线分支。
在测试阶段完成后,进行预上线阶段,在预上线阶段重置预上线环境也是一个非常重要的过程,为预上线测试提供相对干净的环境,避免由于环境的不同,造成测试过程中产生很多bug。重置预上线环境的操作最好是由管理员进行操作。
首先可以通过gitlab仓库删除main中的pre(测试分支),也可以通过命令删除,再删除私有仓库中的pre,最后删除本地仓库中的pre,删除过程同删除main仓库中的pre。其次在本地仓库中切换至master,拉取最新的main master的代码,基于master创建pre。最后是创建main和origin的pre。基于上述流程,预上线环境就重置完成了,此时本地仓库中的预上线环境与线上(即main)就做了同步,之后就可以进行代码的测试流程了。在本地仓库中提交测试时,首选需要切换至pre(该pre即是重置测试环境后建立的pre),拉取main中最新的代码,再将开发分支merge(合并)至pre。
在开发过程中,开发人员会进行开发、测试、预上线和上线等操作,测试就是把开发分支(例如sun_user)合并至测试分支(test),预上线就是把开发分支(sun_user)合并至预上线分支(pre),上线就是把开发分支(sun_user)合并至主分支(master)上。其中,测试和预上线是一个不断迭代的过程,因此S5和S6会执行多次。需要指出的是,在一个开发项目中会有多个开发人员对代码进行修改,因此,每次测试、预上线和上线操作,将开发分支合并至相应的test、pre和master之前,都需要从主仓库中拉取最新的代码,以防止在发送merge request之后,管理员因为冲突而无法执行最终的合并操作。需要注意的是,在私有仓库中发送merge request请求时,源分支(Source branch)必须和目标分支(Targetbranch)一样,即私有仓库中是主分支,主仓库中也是主分支。
在经过不断的迭代之后,代码最终上线,开发人员需要对本地仓库和私有仓库做清理,删除已经上线的开发分支,防止在开发任务较多的情况下无法确定哪个开发分支属于哪个功能,哪个开发是否已经上线。
本发明实施例所述的一种软件开发系统,所述系统包括:
复刻模块,用于从主仓库中复刻开发项目至私有仓库;
克隆模块,用于从所述私有仓库中克隆所述开发项目至本地仓库;
关联模块,用于增加所述本地仓库与所述主仓库的关联;
开发模块,用于在所述本地仓库中切换至主分支,从所述主仓库拉取所述主仓库的主分支的代码至所述本地仓库,并基于所述本地仓库的主分支创建开发分支,在所述开发分支上完成功能开发,并提交变更记录至所述本地仓库或所述私有仓库;
测试模块,用于在所述本地仓库中切换至测试分支,将所述开发分支的代码合并至所述本地仓库的测试分支中,提交所述本地仓库的测试分支的修改记录到所述私有仓库的测试分支中,发送所述私有仓库的测试分支合并至所述主仓库的所述测试分支的合并请求,管理员审核确认合并请求中的代码无误后,执行合并操作并将所述主仓库中的测试分支的代码部署至测试环境中进行测试;
预上线模块,用于在所述本地仓库中切换至预上线分支,将所述开发分支的代码合并至所述本地仓库的预上线分支中,提交所述本地仓库的预上线分支的修改记录到所述私有仓库的预上线分支中,发送所述私有仓库的预上线分支合并至所述主仓库的预上线分支的合并请求,管理员审核确认代码无误后,执行合并操作并将所述主仓库的预上线分支的代码部署至预上线环境中进行测试;
上线模块,用于在所述本地仓库中切换至主分支,将所述开发分支的代码合并至所述本地仓库的主分支中,提交所述本地仓库的主分支的修改记录到所述私有仓库的主分支中,发送所述私有仓库的主分支合并至所述主仓库的主分支的合并请求,管理员审核确认代码无误后,执行合并操作并将所述主仓库的主分支的代码部署至线上环境中进行上线;
清理模块,用于删除所述本地仓库和所述私有仓库中已经上线的开发分支。
一种可选的实施方式中,所述主仓库中设主分支、测试分支和预上线分支,
所述私有仓库中设主分支、测试分支、预上线分支和多个开发分支,
所述本地仓库中设主分支、测试分支、预上线分支和多个开发分支。
一种可选的实施方式中,所述修改模块,包括:
在所述本地仓库中修改已经关联的开发项目中的.git/config配置文件,增加所述主仓库的地址,并保存配置文件。
一种可选的实施方式中,所述开发分支采用自定义前缀_任务功能名称进行命名。
一种可选的实施方式中,所述开发模块,包括:
在所述本地仓库中切换至主分支,从所述主仓库中拉取所述主分支的代码,并将拉取的代码同步至所述私有仓库中;
在所述本地仓库中切换至所述开发分支,将拉取的所述主分支的代码合并至所述开发分支,在所述开发分支上完成功能开发。
一种可选的实施方式中,所述系统还包括测试环境重置模块,包括:
依次删除所述主仓库、所述私有仓库和所述本地仓库中已有的测试分支;
在所述本地仓库中,切换至所述主分支,所述本地仓库从所述主仓库中拉取所述主分支的代码,并基于所述主分支创建测试分支;
依次在所述主仓库和所述私有仓库中创建测试分支;
所述系统还包括重置预上线环境模块,包括:
依次删除所述主仓库、所述私有仓库和所述本地仓库中已有的预上线分支;
在所述本地仓库中切换至所述主分支,所述本地仓库从所述主仓库中拉取所述主分支的代码,并基于所述主分支创建预上线分支;
依次在所述主仓库和所述私有仓库中创建预上线分支。
一种可选的实施方式中,所述开发模块,还包括:
在所述本地仓库中切换各个分支,且不需要提交变更记录至所述本地仓库或所述私有仓库时,使用git stash命令完成临时存储。
本公开还涉及一种电子设备,包括服务器、终端等。该电子设备包括:至少一个处理器;与至少一个处理器通信连接的存储器;以及与存储介质通信连接的通信组件,所述通信组件在处理器的控制下接收和发送数据;其中,存储器存储有可被至少一个处理器执行的指令,指令被至少一个处理器执行以实现上述实施例中的方法。
在一种可选的实施方式中,存储器作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块。处理器通过运行存储在存储器中的非易失性软件程序、指令以及模块,从而执行设备的各种功能应用以及数据处理,即实现方法。
存储器可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储选项列表等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器可选包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至外接设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
一个或者多个模块存储在存储器中,当被一个或者多个处理器执行时,执行上述任意方法实施例中的方法。
上述产品可执行本申请实施例所提供的方法,具备执行方法相应的功能模块和有益效果,未在本实施例中详尽描述的技术细节,可参见本申请实施例所提供的方法。
本公开还涉及一种计算机可读存储介质,用于存储计算机可读程序,所述计算机可读程序用于供计算机执行上述部分或全部的方法实施例。
即,本领域技术人员可以理解,实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本申请各实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
此外,本领域普通技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本领域技术人员应理解,尽管已经参考示例性实施例描述了本发明,但是在不脱离本发明的范围的情况下,可进行各种改变并可用等同物替换其元件。另外,在不脱离本发明的实质范围的情况下,可进行许多修改以使特定情况或材料适应本发明的教导。因此,本发明不限于所公开的特定实施例,而是本发明将包括落入所附权利要求范围内的所有实施例。
Claims (10)
1.一种软件开发方法,其特征在于,所述方法包括:
从主仓库中复刻开发项目至私有仓库;
从所述私有仓库中克隆所述开发项目至本地仓库;
增加所述本地仓库与所述主仓库的关联;
在所述本地仓库中切换至主分支,从所述主仓库拉取所述主仓库的主分支的代码至所述本地仓库,并基于所述本地仓库的主分支创建开发分支,在所述开发分支上完成功能开发,并提交变更记录至所述本地仓库或所述私有仓库;
在所述本地仓库中切换至测试分支,将所述开发分支的代码合并至所述本地仓库的测试分支中,提交所述本地仓库的测试分支的修改记录到所述私有仓库的测试分支中,发送所述私有仓库的测试分支合并至所述主仓库的测试分支的合并请求,管理员审核确认合并请求中的代码无误后,执行合并操作并将所述主仓库中的测试分支的代码部署至测试环境中进行测试;
在所述本地仓库中切换至预上线分支,将所述开发分支的代码合并至所述本地仓库的预上线分支中,提交所述本地仓库的预上线分支的修改记录到所述私有仓库的预上线分支中,发送所述私有仓库的预上线分支合并至所述主仓库的预上线分支的合并请求,管理员审核确认代码无误后,执行合并操作并将所述主仓库的预上线分支的代码部署至预上线环境中进行测试;
在所述本地仓库中切换至主分支,将所述开发分支的代码合并至所述本地仓库的主分支中,提交所述本地仓库的主分支的修改记录到所述私有仓库的主分支中,发送所述私有仓库的主分支合并至所述主仓库的主分支的合并请求,管理员审核确认代码无误后,执行合并操作并将所述主仓库的主分支的代码部署至线上环境中进行上线;
删除所述本地仓库和所述私有仓库中已经上线的开发分支。
2.如权利要求1所述的方法,其中,所述主仓库中设主分支、测试分支和预上线分支,
所述私有仓库中设主分支、测试分支、预上线分支和多个开发分支,
所述本地仓库中设主分支、测试分支、预上线分支和多个开发分支。
3.如权利要求1所述的方法,其中,所述增加所述本地仓库与所述主仓库的关联,包括:
在所述本地仓库中修改已经关联的开发项目中的.git/config配置文件,增加所述主仓库的地址,并保存配置文件。
4.如权利要求1所述的方法,其中,所述开发分支采用自定义前缀_任务功能名称进行命名。
5.如权利要求1所述的方法,其中,所述在所述开发分支上完成功能开发,包括:
从所述主仓库中拉取所述主分支的代码,并将拉取的代码同步至所述私有仓库中;
在所述本地仓库中切换至所述开发分支,将拉取的所述主分支的代码合并至所述开发分支,在所述开发分支上完成功能开发。
6.如权利要求1所述的方法,其中,所述方法还包括:重置测试环境,包括:
依次删除所述主仓库、所述私有仓库和所述本地仓库中已有的测试分支;
在所述本地仓库中切换至所述主分支,所述本地仓库从所述主仓库中拉取所述主分支的代码,并基于所述主分支创建测试分支;
依次在所述主仓库和所述私有仓库中创建测试分支;
所述方法还包括:重置预上线环境,包括:
依次删除所述主仓库、所述私有仓库和所述本地仓库中已有的预上线分支;
在所述本地仓库中切换至所述主分支,所述本地仓库从所述主仓库中拉取所述主分支的代码,并基于所述主分支创建预上线分支;
依次在所述主仓库和所述私有仓库中创建预上线分支。
7.如权利要求1所述的方法,其中,所述在所述开发分支上完成功能开发,还包括:
在所述本地仓库中切换各个分支,且不需要提交变更记录至所述本地仓库或所述私有仓库时,使用git stash命令完成临时存储。
8.一种软件开发系统,其特征在于,所述系统包括:
复刻模块,用于从主仓库中复刻开发项目至私有仓库;
克隆模块,用于从所述私有仓库中克隆所述开发项目至本地仓库;
关联模块,用于增加所述本地仓库与所述主仓库的关联;
开发模块,用于在所述本地仓库中切换至主分支,从所述主仓库拉取所述主仓库的主分支的代码至所述本地仓库,并基于所述本地仓库的主分支创建开发分支,在所述开发分支上完成功能开发,并提交变更记录至所述本地仓库或所述私有仓库;
测试模块,用于在所述本地仓库中切换至测试分支,将所述开发分支的代码合并至所述本地仓库的测试分支中,提交所述本地仓库的测试分支的修改记录到所述私有仓库的测试分支中,发送所述私有仓库的测试分支合并至所述主仓库的所述测试分支的合并请求,管理员审核确认合并请求中的代码无误后,执行合并操作并将所述主仓库中的测试分支的代码部署至测试环境中进行测试;
预上线模块,用于在所述本地仓库中切换至预上线分支,将所述开发分支的代码合并至所述本地仓库的预上线分支中,提交所述本地仓库的预上线分支的修改记录到所述私有仓库的预上线分支中,发送所述私有仓库的预上线分支合并至所述主仓库的预上线分支的合并请求,管理员审核确认代码无误后,执行合并操作并将所述主仓库的预上线分支的代码部署至预上线环境中进行测试;
上线模块,用于在所述本地仓库中切换至主分支,将所述开发分支的代码合并至所述本地仓库的主分支中,提交所述本地仓库的主分支的修改记录到所述私有仓库的主分支中,发送所述私有仓库的主分支合并至所述主仓库的主分支的合并请求,管理员审核确认代码无误后,执行合并操作并将所述主仓库的主分支的代码部署至线上环境中进行上线;
清理模块,用于删除所述本地仓库和所述私有仓库中已经上线的开发分支。
9.一种电子设备,包括存储器和处理器,其特征在于,所述存储器用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被处理器执行以实现如权利要求1-7中任一项所述的方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行以实现如权利要求1-7中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111040287.7A CN113760234B (zh) | 2021-09-06 | 2021-09-06 | 一种软件开发方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111040287.7A CN113760234B (zh) | 2021-09-06 | 2021-09-06 | 一种软件开发方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113760234A true CN113760234A (zh) | 2021-12-07 |
CN113760234B CN113760234B (zh) | 2023-06-27 |
Family
ID=78793227
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111040287.7A Active CN113760234B (zh) | 2021-09-06 | 2021-09-06 | 一种软件开发方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113760234B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115586919A (zh) * | 2022-10-13 | 2023-01-10 | 上海雷昶科技有限公司 | 一种基于git的代码管理方法及其管理装置 |
CN116303106A (zh) * | 2023-05-26 | 2023-06-23 | 江苏博云科技股份有限公司 | 一种适用金融行业的基于GitFlow软件版本快速回滚方法及系统 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5712989A (en) * | 1993-04-02 | 1998-01-27 | Fisher Scientific Company | Just-in-time requisition and inventory management system |
CN107391968A (zh) * | 2017-08-18 | 2017-11-24 | 武汉斗鱼网络科技有限公司 | 一种实现私有pod发布权限控制的方法及装置 |
CN111352651A (zh) * | 2020-03-31 | 2020-06-30 | 中国建设银行股份有限公司 | 代码分支管理方法及装置 |
US20200226054A1 (en) * | 2019-01-15 | 2020-07-16 | International Business Machines Corporation | Determining Reviewers for Software Inspection |
CN112214206A (zh) * | 2020-10-17 | 2021-01-12 | 天翼电子商务有限公司 | 基于私有软件仓库的安卓cc++三方库管理 |
CN113190447A (zh) * | 2021-04-30 | 2021-07-30 | 成都新潮传媒集团有限公司 | 一种代码自动合并的方法、装置、设备及存储介质 |
-
2021
- 2021-09-06 CN CN202111040287.7A patent/CN113760234B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5712989A (en) * | 1993-04-02 | 1998-01-27 | Fisher Scientific Company | Just-in-time requisition and inventory management system |
CN107391968A (zh) * | 2017-08-18 | 2017-11-24 | 武汉斗鱼网络科技有限公司 | 一种实现私有pod发布权限控制的方法及装置 |
US20200226054A1 (en) * | 2019-01-15 | 2020-07-16 | International Business Machines Corporation | Determining Reviewers for Software Inspection |
CN111352651A (zh) * | 2020-03-31 | 2020-06-30 | 中国建设银行股份有限公司 | 代码分支管理方法及装置 |
CN112214206A (zh) * | 2020-10-17 | 2021-01-12 | 天翼电子商务有限公司 | 基于私有软件仓库的安卓cc++三方库管理 |
CN113190447A (zh) * | 2021-04-30 | 2021-07-30 | 成都新潮传媒集团有限公司 | 一种代码自动合并的方法、装置、设备及存储介质 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115586919A (zh) * | 2022-10-13 | 2023-01-10 | 上海雷昶科技有限公司 | 一种基于git的代码管理方法及其管理装置 |
CN116303106A (zh) * | 2023-05-26 | 2023-06-23 | 江苏博云科技股份有限公司 | 一种适用金融行业的基于GitFlow软件版本快速回滚方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN113760234B (zh) | 2023-06-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110768833B (zh) | 基于kubernetes的应用编排部署方法及装置 | |
CN110019215B (zh) | 多重租赁数据库系统中的键模式管理 | |
CN110147369B (zh) | 多重租赁数据库系统中的数据分离和写入重新定向 | |
KR101802920B1 (ko) | 가상 머신 시스템 디스크 스냅 샷의 생성 방법 및 장치 | |
US8495609B2 (en) | Methods, systems, and computer program products for taking a snapshot of installed software on a data processing system as part of a software update process | |
KR102047216B1 (ko) | 서비스의 2차 위치에서의 작업의 재생 기법 | |
CN110088733A (zh) | 虚拟机迁移的基于存储层的编排 | |
CN109947767A (zh) | 多重租赁数据库系统中的系统共享类型 | |
EP3166031B1 (en) | Bi-directional synchronization of data between a product lifecycle management (plm) system and a source code management (scm) system | |
CN113760234A (zh) | 一种软件开发方法和系统 | |
CN107885551A (zh) | 一种服务部署方法、装置、可读介质及存储控制器 | |
US9542159B1 (en) | Integration of revision control systems and process tools | |
EP3166029B1 (en) | Exporting hierarchical data from a source code management (scm) system to a product lifecycle management (plm) system | |
JP2011060035A (ja) | アプリケーションデプロイシステム、アプリケーションデプロイ方法及びプログラム | |
JP5665889B2 (ja) | サブバージョンリポジトリをバックアップする方法及び装置 | |
US20210111962A1 (en) | Topographical search | |
CN112379934B (zh) | 一种云计算平台的部署方法及装置、存储介质 | |
CN107783826B (zh) | 一种虚拟机迁移方法、装置及系统 | |
EP3166030B1 (en) | Exporting hierarchical data from a product lifecycle management (plm) system to a source code management (scm) system | |
CN108205462A (zh) | 用于内容-应用分离的系统和方法 | |
CN112473145A (zh) | 一种基于游戏引擎的数据处理方法和装置 | |
JP2014203234A (ja) | 仮想マシン管理方法及び装置 | |
JP7189251B2 (ja) | 工事実行管理装置、工事実行管理方法、及びプログラム | |
Goldfedder et al. | Platform Automation | |
JP5574274B2 (ja) | データ処理装置、データ処理方法、及びプログラム |
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 |