CVS 是 Concurrent Version System(并行版本系统)的缩写,用于版本管理。如果大家曾经参与过多人协作开发的项目,大家肯定有这样的痛苦经历:由于多个人同时修改同一个文件,自己辛辛苦苦修改的程序被别人彻底删除了。另外,如果你的软件/程序已经发布了三个版本,而这时候用户需要你修改第二个版本的东西,也许你会因为只保留了新版本而痛哭流涕。还有是你对程序做了一些修改,但是修改很少,你只想给远方的同事发一个两个版本之间的差别文件,这样可以免于邮箱不够大,网速太慢之类的问题。为了解决类似这样的问题,以及诸如生成补丁文件,历史版本修改等,一帮黑客(褒义)在原先 Unix 体系里很成熟的 SCCS 和 RCS 的基础上,开发了 CVS.(SCCS:Source Code Control System,RCS:Revision Control System)
CVS 的基本工作思路是这样的:在一台服务器上建立一个仓库,仓库里可以存放许多不同项目的源程序。由仓库管理员统一管理这些源程序。这样,好象只有一个人在修改文件一样。避免了冲突。每个用户在使用仓库之前,首先要把仓库里的项目文件下载到本地。用户做的任何修改首先都是在本地进行,然后用 cvs 命令进行提交,由 cvs 仓库管理员统一修改。这样可以做到跟踪文件变化,冲突控制等等。
由于 CVS 是典型的 C/S 结构的软件,因此它也分成服务器端和客户端两部分。不过大多数 CVS 软件都把它们合二为一了。
结合文档和一些网上资源,我写一点非常简单的“速成”的教材.希望对大家有用. 下面是我的步骤和做法:
前提要求:
root 权限; CVS软件,请找到相关的rpm,tgz,deb 等包装上,或者到 http://www.cvshome.org/CVS/Dev/code 下载原程序编译安装,这里我不准备介绍它的安装,请参考CVS自身的文档安装.我使用Slackware的tgz包,安装的命令是 #installpkg cvs*.tgz 其他包请参考对应包管理工具的命令. 一定的系统资源,要有一定内存(32M能工作得很好),要一定的磁盘空间,看你的项目的大小和多少而定. 架设CVS服务器: 建立 CVSROOT 目录,因为这里涉及到用户对CVSROOT里的文件读写的权限问题,所以比较简单的方法是建立一个组,然后再建立一个属于该组的帐户,而且以后有读写权限的用户都要属于该组.假设我们建一个组叫cvs,用户名是cvsroot.建组和用户的命令如下
#groupadd cvs #adduser cvsroot
生成的用户家目录在/home/cvsroot(根据自己的系统调整)
用 cvsroot 用户登陆,修改 /home/cvsroot (CVSROOT)的权限,赋与同组人有读写的权限:
$chmod 771 . (或者770应该也可以) 注意:这一部分工作是按照文档说明做的,是否一定需要这样没有试验,我会在做试验后在以后版本的教程说得仔细一点.如果您有这方面的经验请提供给我,谢谢.
建立CVS仓库,(仍然是 cvsroot 用户),用下面命令:
$cvs -d /home/cvsroot init
以root身份登陆,修改 /etc/inetd.conf(使用 xinetd 的系统没有此文件)和 /etc/services, 如果用的是 inetd 的系统,在 /etc/inetd.conf 里加入: cvsserver stream tcp nowait root /usr/bin/cvs cvs -f --allow-root=/home/cvsroot pserver
说明:上面的行是单独一整行,/usr/bin/cvs 应该是你的cvs版本的命令路径,请根据自己的系统调整./home/cvsroot 是你建立的CVSROOT的路径,也请根据上面建立目录的部分的内容做调整.
如果是使用 xinetd 的系统,需要在 /etc/xinetd.d/ 目录下创建文件 cvspserver(此名字可以自己定义),内容如下:
# default: on # description: The cvs server sessions;
service cvsserver { socket_type = stream wait = no user = root server = /usr/bin/cvs server_args = -f --allow-root=/cvsroot pserver log_on_failure += USERID only_from = 192.168.0.0/24 }
其中only_from是用来限制访问的,可以根据实际情况不要或者修改。修改该文件权限:
# chmod 644 cvspserver
在/etc/services里加入:
cvsserver 2401/tcp
说明:cvsserver 是任意的名称,但是不能和已有的服务重名,也要和上面修改 /etc/inetd.conf 那行的第一项一致.这里我用的是 CVS 的口令认证方式,CVS 还有其他认证方式,我没有做试验,如果您有经验,请补充,谢谢.
添加可以使用 CVS 服务的用户到 cvs 组: 以 root 身份修改 /etc/group,把需要使用 CVS 的用户名加到 cvs 组里,比如我想让用户 laser 和gumpwu 能够使用 CVS 服务,那么修改以后的 /etc/group 应该有下面这样一行: cvs:x:105:laser,gumpwu
在你的系统上GID可能不是105,没有关系.主要是要把laser和gumpwu用逗号分隔开写在后一个冒号后面.当然,象RedHat等分发版有类似linuxconf这样的工具的话,用工具做这件事会更简单些.
重起inetd使修改生效:
#killall -HUP inetd 如果使用的是 xinetd 的系统:
# /etc/rc.d/init.d/xined restart
这样服务器设置完成了.我们接着搞客户端.