第一章 Cvs概述
1.1CVS简介及基本原理
CVS 的全称是Current Version Control. CVS是一种GNU 软件包.由
Intersolv公司开发。它是一种基于RCS系统的维护工具.它明确的将源文件的存储和用户的工作空间独立开来,有在一定的模式上扩展了RCS的恢复提交功能. 并使其有利与并行开发.
CVS 将源文件的RCS 文件根据其源码树的层次集中在一个目录下,该目录的绝对路径由环境变量CVSROOT 定义.
可见该目录可以分成两部分:一部分为${CVSROOT}/CVSROOT,它包含CVS所需的一些管理文件.另一部分为源文件所形成的RCS 文件,并按软件开发的源码树的结构来构成.
1.2CVS 在进行源代码管理时的特点
1.2.1源代码空间与用户空间分离.
CVS 系统将源代码文件放在repository下,用户要修改文件必须将
repository 下的文件作一个拷贝之后才能进行。
1.2.2并发访问
CVS 系统允许多个开发人员同时获取同一文件的的同版本源文件.开发人员提取一个文件时,将在自己的工作空间建立一个与其他开发人员相互独立的拷贝,此文件的版本号与文件“头”版本相同,除非他用commit 命令完成版本的永久性升级.而此时,其他用户可用update 命令是自己的版本号与”
最新的头版本号”相一致.
CVS系统是一个Copy-Modify-Merge 的算法而不是lock-modify-unlock机制这种算法的好处在于,软件开发人员可以得到一份源文件的拷贝(Copy),并不会对该文件上”锁”,因此为并行开发提供了可能,在得到拷贝后, 开发人员可以在自己的开发环境下进行修改(Modify),然后提交自己修改后的文
件,与源文件进行合并(Merge)形成新的版本。
1.3专业术语:
repository:仓库。在cvs里,就是存放版本历史记录的地方。
pserver:是cvs用来接受远程的cvs 命令用的。cvs有两种模式, 一种是local, 一种是remote.
cvsroot:当使用cvs的时候,必须设定CVSROOT这个环境变数,或是用-d 这个选项来指定。
第二章 Linux CVS Server
2.1服务器端配置
2.1.1Linux环境
OS环境:RedHat Linux 9
CVS:cvs-1.12.9.tar.gz (下载地址:https://www.sodocs.net/doc/0d6236136.html,)
2.1.1.1源码包安装
1、检查RedHat Linux 9是否缺省安装了CVS。输入命令:
[root@VLinux root]# rpm -qa | grep cvs
2、如果出现以下显示则说明已经安装有CVS,
rpm -e cvs-1.11.2-10
3、卸载命令:
[root@VLinux root]# rpm -e cvs-1.11.2-10
4、正式安装
[root@VLinux src]# tar -zxvf cvs-1.12.9.tar.gz
[root@VLinux src]# cd cvs-1.12.9
[root@VLinux cvs-1.12.9]# ./configure --prefix=/usr/local/cvs
--exec-prefix=/usr --disable-server-flow-control
[root@VLinux cvs-1.12.9]# make
[root@VLinux cvs-1.12.9]# make install
2.1.1.2配置服务
1、加入cvs服务
[root@VLinux root]#vi /etc/services
cvspserver 2401/tcp #pserver cvs service
cvspserver 2401/udp #pserver cvs service
注:一般redhat9缺省就有cvs服务
在Rad Hat中使用xinetd来启动CVS服务。
在/etc/xinetd.d目录下为CVS服务创建一个配置文件,例如:
/etc/xinetd.d/cvspserver,编辑/etc/xinetd.d/cvspserver,输入如下内容:service cvspserver
{
disable = no
socket_type = stream
wait = no
user = root
env = HOME=
server = /usr/bin/cvs
server_args = -f --allow-root=/home/cvsroot pserver
}
注:
1)pserver表示是口令认证的访问方式,是最常用的方式,其他还有gserver,kserver,ext,如果想要更高的安全性可以使用ssh来加密口令和数据流。
2)--allow-root是指定Repository的目录,可以建立多个Repository
然后重新启动xinetd:
[root@VLinux root]# /etc/rc.d/init.d/xinetd restart
Stopping xinetd: [ OK ]
Starting xinetd: [ OK ]
重新启动xinetd服务后,CVS服务也开始工作了。
2、检查服务是否启动。
输入以下命令:
$ netstat –na|grep 2401
可以看到cvs服务侦听在2401端口
tcp 0 0 0.0.0.0:2401 0.0.0.0:* LISTEN
这表明cvs的服务器环境就基本搭建成功。
2.1.1.3初始化CVS服务器
1、创建cvs用户和用户组
例如:
创建一个名为cvs的组和一个名为cvsroot的用户,以后要访问CVS服务的用户加入cvs这个组:
[root@VLinux root]# groupadd cvs
[root@VLinux root]# useradd -g cvs -G cvs -d /home/cvsroot -s
/sbin/nologin cvsroot
[root@VLinux root]# chmod 755 /home/cvsroot
2、初始化:
[root@VLinux root]# cvs -d /home/cvsroot init
执行以上命令后,在/home/cvsroot目录中就产生了CVSROOT目录,其中存放了一些配置文件,如config等。
3、设置权限:
[root@VLinux root]# chown -R cvsroot.cvs /home/cvsroot
[root@VLinux root]# chmod -R ug+rwx /home/cvsroot
[root@VLinux root]# chmod 644 /home/cvsroot/CVSROOT/config
4、建立密码生成文件passwdgen.pl,并设置为可执行
[root@VLinux root]# vi /home/cvsroot/passwdgen.pl
#!/usr/bin/perl
srand (time());
my $randletter = "(int (rand (26)) + (int (rand (1) + .5) % 2 ? 65 : 97))";
my $salt = sprintf ("%c%c", eval $randletter, eval $randletter);
my $plaintext = shift; my $crypttext = crypt ($plaintext, $salt);
print "${crypttext}\n";
5、建立CVS用户,生成密码:
[root@VLinux root]# chmod +x /home/cvsroot/passwdgen.pl 例如:要生成的密码为"123456",则使用如下命令
[root@VLinux root]# /home/cvsroot/passwdgen.pl "123456"
MbQ2iaN85u3mM
结果"MbQ2iaN85u3mM"即为所要的密码
6、创建配置文件:passwd
[root@VLinux root]# vi /home/cvsroot/CVSROOT/passwd 用户名:密码:cvsroot
例如:
gx:MbQ2iaN85u3mM:cvsroot
6、创建配置文件: writers(可读写)和readers(只读)
[root@VLinux root]# vi /home/cvsroot/CVSROOT/writers
[root@VLinux root]# vi /home/cvsroot/CVSROOT/readers
7、测试连接
[root@VLinux root]# cvs
-d :pserver:jasonseaver@192.168.0.5:/home/cvsroot login
2.1.2Windows环境
OS环境:Windows NT4 服务器、工作站SP6, Windows 2000服务器或专业版,Windows XP专业版。
CVS:CVSNT 1.11.1.3 (下载地址: https://www.sodocs.net/doc/0d6236136.html,)
1.以管理员账号登陆,首先修改环境变量,设定路径。
注:与CVSNT相关的内容最好安装到NTFS分区上,也尽量不要使用含有空格的目录名或者文件名。
例如:CVSNT安装目录为D:\cvs\cvsnt目录。
点击控制面板,系统属性,高级,环境变量,系统变量中的Path,添加上D:\cvs\cvsnt并保存设置。
2.执行安装程序,修改安装目录,一步步完成安装。
3.从开始菜单的程序组中启动CVSNT配置程序Configure Server。如果已
经运行了,则停用重启。
4.选择第二个选项卡,点击的Add按钮添加数据库根,可以有多个。
例如:设定/work为工作项目的存储根。
5.选择第三个选项卡Advanced,勾上全部选项,包括Use local users
instead of domain。设置临时目录,假设为E:\work\cvstemp。
注意:要保证临时目录的安全设置(右键点击目录属性,共享,权限)给所有帐号以完全控制权限,包括SYSTEM帐号。不能把临时目录设在诸如C:\WINNT\TEMP或者C:\Documents and Settings下的任何地方,因为这些地方对于用户的访问是有限制的。
6.点击应用以保存设置。
7.回到第一个选项卡,点击Start按钮,服务应该正常启动运行了。如果有
问题,可以打开一个命令行窗口,输入path命令来检查路径是否已经设置正确,也许需要重新启动来使设置生效。
8.设置cvsroot,打开一个命令行窗口,输入如下命令:
set cvsroot=:pserver:<计算机名>:/work
9.设置用户名密码:
cvs passwd -a <服务器上的真实用户名>
这一命令设定CVS中的用户名和密码,输入后将提示你输入密码。
给真实用户设定一个不同的使用名alias:
cvs passwd -a -r <服务器上的真实用户名>
注:名字里最好不要使用任何空格。如果必须的话,可以用双引号括起来。
2.2 客户端配置和使用
2.2.1Winnt
1. 从https://www.sodocs.net/doc/0d6236136.html,下载,以默认设置进行安装即可。
2. 安装后启动WinCVS,初始界面如下图:
3. 首先,按Ctrl-F1进行一些参数设置,按照下图进行设置。
4. 然后,按下工具栏右侧的文件夹按钮,设置存放代码的默认目录。
5. 在check out代码之前,选择Admin菜单的Login菜单项进行登录。
6. 在选择了Login之后会出现下面的对话框:
7. 按下下拉框右侧的那个按钮,会弹出CVSROOT设置向导,如下图所示:
8. 点击OK后会回到登录设置窗口,此时下拉框的文本区中就有了CVSROOT 路径。
9. 按下确定后就可以登录上CVS服务器了。
10. 接下来就可以从CVS服务器下载代码了,选择Remote菜单的Checkout module项。
11. 之后会出现Checkout settings对话框,在Module name中输入要下载的模块名称(例如plugins),点击下拉框的下拉按钮,选择登录时用的CVSROOT,然后按下确定就可以开始代码下载。代码成功下载后会出现相应模块的文件夹。
12.直接从Remote菜单选择Checkout module选项,出现Checkout settings对话框后,打开CVSROOT向导(点击下拉框右侧的按钮),按下图进行设置:
13. 按下OK后回到Checkout settings对话框,在Module name栏中输入要下载的模块名称,按确定开始代码下载。
14. developer可以修改和上传代码的权限(commit),当下载的代码被修改后,在WinCVS可以看到被修改的文件用红色图标标出。选择Modify菜单的Commit 项可以将选中的文件夹中被修改的代码上传到CVS服务器。
15. 成功上传后可以看到以下提示:
2.2.2Eclipse cvs插件
Eclipse本身内置了CVS支持,不需要使用其他客户端软件,只要建立一个CVS 服务器,就可以使用版本控制系统了。
CVS使用了一个分枝(Branch)模型,以保证不同开发者的相对独立,但是又高度集成。分枝可以看成一个开发团队共享的工作区(Workspace),在CVS数据库中,有一个特殊的分枝称为HEAD,代表主要工作流。
开发者可以提交(Commit)自己的工作,并通过更新(Update)与其他人的最新修改保持同步。提交是把自己的修改提交给数据库,称为输出(Outgoing),更新则是得到其他人的修改,称为输入(Incoming)。每次提交之前,都应该先更新,以保持与最新状态同步。
因此,在Eclipse中使用CVS进行团队开发,理想的开发流程应如下图:
图2:团队开发流程
1.从最新状态开始。开始工作前,要保证所有资源与最新的分枝状态一致。
对于从头开始的新项目,首先要连接服务器,设定存储那些资源文件。对于在服务器数据库中已经有记录的项目,首先要通过更新来保证资源状态最新。如果本地的工作没有需要特别保存的,可以直接把数据库中的最新版本Check Out As Project,或者Replace With,Latest from Repository。
2.进行本地工作,保存修改。
3.同步。当做好提交工作的准备后,要和服务器数据库同步。
1.首先应该更新(Update),检查所有的Incoming改变,输入到本
地,看是否会影响自己的工作,是否会造成冲突,破坏完整性等等。
2.检查完更新后,可以确认自己的工作和最新的Branch内容是一致
的,就可以提交(Commit)自己的修改了,标上适当的注释。
开发流程所用到的主要操作如下:
对于一个新的项目而言,首先需要做的就是设置Eclipse来连接CVS服务器。首次连接将与服务器同步(Synchronize)。
首先在Eclipse的资源视图(Resource Perspective)或者Java视图(Java Perspective)中的项目上点右键,选择Team,Share Project,将出现提示窗口,选择是使用已知的CVS数据库位置还是新建数据库位置。对于第一次连接CVS服务器的情况,将需要首先定义连接所需的服务器参数和路径,用户名,密