CVS(Concurrent Version System)并行版本系统是目前应用较广的面向开发者的版本管理工具,开源代码和跨平台是它的两个明显特色。现在已经有了很稳定的基于Windows平台的服务端和客户端软件,它和VSS最大的区别就是对并行操作的支持与否,VSS的管理机制为Lock-Modify-Unlock流程,而CVS则是Copy-Modify-Merge流程,CVS里没有文件锁定的概念,用户将所需文件拷贝到客户机进行修改,之后提交,如果有其他用户修改了同一文件,CVS会会通知你文件冲突,并自动将冲突部分用特定标示标记,用户此时可以更新文件查看修改信息,并由用户自己决定冲突内容的取舍,这样,所有的冲突是在提交之前解决的,这种机制很好的解决了VSS锁存机制的弊端。由于起源于Linux系统,CVS大部分操作都是通过命令执行的,使得每一步操作都很明了;另外,CVS的另一特色是可以将一个文件的所有版本保存在一个文件中,自动以1.1、1.2…来区分,使得版本管理更明了;再次,开源代码也使得它有很多使用的辅助性工具,使得版本控制多了更好的差异化分析,工程量统计等功能,其跨平台的特色也便于Windows和Linux管理协同化。但CVS同样存在缺点:首先,大量的命令操作对使用熟练的开发者来说是简洁明了的,但对于初使用者来说难度比较大,上手需要一定的时间和精力(针对此问题在服务器端用了一个辅助软件,基本不用输命令);另外,在实际的试用过程中,CVS在提交文件时的速度比较缓慢(也可能是电脑的问题);再次,CVS对Windows文件的识别不像VSS那么兼容性良好,它维护的文件类型可以是文本或二进制类型,为数据安全考虑,每次都需要用户对文件格式确认,比较繁琐。
CVS所涉及的几个关键概念包括:Repostory(仓库),Revision(修订版),Update(更新),Commit(提交),Conflicts(冲突)等,所谓仓库,它的概念和VSS中的数据库类似,是CVS 存储所有修订版本历史记录的地方,每个项目都有自己的一个确定的源代码库;修订版本是文件历史记录中的被开发者提交的变化,一个修订版本就是一个时常变化的项目的Snapshot (瞬态图);用户对文件的修改就设计到提交,签出等概念,从源代码库中申请一份工作拷贝,该工作拷贝反映的是取出时项目的瞬时状态,当开发者对拷贝作出修改时,必须运用commit (提交)和update (更新) 命令来“发布”变化和查看其他开发者所作的修改;而冲突则是两个用户对同一个区域所做的改动都提交给主版本时出现的情况,在CVS觉察并指出这个冲突后,必须由用户解决该冲突。
个人感觉使用CVS最繁琐的就是对服务器端的配置,需要添加文件,建立项目树,新建用户及用户组,分配权限,这些比在VSS中要稍显繁琐一些,用户的添加和权限分配需要借助命令行实现。而服务器文件的设置则可借助辅助软件TortoiseCVS以窗口化方式实现,显得比较简单,值得一提的是,Windows平台下的CVS服务端程序CVSNT的文件浏览工具对中文支持不好(但此功能应用较少,在签出和提交时对中文还是支持的)。
CVS具体配置和使用方法介绍:
CVS也是采用C/S架构方式,Windows平台下的服务端程序为CVSNT,客户端为WinCVS,其中客户端的界面和操作与VSS相似,且功能更加强大。
首先配置服务端,安装后重启,打开”CVSNT Control Panel”,具体界面如下截图:
各选项卡分别对应为仓库配置,服务器配置,兼容性配置,插件和高级,切换到第二页配置仓库,在Server中填入服务器IP,点添加,Localtion为选择一个目录做仓库,最好选一个空文件夹,防止系统崩溃时破坏数据,添加描述,其他默认,确认后开始对库的初始化,初始化后,在文件夹里面会生成一个CVSROOT的文件夹,里面生成了很多的文件,都是仓库的配置信息。接下来的服务器、兼容性以及高级配置,具体情况均见下面图片,更加直接:(至于插件配置,它主要是配置一些支持的协议,保持默认即可)
所有配置完成后,最好将第一页中的两个进程重启一下。接下来测试下服务器是否运行正常,打开命令行,1、输入cvs会出现相应帮助提示;2、输入”set cvsroot=:pserver:IP:Path”,其中IP为服务器IP,Path为之前设置的仓库地址(命令无回显);3、输入”cvs login”可以登录到服务器(也无回显);4、输入”cvs ls”,会显示所有模块,至少有一个CVSROOT。四步完成后,就说明CVS可以用了,现在添加CVS用户,输入命令”cvs passwd –a user”,根据提示输入密码即可添加用户。
之后开始为CVS库添加项目模块,如果要管理的文件在服务器端,可在服务器上选择TortoiseCVS,它是最佳的CVS客户端软件,将其装在服务器端做超级用户来管理项目,使用方便,直接附属在鼠标右键上。要添加一个项目模块,只需右击项目文件夹,选择CVS->Make New Module,在弹出的对话框中,填入如下内容(Options页填注释,CVS对注释很重视,Linux版甚至会弹出vim要求加注释):
CVSROOT是自动生成的,协议参数不用填,端口号选填,在网上有说填了2401可能出问题,所以最好不填。协议为pserver,为服务器IP,注意:由于CVS是Linux下衍生的,路径名中不是Windows的”/”,而是”/”!确认后,添加成功的文件夹显示为,而内部未上传的文件为,右键添加,再按提示即可完成操作,成功提交后也会有绿色对号标示。如果是由各用户向服务器上传,则直接通过客户端上的WinCVS管理文件,CVSRoot的设置与之前的类似,值得一提的是,在设置连接协议时,默认pserver连接时使用代理,需要将选项去掉(此处困扰了我近一天!)才能连接成功。其他操作都是窗口化的比较简单,而且每次操作下面输出窗口都有对应命令,操作逻辑十分清楚!