CVS
使用指南
一、 使用cvs必须了解的知识
1.1 CVS
CVS (Cuncurrent Versions System)是基于TCP/IP协议的版本控制工具,也是Open source界最重要的开发工具之一。它原来主要工作在UNIX平台下,现在在windows平台上也出现了很多GUI工具。
CVS和其他大部分版本控制软件一样,是Client/Server结构的。和在Windows 开发平台中拥有很大用户群的Visual Source Safe(VSS)相比,CVS主要由两个不同之处:
一是VSS依靠服务器上的一个共享目录提供服务,每一个client必须能够访问这个共享目录。这也就决定了source safe在TCP/IP环境下使用很困难。对于分布跨越数个城市甚至国家的工作小组来说,只有通过VPN才能够安全的访问source safe数据库。而CVS依靠TCP/IP连接提供服务,所以它天生就是为了在internet上协同工作而设计的。虽然基本的pserver连接安全性不是很高,但是通过使用SSH协议,可以获得很高的安全性。
二是CVS反对对文件上锁的机制。VSS以及其他很多传统版本控制工具要求一个文件只能有一个使用者,它必须先checkout声明编辑文件的独享权力,直到checkin为止。但是对于地理上不限制使用者位置的CVS来说,等待一个用户checkin是一件痛苦的事情,而互相沟通比一个紧密工作的团体更困难。CVS采取多个用户可以同时对一个文件进行编辑,然后commit的方式解决这个问题。假设由于沟通不足出现冲突,使用者必须手工解决冲突之后再进行commit。在这种情况下,冲突的开发者必须努力进行足够的沟通以避免再次冲突。
CVS服务器可以被配置为把commit记录自动张贴到新闻组或者开发者的email信箱中去。注意这些辅助记录将有助于开发者之间的合作。
1.2 repository,module
CVS服务器上,一个源代码仓库被称为一个repository(知识库),一个server上通常可以运行多个repository,每个repository都是完全独立的,可以有不同的用户列表和访问规则。在一个repository之下,文件按照module组织,每一个module就相当于一个工程,大致上相当于Source safe里面的project。
VSS在你连接上服务器之后,会列出所有的project。但并不是所有的CVS server都会提供module的列表。事实上,哪些module被公开是由管理员控制的。如果你知道一个被隐藏的module的名字,你仍然可以正常的访问这个module。
1.3 CVSROOT
CVS依靠运行在服务器上的一个服务程序提供TCP/IP的连接。为了访问一个CVS数据库,你必须知道你所使用的协议,服务器的地址,服务器提供的Repository的名称以及你的用户名和密码。
有数种协议可供选择。Unix/Linux机器上的CVS通常使用pserver协议,这是一种不非常安全的协议,但是如果你有额外的安全要求,可以通过SSH进行增强。除此之外,NT机器还支持ntserver协议,它通过主机的NT用户表进行访问控制(但是这是在internet上不可用的方法)。kserver和gserver协议用的比较少,他们依据Kerboses提供额外的安全保护。
你必须要知道CVSROOT这个参数。CVSROOT是一个用":"开始及分隔各个部分的字符串,它包含了协议、用户名、服务器地址和repository名称。对于用户来说,CVSROOT就像URL一样,是访问一个server的途径。
一个典型的CVSROOT=:perser:guanshengyong@192.168.0.203:/oacvs/cvs。这里,pserver是协议名称,guanshengyong是用户的id,192.168.0.203是服务器的主机ip地址,,/oacvs/cvs是repository的名字。
在windows下使用命令行方式,这个参数可以通过一个环境变量使用。在windows 2000/XP系统中,你可以通过在'My computer'的properties中选择“高级”,然后选择“环境变量”来输入这个环境变量。
1.4 checkout,update
为了得到module下面的源代码,你只需要使用checkout指令。和Visual source safe不一样,checkout只是取得文件,而非锁文件。
如果你已经有了本地文件,为了和server保持同步,你需要进行update操作。update会自动把server上的新内容取到本机来,如果你本地文件进行过了改动,它会帮您做合并工作。
checkout 和 update既可以针对一个特定的文件,也可以针对一个目录或者整个module。
1.5 commit
如果你对本地代码做了任何修改,或者增加一个文件,删除一个文件,每当你需要把你的改变提交到server上的时候,你就需要做commit动作。假设两个人都在本地修改了同一个文件,那么他们就像在进行一个竞赛,如果你快,那么你赢了。后commit的人将被server拒绝,不得不合并你的修改再次提交。
commit既可以针对一个特定的文件,也可以针对一个目录或者整个module。
1.6 Revision
Revision是指每一个文件的版本信息。当你第一次增加一个文件到repository的时候,它会有一个初始revision是1.1,以后每次提交,就会增加到1.2,1.3...
在一个branch中的文件,有相对于这个branch的版本号。如果你对文件作了tag,那么你会看到revision变成1.1.1.1的形式。具体的含义我们在branch和tag的时候描述。
1.7 Tag
Tag用来进行标示必要的信息。当您进行一次公开发布之前,您有必要对主枝标示"release 1.0"。这样您以后就可以随时回到这个版本。
二、 客户端使用Cvs
2.1 Cvs客户端安装
客户端需要安装如下工具(注意,如果以前曾经在客户端安装过其他版本的cvs工具,最好卸载并在注册表中删除cvs相关信息,以免冲突):
WinCvs13b13_setup.exe
cvsnt_1.11.1.3.exe
2.2 cvs客户端设置
Step1打开并设置wincvs参数
第一次运行,程序会自动弹出如下图所示界面设置,以后的更改可以在菜单Admin——Preference中设置:
Authentication:选择pserver,点击后面的“setting”按钮,设置服务器端口,默认为2401(在公司外部的端口为24011);
Path:为repository在服务器端的path,例如OA系统的为/oacvs/cvs
Hostaddress:在公司内部为192.168.0.203
在公司外部为。。。
Username:为用户id
下面的CVSROOT为根据上述参数自动生成
Step2 wincvs客户端目录设置
Step3 wincvs登陆
菜单admin——login
Step4 wincvs使用
1取得最新工程代码——import module
2上传新添加文件
首先选中文件,然后点击 按钮
3Commit文件
鼠标右键
4Checkout文件
鼠标右键
2.3 Cvs修改用户密码
点击wincvs菜单admin——command line;
键入如下命令:
cvs passwd
回车
在上图所示的对话框中两次输入你的新密码(注意,一定要首先login,然后才能修改)
注意:如果每次命令正确,则在下面的信息框中会有下面信息:
***** CVS exited normally with code 0 *****
否则为:
***** CVS exited normally with code 1 *****
2.4 Cvs同IDE工具的结合
在JBUILDER中新建工程选择Pull Project From CVS
此处为选择工程存放在本地机器的路径
配置CVS服务的信息
对于公司外部用户,Special port 修改为:24011
Server 修改为:219.142.175.97
设置下载的项目信息
Repository path: /oacvs/cvs
Module name: pinghu
点击Finish按钮
三、 管理员使用方法cvs
3.1 服务器端设置
这里目前只涉及到CVSNT作为服务器端的设置方法,对于unix和linux服务器系统中的设置,待以后添加(网上很多相关)。
Step1在服务器添加超级管理员
在服务器端“控制面板”的计算机管理——“本地用户和组”中增加cvs服务器超级管理员用户,此用户必须属于administrator用户组;
Step2设置repository
打开CVSNT的control panel:
如上图所示,首先将工程代码传到服务器端的某目录下,然后点击“add”按钮,弹出如下图所示界面:
选择工程代码所在文档并建立相应的repository。
Step3设置CVSNT服务器端
如上图所示:
“Run as”中选择在step1中添加的用户;
“Default”为服务器的机器名;
“Temporary”中选择设置服务器的日志信息储存位置;
“Cvs server”中设置CVS服务器端口,默认为“2401”。
3.2 用户管理
管理员在命令终端中使用命令行进行管理:
Step1设置CVSROOT
set cvsroot=:pserver:cvsadmin@192.168.0.203:2401/oacvs/cvs
Step2 cvs登陆
cvs login
然后输入密码
Step3 cvs用户管理命令
l 增加cvs用户
cvs passwd –a userid
然后输入密码并再次确认输入
l 删除cvs用户
cvs passwd –X userid
l Disable cvs用户
cvs passwd –x userid
其他cvs命令请参考手册