APP下载

软件配置管理中版本控制的研究

2019-10-08秦佳

软件 2019年3期

秦佳

摘  要: 介绍了软件配置管理及版本控制的基本概念,解释了版本控制在软件开发过程中的重要性。分析了两种不同的版本控制方式,引出目前最热门且最具潜力的Git版本控制系统。简要介绍了Git,并详细讲解了Git的工作区域、文件状态、分支和融合。

关键词: 版本控制;Git;版本控制系统;软件配置管理

【Abstract】: The basic concepts of software configuration management and version control are introduced, and the importance of version control in the software development process is explained. Two different version control methods were analyzed to bring out the most popular and promising Git version control system. A brief introduction to Git and a detailed explanation of Git's workspace, file status, branching, and merging.

【Key words】: Version control; Git; Version control system; Software configuration management

0  引言

经历了软件危机之后,软件开发人员越发的重视起软件工程的重要性,并把它当做一门专门的学科进行研究,提出了许多工程化的概念。在软件开发过程中经常会产生大量的文档与代码,且需求的不确定性决定了开发人员需要经常性的迭代与修改项目文件,这产生了许多冗余的文档管理工作。

本文就软件配置管理进行探讨,给开发人员介绍了一种简便、高效的版本控制系统,使开发人员能够付出最小的代价,对开发过程中的变更进行合理记录与控制。

1  版本控制

1.1  基本概念

在软件工程领域中,软件配置管理(Software configuration management)用来跟踪和控制软件中的变更,它属于更大的跨学科概念:配置管理(Configuration management)。

版本控制(Version Control),又有别名为Revi sion Control或Source Control,它属于软件配置管理(Software configuration management)的一部分,是对文档、程序、大型网站或其他信息集合变化的一种管理。在软件工程领域中,版本控制可以是任何与跟踪历史与控制源代码变化有关的实现。开发人员不光会用版本控制软件维护源代码,还会用它来维护项目相关文档和配置文件,实际上你可以对任何类型的文件进行版本控制。

1.2  版本控制的重要性

(1)如今,软件的开发几乎都是团队合作,在团队设计、开发和部署软件时,通常会将同一软件的不同的版本部署在不同的站点中并让软件开发人员同时进行更新处理。软件的漏洞通常出现在某些版本中,出于定位和修补漏洞的目的,能够检索和运行不同版本的软件来决定是哪个版本出了问题是很重要的。

(2)软件的开发很多都是迭代式的,也就有很多不同版本的程序副本。之前的做法是简单的把所有副本都存储起来,并为他们标上不同的版本号。虽然这种方法可行,但它也有着许多的缺点:第一,这种存储方式十分低效。它需要開发者十分小心的将每个版本都标清并存储,通常版本的迭代数会十分的庞大,随着时间推移,这会导致许多错误。第二,这种存储方式会增加开发人员的重复工作。因为代码库是相同的,它需要像开发人员授予读写权限,这无疑增加了管理权限人员的压力。因此,出于减少重复工作和错误的目的,需要一种能自动化进行版本控制的系统。

(3)软件的开发更多的需要团队成员之间的合作,不同的团队成员编辑同一个文档或者代码变得越来越普遍,团队成员在空间上可能分散,在时间上也可能不同,且有着不同甚至相反的兴趣和擅长的工作。因此,能够给这些完全不同的团队成员提供一个可以跟踪和记录文档与代码更改的系统是十分有用且必不可少的。

1.3  集中式版本控制

集中式版本控制(Centralized version control),为不同系统的开发者提供了协同工作的可能。它的特点是拥有一个单一集中的服务器,保存了所有项目文件的修订版本,不同系统的开发者通过“check out”取出最新的文件,可以对它进行修改之后把更新提交到服务器。大多数版本控制允许多个开发者同时修改同一个文件,许多版本控制系统提供自动便捷的“merge”功能融合无冲突的更新。

但集中式版本控制最大的缺点就在于它对服务器的依赖性。如果服务器故障,当机半天,那么在这半天内,无论哪个客户端都无法提交更新。如果中心数据库出现损坏,而没有做好备份准备,那么就会丢失所有的数据,只剩下各个客户端的不同版本,十分不利于软件项目的开发。

1.4  分布式版本控制

分布式版本控制(Distributed Version Control),很好的解决了集中式版本控制对服务器的依赖带来的问题。这类版本控制的客户端不只提取最新版本的文件快照,而是把中央代码仓库(Repository)完整的镜像下来。这样每一个客户端都拥有完整的代码仓库备份,就算中央服务器宕机了,它的所有数据都可以几乎无损的从任意一个客户端中恢复。

2  版本控制系统

2.1  Git基本概念

Git是一种分布式版本控制系统,也就是说它拥有以上介绍的分布式版本控制的所有特点,它免费且开源,目前被广大开发者所使用且十分受欢迎。Git用于跟踪文件中的变更,它的设计目标包括:速度,简单设计,完全分布式,对非线性开发的支持,处理像Linux内核这样大型项目的能力。

2.2  Git的工作区域和文件状态

我们在使用Git时,主要打交道的有三个工作区域:Git仓库(Git directory或Repository),工作目录(Working directory)以及暂存区域(Staging area)。

(1)Git仓库是用来保存项目数据和数据库的地方,这是Git中最重要的部分。Git中有一个git clone命令,可以克隆其他计算机的仓库,这里拷贝的内容就是Git仓库中的数据。

(2)工作目录是对项目某个版本提取出来的内容,它是从Git仓库的压缩数据库中提取出的文件,放在本地磁盘供开发人员使用或修改,可以把它理解为你本次磁盘上的项目拷贝文件。

(3)暂存区域是一个文件,它保存的是下次将要提交的文件列表信息,一般在git directory中。

在Git中,工作目录中的每个文件都无外乎两种状态:跟踪的(tracked)或者未跟踪的(untracked)。跟踪的文件是git知道的并且“跟踪的”。跟踪的文件可能会处于未修改(unmodified)、修改(modified)或暂存(staged)状态。跟踪的文件也就纳入了版本控制的范畴,你在它上面所做的所有修改都会被Git记录,如果你修改了文件内容,它就会处于修改状态。这时如果你想记录这次更改,就可以使用git add命令将它加入到暂存区域,之后可以用git commit命令将这次更改操作提交到Git仓库,最后通过git push将这个commit记录到远程服务器上。

从以上操作也可以看出Git分布式版本控制系统的优点:它大部分操作都在本地,只需要在有机会联网时将之前所暂存的commit从Git仓库中发布到远端服务器就可以完成工作,十分高效且不依赖网络。

2.3  Git分支与融合

Git的分支(Branching)是它最杰出的功能,开发者可以利用分支功能实现多版本同时开发且随时可切换当前工作的不同版本,并在适当的时候把新增的分支特性融合(Merging)到主分支(通常为稳定代码)中,这样就可以实现不改变当前稳定版本而增加特性分支实践新特性的功能,这对大型复杂项目十分有帮助。

实际上,Git的分支是一个指向提交对象的可变指针。它的默认名字是master。每当你提交(commit)了一个对象时,它就会自动向前移动,指向最后一个提交对象。

创建分支十分简单,只需要使用git branch命令再加上分支名就可以在当前所在的提交对象上创建一个新分支。Git中还有一个叫HEAD的特殊指针,它指向当前所在的本地分支,通过git checkout命令就可以随时切换当前所工作的分支(也就是改变HEAD指针的指向分支)。通过Git的分支特性,你可以将稳定的版本放在master主分支上,如果开发过程中出现漏洞需要修复或有不确定的新功能需要测试,都可以在当前的版本基础上新建一个分支,它的本质是一个指针,就会指向之前的提交对象,也就拥有稳定版本的全部提交历史,在此基础上,就可以在不破坏主分支的前提下安全的测试新功能或修复漏洞。

3  结语

利用版本控制,极大减少了软件项目开发者冗余工作,且跟踪版本历史记录有利于软件项目的迭代与发展,在軟件工程中起着举足轻重的作用。学会使用一种版本控制系统,会加快软件项目的开发进度,并降低系统漏洞的风险。Git的免费与开源正逐步的吸引着世界各地的优秀软件人才,Github就是一个很好的开源平台。学会使用正确的工具,也会最大限度的发挥人在项目管理中的作用,Git版本控制系统具有的潜力不可小觑。

参考文献

[1]Scott Chacon. Pro Git[M]. Apress: 2009-09-30.

[2]陈申平. 敏捷软件开发中的配置管理探讨[J]. 软件, 2018, 39(05): 134-138.

[3]攸阳, 杨素梅. 软件配置管理在军用软件中的应用[J]. 软件, 2018, 39(06): 85-88.

[4]杨瑞虹, 刘旺开, 霍振宇. 软件配置管理中的版本控制工具[J]. 计算机时代, 2005(02): 8-9.

[5]王海丰, 李金霞, 张鲲. 基于SVN版本控制的程序设计类课程教学研究[J]. 软件, 2018, 39(04): 218-221.

[6]路志, 戴志涛. 版本控制系统在嵌入式系统实验中的应用[J]. 软件, 2014, 35(11): 86-90.

[7]谭政. 一种协同编辑中版本控制与管理解决方案[J]. 软件, 2014, 35(11): 118-123.

[8]字凤芹. 基于Git的协作小组学习资源库的建设与研究[D]. 云南大学, 2016.

[9]刘悦之. 基于Git的分布式版本控制系统的设计与实现[J]. 科技传播, 2012, 4(22): 197-198.

[10]GitHub与社会化编程[J]. 硅谷, 2012(06): 51.

[11]张智, 郑卉, 蒋依伶, 袁欢欢, 郑明清. 使用Github实现高效的团队协作开发[J]. 电脑知识与技术, 2015, 11(07): 206-208.