CVS介绍
CVS代表协作版本系统,这是一个将一组文件放在层次目录树中以保持同步的系统。人们可以从 CVS 服务器上更新他们的本地层次树副本,并将修改的结果或新文件发回;或者删除旧文件。
CVS 基于客户端/服务器的行为使得其可容纳多用户,构成网络也很方便。这一特性使得 CVS 成为位于不同地点的人同时处理数据文件(特别是程序的源代码)时的首选。
服务器
1。初始化cvs服务器环境
#cvs –d /tmp/source init
命令在/usr/local/sourc 下建立了cvsroot目录,里面是初始化的cvs服务器配置文件。
2。把cvs服务器放到xinetd中
#vi /etc/xinetd.d/cvspserver 建立服务文件并添加内容
server cvspserver
{
flags = REUSE
socket_type = stream
wait = no
user = root
protocol = tcp
server = /usr/bin/cvs
server_args = -f –allow-root=/tmp/source pserver
disable = no
}
其中server_args一个参数指定了源代码路径,一个指定了服务器使用密码认证方式.
然后确保/etc/services文件中有以下两行
cvspserver 2401/tcp
cvspserver 2401/udp
最后重启xinetd服务。
测试
假设cvs服务器在192.168.0.192上,系统上有一个用户cvs。登陆另一台linux机器,执行下列命令可以完成测试。
$export CVSROOT=:pserver:cvs@192.168.0.192:2401/tmp/source
$cvs login
输入密码,没有错误提示表示登陆成功。
$cvs logout登出
用户认证
cvs服务器有一套自己的用户认证机制,此方法使用了系统上用户直接作为cvs服务器用户,采用linux组、用户权限实现这样的功能。
例如,在linux系统上有两个开发组a、b,分别有用户a-user1,a-user2,b-user1,b-user2。
模块a-source,希望a组成员都可以读写,b组没有任何权限,使用以下命令:
#chown –R a-user1 a-source
#chgrp –R a a-source
#chmod –R 770 a-source
如果希望a-source,只有a-user1可以写,同组其他用户可以读,b组没有任何权限,把chmod命令改成
-R 750即可。
说明
cvs中默认一个用户checkout代码时候,会在当前模块下生成一个锁文件,如果这个用户对当前模块没有写权限,读是不可能的。配合上面的权限设置,必须改以下cvs服务器配置。改成不在当前模块目录下生长锁文件,把锁文件集中到一个所有用户都有读写权限的目录。修改配置文件CVSROOT/config
#Put CVS lock files in this directory rather than directly in the repository.
#LockDir=/var/lock/cvs
把LockDir设上就可以了。
系统建立多个源代码库
1。使用一个不同路径
2。/etc/xinetd.d目录下建立一个新的任务配置文件,如cvspserver1,文件中第一行server名称一定要区分。如改为server cvspserver1,server_args做相应变动。还要在/etc/services文件中,加入新的服务器端口,如cvspserver1 2402/tcp。重启xinetd即可。
CVS 的使用流程
1。登入 (login),只需做一次。需要密码认证,除非是允许匿名登入,否则都要输入 CVS Server 管理者配给您的密码。
2。取出(checkout)整份专案(类似档案下载)。此时,您的硬碟中会有一份专案的原始码目录,我们称之为工作目录。
3。依您的程式意图,修改某一支程式。
4。查询程式的在库状态(status)。 (3、4这二个动作可互调或合并操作)
5。视在库状态,比对二者的差异(diff),调整修改的程式(是否和他人修改的部份发生冲突,若无冲突,那就十分单纯,可在修改完之後,直接存入(commit/ci)档案库(repository)中)
6。若有冲突,在 mailling list 中,和他人讨论,取得协调。
7。将修改好的档案 commit 存入 CVS 档案柜 (俗称 checkin,类似档案上传),请务必在程式码注解中,详述您的意图。
8。透过 mailling list 说明您的想法,和大家讨论。
9。每经过一段时日,应查询在库状态,并更新您的工作目录(update)。