文档库 最新最全的文档下载
当前位置:文档库 › 项目版本控制与风险规避

项目版本控制与风险规避

2008年6月

June 2008

—283—

计 算 机 工 程Computer Engineering 第34 第12期

Vol 卷.34 No.12

·开发研究与设计技术·文章编号:1000—3428(2008)12—0283—03

文献标识码:A

中图分类号:N945

通用版本控制系统的研究和设计

阳万安,李 彦

(宜宾学院计算机科学与技术系,宜宾 644000)

摘 要:针对软件配置管理和大规模数据处理领域对历史记录回放的要求,设计一种通用版本控制系统模型,实现目录和元数据的版本化及抽象的网络层。使用拷贝-修改-合并模型解决文件共享冲突,采用版本树存储版本库,根据工作拷贝区管理区域的关键信息追踪版本库,实现了对任何类型文件集的有效管理。

关键词:软件配置管理;版本控制;版本库;工作区

Research and Design of General Version Control System

YANG Wan-an, LI Yan

(Dept. of Computer Sciences and Technology, Yibin College, Yibin 644000)

【Abstract 】Aiming at the request of rebuilding data in the fields of Software Configuration Management(SCM) and data processing cosmically, this paper presents a model of general version control system. It implements version of directory and metadata as well as abstract network layer, shares files by copy-modify-merge model, stores version repository by tree, and tracks version repository according to key information of management precinct of working area. As a result, all kinds of files can be managed effectively.

【Key words 】Software Configuration Management(SCM); version control; version repository; working area

1 概述

随着软件规模的增长和开发人员的流动,软件维护变得越来越困难。在数据处理企业中,为了保证数据不丢失,每个员工每天都在海量存储阵列上建立多份目录的完全拷贝,磁盘空间最终将被冗余数据塞满。因此,需要一种高效的版本控制系统来辅助解决该问题。版本控制系统可以帮助开发活动的多数参与者做好开发过程中的记录工作,通过保存文件在不同时期的版本,交付工程师和代码复审员可以方便地缩小搜索问题代码的范围。程序员可以通过此系统更好地并行协作。版本控制系统通常需要实现以下基本功能[1]:

(1)保存任意一个文件的不同版本。 (2)记录修改者和修改原因。

(3)当2个用户同时修改一个文件时,尽可能自动合并修改;若无法合并,则给出提示。

(4)比较不同版本之间或版本与本地副本之间的差异。 (5)获取最新版本的全部源代码供测试,并允许回退到所保存源代码的任意版本。

(6)创建代码分支,便于软件发布和后期维护;新的代码可以合并到这些分支中。

(7)对不同的源代码给出标记,方便日后审查。 (8)访问控制,阻止未经授权的修改和查阅。 1.1 软件配置管理的定义

软件配置管理(Software Configuration Management, SCM),是软件过程的关键要素,是控制软件系统演化的规程。它包括标识给定时间点上软件的配置、系统的控制配置更改、维护配置在整个生命周期中的完整性和可跟踪性[2]。

(1)配置项/配置,是处于配置管理控制之下的对象。配置项是配置管理中最基本的单位;配置是配置项的选择性集合,两者存在简单的包含关系。

(2)基线,是对象成为新配置项的时间点。通过基线的定义可以同步并发和发布产品,有时称基线为里程碑。

(3)版本控制,是SCM 的核心部分,记录并保存开发过程中配置的版本,通过合适的规则创建新版本、删除旧版本、合并已有版本,提供一种策略来选择版本创建基线[3]。版本控制涉及如下概念:

1)版本、版本项。版本代表一个演化对象的状态,版本项是版本代表的实体。

2)增量。多个版本会共享版本项的某些部分,对版本的保存只要存储不同版本间的差异,这种差异即增量。

3)版本规则。创建、删除、合并、选择版本的策略。 4)粒度。版本项的范围,可以是文件、目录或两者兼有。 5)工作区和事务处理。工作区是进行并行开发的开发者的工作场所或存储空间,它被广泛应用于检入/检出模式。事务是一段时间内的版本变化,事务的特点是整体性,即版本的变化是全变或都不变。

1.2 版本控制系统的现状及其在版本管理技术上的不足

至今已经有很多厂商和实验室推出了自己的SCM 产品或原型,如CVS, VSS, JBCM, ClearCase 等,但这些工具对CBSD 没有支持,或支持不够,没有满足CBSD 对配置管理工具的新要求。

CVS 的分支功能和自动合并能力较强,但其命令行操作不易实现,虽然有Wincvs 的client ,但难以使用,无法对目录进行版本控制或直接对文件进行改名、删除等操作。

VSS 不能浏览提交的记录,只能以手工方式记录每次冗长单调的修改内容。其访问机制导致它不能安全地面向

作者简介:阳万安(1977-),男,讲师、硕士,主研方向:软件工程,人工智能与分布式技术;李 彦,副主任科员 收稿日期:2007-09-20 E-mail :ywaly@https://www.wendangku.net/doc/9717905463.html,

Internet环境,使远程同步开发受影响。VSS的并发能力较差,只适合6人以下的小组并发开发,其checkout and lock机制会给小步开发和持续集成造成影响。

ClearCase和Rational的其他系列工具紧密集成,出现了两级工作区的概念模式,可以有效控制非构件版本演化中的膨胀问题。但ClearCase的高度集成性、复杂性使其难以应用在企业中。

针对上述情况,在现有研究成果的基础上,本文设计了一个通用的版本控制系统,可以管理任何类型的文件集,如源代码、货物清单、数字电影或广泛使用的Word文档。

2 通用版本控制系统的总体结构

除了具有一般SCM配置管理工具的功能,通用版本控制系统还有以下特点:

(1)版本化的目录,实现一个可以跟踪目录树更改的虚拟版本化文件系统,文件和目录都有版本。

(2)真实的版本历史,支持改变目录的内容,可以对文件和目录进行增加、改名、拷贝操作,也可以新增一个具有“干净”历史的文件。

(3)版本化的元数据,每个文件和目录都有一套属性——键和它们的值,可以建立并存储任何键值对,属性随时间推移纳入版本控制。

(4)一致的数据操作,表示文件建立在二进制文件区别算法的基础上,对文本和二进制文件采用一致的操作方式,压缩存储在版本库中,区别信息在网络上双向传输。

(5)可选的网络层,在版本库访问方面有一个抽象的概念,便于实现新的网络机制,系统本身可以作为一个扩展模块与其他服务器结合,直接利用服务器特性,即认证、授权、传输、压缩等,且有一个单独运行的轻型服务。

系统总体结构如图1所示。

图1 版本控制系统总体结构

系统一端是保存所有纳入版本控制的数据版本库,另一端是客户端程序,管理所有纳入版本控制的数据的本地映射。在这两端之间是各种版本库访问层,其中一些使用网络、通过网络服务器访问版本库,另一些绕过网络服务器直接访问版本库(本地访问)。

3 通用版本控制系统的关键技术

通用版本控制系统的主要任务包括:版本信息的存储,版本的创建、删除、合并,版本的选取,分支合并管理,工作区管理和事务管理。要实现这些任务,必须解决一些关键技术问题。

3.1 文件共享问题

在版本库里很容易覆盖别人的修改,因此,必须考虑如何让用户共享信息而不相互干扰。一些系统使用锁定-修改-解锁机制来解决此问题,但这种机制存在如下缺陷:

(1)锁定可能导致管理问题。如果一个人锁住文件后忘了解锁,那么当其他人需要此文件时,只有一直等待或找系统管理员解锁,造成了不必要的耽搁。

(2)锁定导致不必要的线性开发。若一个人想编辑文件的开始,另一个人想编辑文件的结尾,他们将无法同时进行而只能轮流工作。

(3)锁定可能导致错误的安全状态。假设一个人在锁定并

编辑文件A的同时锁定并编辑文件B,如果A和B互相依赖,A和B就不能正确工作。编辑者将认为是别人锁定了文件,即出现了安全状态假相。

图2反映了改共享模型的工作过程。

(a)两人拷贝同一文件并编辑自己的拷贝

(c)用户1比较自己的拷贝和最新的版本

图2 共享模型修改过程

—284—

本文系统使用拷贝-修改-合并模型,在这种模型里,每个客户联系版本库建立一个个人工作拷贝,即版本库中目录和文件的本地映射。用户并行工作,修改自己的工作拷贝,各个私有拷贝最后合并在一起,成为最终版本,系统可以辅助合并操作,有冲突时需要手工确认。实践发现,即使工作在同一个文件上时也很少有交迭发生,冲突并不频繁,处理冲突的时间远少于等待解锁花费的时间。

3.2 版本库的存储

版本库是整个系统的核心,存储了一串目录树(版本树),版本树用一种新的冒泡法生成。每个目录树对应一个修订版,是版本库的文件和目录在某一时刻的快照。修订号是自然数,范围为0~+∞,0表示空目录。可以容易地从版本库中检出整个工程,图3描述了版本库的结构。

12

图3 版本库的结构

与其他系统不同,新版本树与旧版本树的对应部分不是旧版的完全拷贝,而是采用的一种硬连接机制,即许多版本树共享节点,这种模型具有如下优点:

(1)极大降低了版本库的存储空间。

(2)易读。如果文件系统须取出文件C的版本X,只要遍历版本库历史记录,定位到版本X的根节点,然后沿目录树向下搜索,直至到达文件C。

(3)读写操作互不干扰。写操作可以继续创建新节点,按冒泡法沿路径到达顶点,并发的读操作在写操作时把这棵树链接到版本库历史记录前看不到此工作。

(4)文件结构版本化。本文系统在每个版本都保存树的结构。文件和目录的改名、增加、删除都是版本库历史的一部分。

为了进一步降低版本库空间的膨胀速度,使用全局压缩的数据减少技术,利用一个低于块级的增量变化方式存储到磁盘。这种压缩技术可以将容量减少95%以上。而针对版本库数据要异地检出的用户,该压缩技术将传输数据到异地所要求的网络带宽平均减少90%以上[4]。

每个修订版本都以事务树开始其生命周期。进行提交操作时,客户端先建立一个映射本地修改的事务(加上客户端提交操作后任何对版本库的更改),然后指导版本库将该树存储为下一个快照。要是提交成功,这个事务就会成为新的修订版树,并被赋予新的修订版号;如果因为某些原因造成提交失败,事务会被销毁,客户端将被通知这个事务失败。

3.3 工作拷贝追踪版本库的方法

在工作拷贝区设置管理区域,用于记录以工作文件作为基准的修订版本和本地拷贝最后更新的时间戳,根据这2项关键信息与版本库通信,就可以确定工作文件所处状态,这些状态包括:

(1)未修改且是当前的。文件在工作目录里没有修改,在工作修订版之后没有修改提交到版本库,commit和update 不做任何事情。

(2)本地已修改且是当前的。在工作目录里已修改,在工作修订版之后没有修改提交到版本库,commit成功提交,update不做任何事情。

(3)未修改且不是当前的。在工作目录里未修改,在版本库中已修改,commit不做任何事情,update取得最新的工作版本到工作拷贝。

(4)本地已修改且不是最新的。这个文件在工作目录和版本库都得到修改,commit将会失败,这个文件必须先更新,update会合并两级修改,如果不能自动完成,告知用户手动合并。

3.4 事务管理和工作区管理

事务的主要功能是支持需要保持一致性的连贯修改及其版本演化。本文通过基于活动的分支模型和两级工作区管理来完成对事务的支持。把事务视为一个活动集,对事务的处理就是对活动集的处理。

工作区管理采用两级工作区管理模式。例如对象开发者检出对象A的版本2进行开发,在检入之前对象A所有的版本变化都在工作区内完成;当对象A检入时,对象开发者通过版本合并来得到最新版本。在工作区中存在的版本缓冲对于对象使用者是透明的,且存在于开发过程中,能很好地利用配置管理工具对其进行管理。

4 结束语

本文系统是一个SCM工具,可用于管理任何变更文档,其版本控制通过压缩和增量存储技术解决了版本膨胀问题,通过基于活动事务管理的多级工作区管理达到协同开发。本系统作为时间机器,为企业和个人记录历史信息提供了有力支持,现已完成原型设计,还须逐步完善每个模块的算法和功能,并应用于分布式系统。

参考文献

[1] 司徒彦南. 协作开发中的质量保证技术——并行版本控制、每日

构建和交付工程[EB/OL]. (2003-10-29). https://www.wendangku.net/doc/9717905463.html,/ articles/services/view.asp?id=795&page=1.

[2] IEEE. Std 610.12-1990 IEEE Standard Glossary of Software

Engineering Terminology(ANSI)[S]. 1990.

[3] Wesfechtel B, Munch B P, Conradi R. A Layered Architecture for

Uniform Version Management[J]. IEEE Transactions on Sofrware Engineerlng, 200l, 27(12): 1111-1133.

[4]杜国强. 全面的信息基础架构[EB/OL]. (2007-01-11). http://www.

https://www.wendangku.net/doc/9717905463.html,/n/china/2007-01-11/0001231427.shtml.

相关文档
相关文档 最新文档