IRLab
2003年2月10日
什么是CVS
CVS(Version Control System.)即版本控制系统。用来记录源文件的历史信息。甚至二进制文件,媒体文件等。
例如,当软件修改时有时会产生Bugs,并且你可能在做这次修改后很长时间不会发现这些Bugs。使用CVS,你可以容易地回顾老的代码版本去发现哪一次的修改导致这些问题。有时候这样会非常有帮助。
你可能会保留你每一次的代码版本,这可能会浪费你很多的代码空间。CVS使用种聪明的办法保存你的多个版本在一个文件中。它仅仅保留版本间的不同内容。
它可以协助一组人共同开发一个工程。如果你是一个项目中的一组成员之一,CVS也能够帮助你。除非你特别仔细,你很容易覆盖其他人的工作。一些编辑器,例如GNUEmacs,试图去判定一个文件是否被两人同时修改。不幸的是,如果一个人使用其它的编辑器时,这个安全方式将不再有效。CVS使用让不同开发者独立工作的方式解决了这个问题。每一个开发者的工作都在他自己的目录内,并且CVS将 在每个开发者的工作完成后进行合并工作。
基本概念
仓库(Repository)
CVS的仓库存储全部的版本控制下的文件copy,通常不容许直接访问,只能通过cvs命令,获得一份本地copy,改动后再check in(commit)回仓库。而仓库通常为与工作目录分离的。CVS通过多种方式访问仓库。每种方法有不同目录表示形式。
数据如何存放在repository中:随着CVS版本的不同,存放结构会发生变化,一般情况下用户无需了解数据到底是如何存放的。
Revision
每一个file的各个revision都不相同,形如1.1, 1.2.1,一般1.1是该文件的第一个revision,后面的一个将自动增加最右面的一个整数,比如1.2, 1.3, 1.4...有时候会出现1.3.2.2,原因见后。revision总是偶数个数字。一般情况下将revision看作时CVS自己内部的一个编号,而tag则可以标志用户的特定信息。
Tag
用符号化的表示方法标志文件特定revision的信息。通常不需要对某一个孤立的文件作tag,而是对所有文件同时作一个tag,以后用户可以仅向特定tag的文件提交或者checkout。另外一个作用是在发布软件的时候表示哪些文件及其哪个版本是可用的;各文件不同revision可以包括在一个tag中。如果命名一个已存在的tag默认将不会覆盖原来的;
Branch
当用户修改一个branch时不会对另外的branch产生任何影响。可以在适当的时候通过合并的方法将两个版本合起来;branch总是在当前revision后面加上一个偶数整数(从2开始,到0结束),所以branch总是奇数个数字,比如1.2后面branch为1.2.2,该分支下revision可能为1.2.2.1,1.2.2.2,...
Conflct
完全是纯文本的冲突,不包含逻辑上的矛盾,比如CVS不能解决如下问题:某人修改了函数f的参数,而另外一个人在另外一个地方用老的参数调用该函数。文本冲突需要用户自己参与解决,CVS无法自动解决。
安装CVS客户端
1.Windows客户端的安装
在此,我们介绍WinCVS(一款相当不错的基于Windows的CVS客户端软件)的安装。请在""fileserver"software"programming"CVS目录下下载WinCVS软件并安装之。其安装过程与普通的Windows软件相同,其运行界面如下:
2.客户端配置
客户端配置最重要的是CVSROOT环境变量的配置。其格式是:
:pserver:username@hostname(或者IP地址):CVS仓库路径
例如,我在使用我们实验室的CVS服务器时的配置为:
:pserver:car@192.168.2.2:/had/src
每一个实验室的成员应该是用自己的mail服务器账户作为usernam,密码也是mail服务器的密码。
配置对话框如下:
3.测试远程访问CVS服务器
在WinCVS窗口中选择Admin->Login命令,会出现提示输入密码的窗口。输入密码后,单机OK按钮。然后察看命令结果输出窗口中的输出结果。如果显示错误信息,则表明安装配置有误,请察看前面的步骤。如果仍然有错误,请与管理员联系。
4.在Visual Studio中集成CVS
用CVS取代Visual Studio中所使用的Microsoft Visual Source Safe,步骤如下:
(1) 安装Microsoft Visual Studio;
(2) 安装WinCVS;
(3) 到""fileserver"software"programming"CVS下载iglooinstall.zip并安装igloo;
(4) 将WinCVS安装目录下的cvs2ntlib.dll和cvs2ntslib.dll文件拷贝到igloo的安装目录下。
完成以上步骤以后,打开Microsoft Visual Studio就可以看到进行版本管理需要的菜单了,如下图所示:
经常使用的CVS功能
使用igloo在Visual Studio中使用CVS进行版本的控制和管理是一件十分轻松惬意的事情。其为用户提供了大多数的基本的CVS 命令的图形接口,使我们只是简单的点击鼠标,就可以完成一般的CVS控制命令,下面将逐一介绍:
Check Out
把源文件从RCS源代码仓库中取出,缺省的版本是最新的版本,如果你需要一个指定的版本,则需要使用-r选项指定。
在每次更改源代码之前,需要Check Out最新的版本,再起基础之上对源代码进行修改。将代码目录checkout到指定目录下,所有文件都是read-write
Check In
把源代码加入到RCS源代码仓库中,每一个添加进代码库中的文件的版本是 1.1。以后每次修改文件重新ci以后,此文件的版本递增为1.2 ,1.3.……。
在每次对源代码修改之后,需要Check In,提交最新版本的源代码。
冲突:多人同时修改同一内容。冲突的情况下,通过文件两个版本的比较消除冲突的地方后再次提交。比较两个版本不同的方法是:
1)可以利用CVS自带的比较工具,CVS会把不同部分通过
<<<<<<<<<<<
...
==========
...
>>>>>>>>>>>
列出来;
2)也可以利用其它文本比较工具比较(Preference setting中选定,Query-diff setting中选定);
Add to Source Control
将新的文件加入到版本控制之中。
References
1.杨锦方等. CVS和Nightly Build技术. 清华大学出版社
2.使用CVS进行版本管理
3.WINDOW系统下CVS的使用
4.Karl Fogel. Open Source Development With CVS
5.Per Cederqvist et al. Version Management With CVS