快捷搜索:

CVS 是 Concurrent Version System(并行版本系统)谈

[转载]CVS 是 Concurrent Version System(并行版本系统)谈

作者:eclipse颁发光阴:2002/08/18 10:27am

作者:龚天乙

CVS 是 Concurrent Version System(并行版本系统)的缩写,用于版本治理。在多人团队开拓中的感化加倍显着。CVS 的基础事情思路是这样的:在一台办事器上建立一个仓库,仓库里可以寄放许多不合项目的源法度榜样。由仓库治理员统一治理这些源法度榜样。这样,就好象只有一小我在改动文件一样。避免了冲突。每个用户在应用仓库之前,首先要把仓库里的项目文件下载到本地。用户做的任何改动首先都是在本地进行,然后用 cvs 敕令进行提交,由 cvs 仓库治理员统一 改动。这样就可以做到跟踪文件变更,冲突节制等等。

因为CVS是建立在在本来 Unix 体系里很成熟的 SCCS 和 RCS 的根基上,以是CVS多是Linux(UNIX)系统中所应用,本文中办事器端设置也因此Linux为例。

一、CVS办事器的安装

首先确认系统中是否安装CVS办事:

[root@localhost /]# rpm -qa|grep cvs

cvs-1.11.2-cvshome.7x.1

假如敕令输出类似于上面的输出则阐明系统已经安装有cvs,否则就必要从安装光盘中安装cvs的rpm包,或者到http://www.cvshome.org下载。

1、建立 CVSROOT

目录,由于这里涉及到用户对CVSROOT里的文件读写的权限问题,以是对照简单的措施是建立一个组,然后再建立一个属于该组的帐户,而且今后有读写权限的用户都要属于该组。假设我们建一个组叫cvs,用户名是cvsroot。建组和用户的敕令如下

#groupadd cvs

#adduser cvsroot

天生的用户宿主目录在/home/cvsroot(根据自己的系统调剂)

2、用cvsroot 用户登岸,改动 /home/cvsroot (CVSROOT)的权限,赋与同组人有读写的权限:

$chmod 771 . (或者770应该也可以)

留意:这一部分事情是按照文档阐明做的,是否必然必要这样没有试验,我会在做试验后在今后版本的教程说得仔细一点。假如您有这方面的履历请供给给我,感谢。

3、建立CVS仓库,(仍旧是 cvsroot 用户),用下面敕令:

$cvs -d /home/cvsroot init

4、以root身份登岸,改动 /etc/inetd.conf(应用 xinetd 的系统没有此文件)和 /etc/services

假如用的是 inetd 的系统,在 /etc/inetd.conf 里加入:

cvsserver  streamtcpnowaitroot/usr/bin/cvscvs -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里加入:

cvsserver2401/tcp

阐明:cvsserver 是随意率性的名称,然则不能和已有的办事重名,也要和上面改动 /etc/inetd.conf 那行的第一项同等。

5、添加可以应用 CVS 办事的用户到 cvs 组:

以 root 身份改动 /etc/group,把必要应用 CVS 的用户名加到 cvs 组里,比如我想让用户 laser 和gumpwu 能够应用 CVS 办事,那么改动今后的 /etc/group 应该有下面这样一行:

cvs:x:105:laser,gumpwu

在你的系统上GID可能不是105,没有关系。主如果要把laser和gumpwu用逗号分隔开写在着末一个冒号后面。当然,象RedHat中分发版有类似linuxconf这样的对象的话,用对象做这件事会更简单些。

6、重起inetd使改动生效:

#killall -HUP inetd

假如应用的是 xinetd 的系统:

# /etc/rc.d/init.d/xined restart

然后不雅察cvs办事器是否已经运行:

[root@localhost /]# netstat -lnp|grep 2401

tcp00 0.0.0.0:24010.0.0.0:*LISTEN1041/xinetd

则阐明cvs办事器已经运行。

二、治理CVS办事器

办事器可以用了,现在大年夜家最关心的便是若何治理办事器,比如,我想让一些人有读和/或写 CVS 仓库的权限,然则不想给它系统权限怎么办呢?

不难,在 cvs 治理员用户(在我这里是 cvsroot 用户)的家目录里有一个 CVSROOT 目录,这个目录里有三个设置设置设备摆设摆设文件,passwd, readers, writers,我们可以经由过程设置这三个文件来设置设置设备摆设摆设 CVS 办事器,下面分手先容这几个文件的感化:

passwd:cvs 用户的用户列表文件,它的款式很象 shadow 文件:

{cvs 用户名}:[加密的口令]:[等效系统用户名]

假如你盼望一个用户只是 cvs 用户,而不是系统用户,那么你就要设置这个文件,刚刚安装完之后这个文件可能不存在,你必要以 cvs 治理员用户手工创建,当然要按照上面款式,第二个字段是该用户的加密口令,便是用 crypt (3)加密的,你可以自己写一个法度榜样来做加密,也可以用我先容的偷懒的措施:先创建一个系统用户,名字和 cvs 用户一样,口令便是筹备给它的 cvs 用户口令,创建完之后从 /etc/shadow 把该用户第二个字段拷贝过来,然后再把这个用户删除。这个措施对于数量少的用户对照方便,人一多就分歧适了,而且还有冲突前提(race condition)的安然隐患,还要 root 权限,其实不怎么样。不过职权之计而已。写一个小法度榜样并不难,可以到 linuxforum 的编程版搜索一下,有个同伙已经写了一个贴在上面了。

第三个字段便是等效系统用户名,实际上便是赋与一个 cvs 用户一个等效的系统用户的权限,看下面的例子你就明白它的功能了。

readers:有 cvs 读权限的用户列表文件。便是一个一维列表。在这个文件中的用户对 cvs只有读权限。

writers:有 cvs 写权限的用户的列表文件。和 readers 一样,是一个一维列表。在这个文件中的用户对 cvs 有写权限。

上面三个文件在缺省安装的时刻可能都不存在,必要我们自己创建,好吧,现在照样让我们用一个例子来教授教化吧。假设我们有下面几个用户必要应用 cvs:

laser, gumpwu, henry, betty, anonymous。

此中 laser 和 gumpwu 是系统用户,而 henry, betty, anonymous 我们都不想给系统用户权限,并且 betty 和 anonymous 都是只读用户,而且 anonymous 更是连口令都没有。那么好,我们先做一些筹备事情,先创建一个 cvspub 用户,这个用户的责任是代表所有非系统用户的 cvs 用户读写 cvs 仓库。

#adduser

...

然后编辑 /etc/group,令 cvspub 用户在 cvs 组里,同时把其它有系统用户权限的用户加到 cvs 组里。(见上文)

然后编辑 cvs 治理员家目录里 CVSROOT/passwd 文件,加入下面几行:

laser:$xxefajfka;faffa33:cvspub

gumpwu:$ajfaal;323r0ofeeanv:cvspub

henry:$fajkdpaieje:cvspub

betty:fjkal;ffjieinfn/:cvspub

anonymous::cvspub

留意:上面的第二个字段(分隔符为 :)是密文口令,你要用法度榜样或者用我的土法子天生。

编辑 readers 文件,加入下面几行:

anonymous

betty

编辑 writers 文件,加入下面几行:

laser

gumpwu

henry

留意:writers中的用户不能在readers中,要不然不能上传更新文件。

对付应用CVS的用户要改动它的情况变量,例如laser用户的情况变量,打开/home/laser(laser的宿主目录)下的.bash_profile文件,加入

CVSROOT=/home/cvsroot

export CVSROOT

用laser登岸就可以建立CVS项目,假如要root应用,可以改动/etc/profile文件。

现在我们各项都设置好了,那么怎么用呢,我在这里写一个最简单的(预计也是最常用的)敕令先容:

首先,建立一个新的CVS项目,一样平常我们都已经有一些项目文件了,这样我们可以用下面步骤天生一个新的CVS项目:

进入到你的已有项目的目录,比如叫 cvstest:

$cdcvstest

运行敕令:

$cvs import -m "this is a cvstest project" cvstestv_0_0_1start

阐明:import 是cvs的敕令之一,表示向cvs仓库输入项目文件。 -m参数后面的字串是描述文本,随便写些故意义的器械,假如不加 -m 参

数,那么cvs会自动运行一个编辑器(一样平常是vi,然则可以经由过程改动情况变量EDITOR来改成你爱好用的编辑器。)让你输入信息,cvstest 是项目名称(实际上是仓库名,在CVS办事器上会存储在以这个名字命名的仓库里。)

v_0_0_1是这个分支的总标记。没啥用(或谓不常用。)

start 是每次 import 标识文件的输入层次的标记,没啥用。

这样我们就建立了一个CVS仓库了。

建立CVS仓库的文件夹应该是“干净”的文件夹,即只包括源码文件和描述的文件加,而不应该包括编译过的文件代码等!

三、应用CVS

winCVS是一个很好的CVS客户端软件,在http://cnpack.cosoft.org.cn/down/wincvsdailyguide.pdf可以下载到这个软件的应用手册。这里不在赘述了。

四、用CVS治理项目

本人正在一加公司从事该公司ERP项目的开拓,在没有应用CVS的时刻,多次呈现了因为不合的开拓职员改动同一法度榜样,而导致法度榜样差错,办理版本节制问题如饥似渴。

因为这个项目采纳Linux平台下JAVA开拓,应用的开拓对象Jbulider是支持CVS进行项目治理的,作为主法度榜样员,我抉择采纳CVS进行版本节制,首先参照上文在Linux办事器上建立了CVS办事,然后我把我本地的工程文件传至办事器。

例如:我的工程文件在F:ERP下,我把ERP下的erp.jpx文件、defaultroot文件夹和src文件夹上传至办事器/usr/local/erp下,然后登岸Linux办事器,登岸的用户是CVS的用户,其情况变量要精确(我的用户名为admin)

#cd /usr/local/erp

#cvs import -m "this is a ERP project" erpv_0_0_1start

这样名为erp的CVS仓库就建立了。

之后开拓小组的成员可以用winCVS把该项眼前目今载到本地:

打开winCVS

点击对象栏Create -> Create a new repository... 弹出窗口

在Grenral中

Enter the CVSROOT填写admin@192.168.1.9:/home/cvsroot 此中admin是cvs的用户,在本例中admin也是linux的系统用户,192.168.1.9是办事器的地址,/home/cvsroot是CVS的主目录,参考上文。

Authentication中选择"passwd file on the cvs server"

Use version中选择cvs 1.10 (Standard)

其它项默认即可。

确认后,点对象栏Admin --> Login... 会提示输入密码,输入密码后,看看winCvs的状态栏。假如提示

奸淫**CVS exited normally with code 0奸淫**

表示登录正常。

点击对象栏Create --> Checkout module...弹出对话框,此中的Checkout settings项中

Enter the module name and path on the server 填写erp,即我们建立的名为erp的CVS仓库

Local folder to checkout to 选摘要下载到本地的目录,我选了F:myerp

其它项目可以默认,确定后就可以下载到本地了,在F:myerp下会有一个erp文件夹,其文件布局和F:erp下的文件布局是一样的。

用Jbulider打开F:myerperp下的erp.jpx文件,这个工程文件就可以应用了。

在Jbuilder的对象栏Team --> Select Project VCS 弹出对话框,选择CVS

对付你要进行改动的文件,在Project View中点中该文件,然后点右键,探出快捷菜单,选择CVS --> CVS Edit "xxxx.java(文件名)"

第一次应用可能会提示CVS办事器的密码。

在改动之前还要选择CVS --> Update "xxxx.java(文件名)"

改动之后选择CVS --> Commit "xxxx.java(文件名)"

这样,改动的文件就保存到CVS办事器了,Update的目的是下载、对照文件。每次在改动之前都Update,维持最新版本。

CVS在项目治理应用中确凿起到了优越的效果,仔细钻研CVS的敕令,可以更好的发挥CVS在版本节制上的能力。

我的QQ是20896,迎接大年夜家来交流,也可以到我的论坛上评论争论 http://www.laoer.com

参考资料:《CVS 简单教程》 作者:何伟平

《CVS办事器快速指南》 作者:何伟平

您可能还会对下面的文章感兴趣: