许多开放软件项目都有他们自己的 CVS 服务器,">项目开发人员把这些服务器作为他们工作的源码仓库。源码仓库的源码目录中保存的都是实现版本控制的历史文件(history file),历史文件名为filename,v。历史文件包含用来恢复所有版本文件的足够信息、所有提交的信息以及提交者信息。历史文件常常被称作RCS文件,因为最早是RCS程序用这种格式来保存文件的所有修改信息,可以从man rcsfile得到历史文件的。
开发人员每天都会改进 CVS 资源库内的源码,且他们往往分布在世界各地,而 CVS 提供了一种必要的机制,将他们的项目联合成一个集中的、协作的整体。CVS 创建了"组织粘和剂",可以让这些开发人员改进代码而不会干扰别人、丢失重要数据或遗漏彼此对特定源文件的重要更新。
当开发人员准备好以后,他们把 CVS 上部分当前工作打包成 .tar.gz 文件,作为软件包的新官方版本来发布它。然而,由于种种原因,最新的官方发行版有时并不是最新的。在本教程的第一部分将首先介绍如何使用CVS为个人使用获取最新和最高开发人员版本的源码。
一、版本控制的概念以及几种版本控制工具的简介
1.源文件的标示与版本的概念
源文件是一个软件最为重要的一个组成单元,因此源文件的管理也是整个软件组成管理中最重要的一环,是进行高效软件开发的关键岁所在.对源文件进行管理,必须对源文件进行标示.通常认为只需文件名.而实际上,在一个版本维护工具下对于源文件的标示包括两部分:文件名与版本.即:源文件可以用如下的二元组表示 {filename,version};
所谓版本,一般的软件开发人员都有一个直观的理解,但却很难做出准确的定义.版本,是指某一特定对象的具体实例的潜在存在.这里的某一特定对象是指由版本维护工具管理的如软件组成单元,一般指源文件.具体实例则是指软件开发人员从软件储藏室中恢复出来的软件组成单元的具有一定内容和属性的一个真实拷贝.
把版本定义成一个潜在的存在是基于以下考虑:版本作为源文件的一个表示部分,软件人员对它的引用实际上想得到不同的版本对应的不同源文件,所以说版本是一种抽象.它用来定义一个具体实例应该具有的内容与属性.也就是说版本是一个具体实例的潜在存在,是源文件不同化身的抽象.
有了以上对版本概念的认识.大家对版本维护工具就有了一定的理解:版本维护工具,应该对开发人员屏蔽源文件的存储方式对开发人员是透明的,开发人员不需要明白软件存储库里有什么源文件,只需要说明需要什么样的源文件以及要存储什么样的源文件,版本维护工具自动完成这一切工作.关于版本维护的理论还包括:版本的空间,维数,版本的表示,存储,合并等理论,因为我们这里主要说明cvs 的linux 服务器,所以一切从简,对这方面有兴趣朋友可以阅读相关书籍
本章所讲的cvs 就是这样的一个强大的工具.在讲述cvs 前我们先介绍其他几个版本维护工具.
2.几种版本维护工具的简介
2.1 SCCS
SCCS的全称是Source Code Control System .在介绍之前先定义工作文件的概念.所谓工作文件,是指从软件储藏室得到的有”写”权限的源文件.
SCCS 是一种基本的源文件版本控制工具,它适用于任何正文文件的版本维护.它基于单一文件的版本控制,通常,它的软件储藏室和要维护的文件在同一目录下.
SCCS 工作时,有一个专门的SCCS 格式的文件保留其源文件的编码版本,其记录了足够的信息来生成新的版本,并记录了谁对文件有修改权,拥有该版本的”锁”.
SCCS的版本好事一个四元组,即:发行号,级号,分支号,序号(release,level,banch,sequence)
2.2 RCS
RCS是另一种基本的源代码管理工具,是WALTER.f.Tichy 于1980 年在Indina的 Purdue 大学开发的.RCS和SCCS 类似,也是基于单一文件的版本维护系统.RSC 通过RSC 文件进行文件管理;使用RCS 进行维护的过程与SCCS 相似,也是按恢复提交模式进行的,不多赘述
RCS文件,是RCS 系统中源文件的储藏室,它是一种特殊的编码文件,包含了开发人员恢复老版本的源文件以供开发使用的足够信息.它通常是以.V 为后缀
它的结构如下:
* RCS 头,这一部分记录了对应文件的版本树的头版本号,
* 版本描述: 这一部分描述RCS树上的各个节点的属性性质
* 初始信息:之一部分是在创建第一个RCS 版本时的表述内容
* 文件内容
RCS与SCCS 相似,RCS将所维护的版本也组织成树形结构.但RCS允许多重分支,即,RCS的版本号不像SCCS那样是一个四元组.形式为;发行号,级号,[分支号,序号].版本树如下
2.3 综述
这两种版本维护工具的共同点是:采用了”锁”的方式,对当前问坚持有”锁”的用户才有对文件的修改权.他们采用的机制是所谓的” lock-modify-unlock”.采用这种即只有一个知名的弱点,那就是不至此多用户并发的使用.