基于Git的软件项目管理配置方法及应用实践论文

2023-09-20 17:02:34 来源: 作者:yeyuankang
摘要:
摘要:Git分布式特性和分支管理能力适用于大型软件项目,每个分支彼此独立,互不影响。为提高碳化硅外延设备控制系统的精度、实时性、稳定性,提出一种基于Git进行配置管理的方法。介绍Git的特点、环境配置和常用操作;简单说明配置管理的概念并建立配置管理环境;介绍基于Git进行配置管理的具体实践,包括分支管理和版本管理。使用Git进行配置管理,可有效解决代码冲突、事务并发、文档冗余等问题,实现对项目的高效管理,也可保证版本的可溯性,有针对性地解决源代码混乱的问题。结果表明:应用Git的配置管理方法充分利用了Git的优点,大大提高了碳化硅外延设备控制软件开发的效率和质量,为项目的成功提供了坚实的保障。
关键词:Git;配置管理;软件工程
Abstract:Git's distributed characteristics and branch management capabilities are suitable for large software projects,and each branch is independent of each other and does not affect each other.In order to improve the precision,real-time and stability of the silicon carbide epitaxial equipment control system,a method of configuration management based on Git was proposed.The characteristics,environment configuration and common operation of Git were introduced;the concept of configuration management was briefly explained and the configuration management environment was set up;the specific practice of Git configuration management was introduced,such as branch management and version management.By using Git for configuration management,code conflicts,transaction concurrency,document redundancy and other problems can be effectively solved,projects can be efficiently managed,version-traceability can be ensured and the problem of source code clutter can be targeted solved.The results show that the configuration management method based on Git makes full use of the advantages of Git,the efficiency and quality of the control software development of silicon carbide epitaxial equipment is greatly improved to provide a solid guarantee for the success of the project.
Key words:Git;configuration management;software engineering
0引言
自动化碳化硅外延设备控制技术是碳化硅外延装备的关键技术之一。快速、高效地设计出一套满足性能要求、面向用户需求的自主研发的控制系统以提高产品质量及用户满意度,成为亟待解决的关键问题[1-2]。
由于外延工艺条件复杂,外延控制程序涉及的参数众多,各个参数之间高度耦合,互相影响,对控制系统的精度、实时性、稳定性要求极高。碳化硅外延控制程序属于复杂的大型软件开发,需要对软件需求、项目成本、项目进度、项目风险、配置、资源和软件开发质量进行全面管理。同时,还涉及不同角色、多人协作,会出现代码冲突、在代码整合期间引发Bug、权限控制、项目版本发布等问题。针对以上问题,本文应用Git进行软件项目管理,从根本上改善软件开发和项目管理现状,提高开发效率和发布软件的质量[3-4]。
1 Git的介绍
Git是一个开源的分布式版本控制系统,是目前世界上最先进、最流行的版本控制系统,可以快速高效地处理从很小到非常大的项目版本管理。其特点为:项目越大越复杂,协同开发者越多,越能体现出Git的高性能和高可用性。
1.1 Git的特点
(1)记录快照
快照(Snapshot)指的是某一时刻数据的状态描述。每次提交更新时,Git会对全部文件创建一个快照并保存这个快照的索引。为提高效率,若文件没有变化,Git只保留一个指向之前存储的文件链接[5]。记录快照的优点是版本切换时非常快,根据目标版本的快照恢复即可。
(2)本地执行
由于Git是分布式的版本控制系统,每一个客户端都可以拥有完整的仓库(包括所有的历史版本信息、分支、标签等),因此Git的绝大多数操作只需访问本地仓库即可。远程仓库(如Github、CODING等)则更像是集中式版本控制系统的中央服务器的沿袭。
(3)数据完整性
Git通过计算文件内容或者目录内容的校验和(SHA-1散列)来确保数据完整性,通过校验和来引用数据,这意味着除非进行特殊配置,否则只要将文件纳入Git的管理,文件的任何更改都能被Git发现。
1.2 Git的常用操作
1.2.1代码提交和代码同步
第1步,同步远程仓库代码:git pull。使用git add/git commit代码之前首先需要使用git pull,先从远程库拉取代码,以防覆盖别人代码。命令git pull执行后,出现Already up-to-date提示字符串,代表本地代码已经更新到和远程仓库一致。
第2步,查看当前状态:git status。使用git status查看当前代码修改状态,红色字体显示的就是有修改的文件。
第3步,提交代码到本地git缓存区:git add.或者git add xxx。输入“git add.”或者“git add xxx”,git add直接把修改的内容全部添加到本地git缓存区中,而git add xxx可以通过xxx参数指定提交某些文件。
第4步,推送代码到本地git库:git commit-m"提交代码备注"。git commit-m“提交代码备注”推送修改到本地git库中。
命令:git commit文件名-m“提交代码备注”。
第5步,提交本地代码到远程仓库:git push。git push<远程主机名><远程分支名>把当前提交到git本地仓库的代码推送到远程主机的某个远程分支上。命令:git push,代码提交合并成功。
1.2.2代码撤销和撤销同步
(1)git checkout
git checkout命令可找回本次修改之前的文件。先找暂存区,如果该文件有暂存的版本,则恢复该版本,否则恢复上一次提交的版本。
(2)git reset
git reset[last good SHA]让最新提交的指针回到以前某个时点,该时点之后的提交都从历史中消失。默认情况下,git reset不改变工作区的文件(但会改变暂存区),--hard参数可以让工作区里面的文件也回到以前的状态。
(3)git clean
git clean命令用来从工作目录中删除所有没有被Git跟踪过的文件。git clean经常和git reset--hard一起结合使用。reset只影响被Git跟踪的文件,所以需要clean来删除没有跟踪过的文件。结合使用这两个命令能让工作目录完全回到一个指定的<commit>的状态。
2建立软件配置管理方案
2.1配置管理环境
2.1.1企业级配置管理环境
(1)建立工具集
一个企业或者团队的配置管理工具应尽量统一采购、使用和维护,以达到节约资源和提高工作效率的目的。除非项目之间差别很大,否则应尽可能地减少工具的种类。国内常见的配置管理工具包括GitHub、CODING等,这些配置管理工具基本都已实现对Git的支持。
(2)建立软件配置管理规范
一个企业或者团队应建立基本统一的配置管理规范,包括但不限于变更控制流程、版本控制流程、缺陷跟踪流程和分支策略等。根据不同项目的特殊需要,可对企业统一的配置管理规范进行剪裁或者重新制定。
2.1.2项目级配置管理环境
(1)识别和标志配置项
软件配置项指的是项目中需要进行控制的产品,它可以分为两类:基本配置项和集成配置项。基本配置项指的是在项目开发过程中所创建的基本工作单元,包括源代码、数据库设计、测试计划等。集成配置项指的是一个或多个基本配置项或集成配置项的集合,包括需求规格说明、设计规格说明、用户手册等。
(2)建立配置库
配置库是配置管理环境的核心,使用配置管理工具来建立,其功能主要是存储软件配置项、修改请求、变化记录等,并提供对配置库中所存储文件的版本控制。配置库还需要为不同的人员(开发人员、测试人员、配置管理员、项目经理等)分配不同的访问权限。通常配置库以增量的形式存储其中配置项的每一次变更(形成一个版本),以达到节省空间的目的。
2.2建立软件配置管理环境
(1)选择配置管理工具
目前市面上有数量众多的配置管理工具产品,COD⁃ING是其中之一。CODING除了提供基础的代码托管之外,还提供项目协同管理、持续集成/部署、代码质量检测、测试管理和文档管理等。CODING的代码托管支持包括Git在内的代码版本控制协议,而且CODING可以为项目团队成员分配不同的权限以使用不同的功能,因此能够方便项目团队实施项目配置管理。本文将以COD⁃ING为例进行说明。
(2)配置管理角色分配
表1所示为一种较为常见的配置管理团队组织形式[6]。
(3)识别配置项
配置项主要包括产品的组成部分,如需求规格文档、设计规格文档、源代码、测试计划、测试用例、用户手册等[7]。每个配置项的主要属性有名称、标识符、文件状态、版本、作者和日期等,配置项的状态一般有草稿、正式发布、正在修改,状态变迁必须按照变更控制流程,由项目经理通过后变更。
(4)变更管理流程
变更管理的过程如图3所示。首先,提出变更请求,变更请求中应给出变更的大致影响分析;然后,进行变更评估,需要对变更产生的影响作出全面的分析,包括变更的类型、技术影响、接口影响、项目进度影响和预算影响等[8];接着,进行变更审批,项目经理根据变更评估的结果对变更作出决策:直接实现变更、挂起或延迟实现变更、拒绝变更;若实现变更,配置管理员需要从配置库中检出,开发人员对配置项进行修改,集成人员和测试人员对修改进行详细的测试,通过后配置管理员将变更检入到配置库中。变更完成后,应当通知受影响的相关人员。
(5)持续集成和持续部署持续集成指的是以较短的周期(每天、每半天、每小时甚至更短)执行一遍集成,目的是为了尽可能快地发现和纠正配置库中源代码的问题,确保大部时间里配置库中的源代码是可行的,不会对开发人员检出分支进行开发产生负面影响。由于集成的频率很高,集成人员通常要使用自动化工具来辅助集成,将编译、链接、打包、测试的步骤用自动化工具连贯地执行下来,并自动产生问题报告。CODING具有自动化持续集成的功能,用户可以设置其以适当地周期来启动自动化集成。如图4所示,自动化工具定时监测配置库中是否有新的提交,若没有则循环等待,若有则拉取最新的配置项进行构建和粗略测试,通过后合并推送到配置库并形成新的基线。如果构建或者测试失败,则通知相关人员。
持续部署指的是当完成某一版本后,可将软件部署到生产环境中交给用户使用,这种部署往往是频繁多次的,目的是为了尽快发现和解决生产环境中出现的问题。
3基于Git的实践
3.1分支管理
3.1.1分支说明
表2所示为基于Git的分支说明。
3.1.2主要工作流程
如图5所示,项目启动时,首先从master分支拉取develop分支。根据新功能和新需求,各开发人员拉取多个feature分支同时进行并行开发,feature分支开发完成新功能新需求后合并到develop分支后删除当前feature分支。接着测试人员从develop分支拉取release分支进行测试,测试过程中发现的缺陷和问题直接在re⁃lease分支上进行修复,测试完成后release分支合并到develop和master分支后删除release分支,同时上线发布新版本。上线后若发现有Bug,从master分支中拉取hotfix分支进行修复,测试通过后合并hotfix到develop分支和master分支,删除hotfix分支[9]。
需要注意的是,开发人员在feature分支上进行开发时,若此时develop分支有变动,开发人员应从develop分支合并到当前的feature分支。测试人员在release分支进行测试时,若此时develop分支有变动,测试人员应从develop分支合并到当前的release分支,否则release分支合并到master分支发布后会丢失develop分支变动部分的代码。
3.2版本发布和管理
3.2.1配置库的检入检出机制
团队开发中有两个重要问题:一是确保只有具有权限的人员才能修改配置项(具有权限的人员需要保证其他人对配置项的修改是可行的);二是确保不同人员对统一配置项进行修改时不会互相覆盖[10]。
第一个问题,在CODING中设置分支保护,配置管理员对master分支、develop分支和release分支设置分支保护,这3个分支只能通过发起merge request的方式合并,开发人员不可以直接推送代码,并且merge request的时候需要经相关人员code review通过后才能合并。因此,如图6所示,开发人员在本地开发时的合并流程为:开发人员在本地完成feature分支,推送到远端的feature分支,然后在远端提交一个merge request请求合并到develop分支,进行code re⁃view后在远端合并到develop分支。
第二个问题,通常情况下开发人员会在推送feature分支前从图6 Git分支保护时开远端develop分支拉取最新的代码发人员的工作流到本地,然后在本地进行预合并以进行自测。预合并过程中可能会产生冲突,即本地feature分支修改的配置项在拉取的最新代码中也被修改了,此时冲突只限于该开发人员本地,不会影响到远端的配置库。开发人员应当告知相关人员,并沟通如何修改产生冲突的配置项,解决冲突以后该开发人员才能推送修改后feature分支到远端。
Git的机制确保了远端的develop分支和master分支的稳定,从而保证版本的稳定,不会被随意修改。对于开发人员来说,需要时常更新本地的工作空间,适时地从远端develop分支中拉取最新的代码,保证本地的工作能够跟上远端版本的步伐。
3.2.2版本记录和安装包保存
基于Git记录代码的整体版本,主要是在master分支上进行。release分支通过测试后合并到master分支上线,此时配置管理员应当在Git中对该新节点打上标签,该标签就是该版本的名称,版本名称应当根据团队配置管理计划制定的规范来命名。因此,master分支可以理解为一条版本历史链条,方便追溯和定位历史版本。
另外,通常在发布新版本时需要编译、链接、打包生成安装包,这个过程也会产生缺陷和问题。因此,安装包也需要进行版本管理,方便追溯和定位不同版本安装包。由于不同的开发人员在各自本地进行开发时可能会对局部或整体的集成构建安装包进行自测,生成的内容在不同的本地是不同的,因此不宜将安装包这类由源代码生成的内容直接纳入Git管理的配置库中。开发人员也应当在本地将这些内容加入到ignore文件中以忽略对他们的管理。安装包的版本管理可以由集成人员进行,在配置库中开辟新空间来管理源代码生成的安装包,该空间内分支的操作仅对集成人员开放权限。
3.2.3项目外资源的版本控制
通常在软件开发中会使用到很多外部的插件、文档、数据、软件包等,这些资源也应当纳入到项目的版本控制中,但不一定需要加入配置库。由于一些项目外的资源是二进制形式的,不适合用Git纳入配置库进行管理,这些资源可以保存在CODING的共享目录中,添加适当的描述和存取权限。
应纳入配置库的应当是以文本或表格的形式记录的本项目使用的项目外资源及其版本。
3.3应用结果展示
如图7所示,选择CODING作为团队软件项目配置管理的平台,同时CODING中的代码仓库可作为Git管理的远程仓库。在CODING的代码仓库中建立master分支、develop分支和release分支,并将它们设置成保护分支,以应用第3.1.2节的工作流程。CODING平台提供了持续集成、持续部署和文档管理的功能,亦可满足团队软件项目配置管理中对持续集成、持续部署和项目外资源版本控制记录的需求。
4结束语
在软件开发项目管理中,使用Git进行配置管理,大量减少了开发人员不必要的工作,可以有效解决代码冲突、事务并发、文档冗余等问题,实现对项目进行高效的管理。Git分布式特性和分支管理能力对大型软件项目尤为适合,每个分支彼此独立,互不影响。Git保证了版本的可溯性,并且可以在某个版本的测试和使用的过程中出现问题时尽早定位问题发生的时间节点、原因和负责人。使用Git进行版本控制可以有针对性地解决源代码混乱的问题。本文应用Git的配置管理实践,充分利用了Git的优点,大大提高了碳化硅外延设备控制软件开发的效率和质量,为项目的成功提供了坚实的保障。
参考文献:
[1]吴玲,赵璐冰.第三代半导体产业发展与趋势展望[J].科技导报,2021,39(14):20-29.
[2]戴科峰,仇礼钦,盛飞龙,等.碳化硅外延设备控制系统的设计与实现[J].机电工程技术,2022,51(9):132-136.
[3]王真.版本控制工具在软件开发项目管理中的应用——以GIT为例[J].项目管理技术,2020,18(6):131-134.
[4]刘爱群,于健,王瑞,等.基于Git技术的机车车载应用软件集中控制系统研究[J].铁道运输与经济,2022,44(2):52-58.
[5]庞双玉.Git分布式版本控制实现机制探讨[J].信息系统工程,2018(10):53-54.
[6]崔方园.支持分布式协同开发的软件配置管理系统研究[D].大连:大连海事大学,2009.
[7]姜平利,傅育熙.软件配置管理及其实现[J].计算机工程,2004(S1):148-150.
[8]王梦,王飞飞,刘钰.软件配置管理的运用及优化[J].汽车电器,2022(1):74-75.
[9]田江涛.基于git工具的多分支并行开发上线流程[J].电子技术与软件工程,2019(5):33.
[10]秦佳.软件配置管理中版本控制的研究[J].软件,2019,40(3):137-139.
