CVS 的基本工作思路:在一台服务器上建立一个仓库,仓库里可以存放许多不同项目的源程序。由仓库管理员统一管理这些源程序,这样,就好象只有一个人在修改文件一样,避免了冲突,每个用户在使用仓库之前,首先要把仓库里的项目文件下载到本地。用户做的任何修改首先都是在本地进行,然后用 cvs 命令进行提交,由 cvs 仓库管理员统一修改。这样就可以做到跟踪文件变化,冲突控制等等。
一、CVS 服务器端
1、设置启动CVS服务
在/etc/xinetd.d目录下编辑cvs文件,如下内容:
service cvspserver
{
disable = no
port = 2401
socket_type = stream
protocol = tcp
wait = no
user = root
passenv = PATH
server = /usr/bin/cvs
env = HOME=/var/home/cvs
server_args = -f --allow-root=/project pserver
# bind = 127.0.0.1
}
注:
(1).pserver表示是口令认证的访问方式,这是最常用的方式,其他还有gserver,kserver,ext,如果想要更高的安全性可以使用ssh来加密口令和数据流,不过这里为了用户
使用的方便,仍然选的是pserver
(2).--allow-root是指定Repository(仓库)的目录,可以建立多个Repository
然后重新动xinetd:
[root@RH opt]# service xinetd restart
[root@RH opt]# netstat -l |grep cvspserver
注:xinetd rhel5默认没有安装,光盘里有
2、下载安装CVSACL:
通过如下网址可以下载到CVSACL相关程序,目前最新版本是cvsacl-1.2.5:
cvsacl-1.2.5-for-cvs-1.11.22.tar.gz //??干什么用的??
cvs-1.11.22-cvsacl-1.2.5-patched.tar.gz //用于给系统中的CVS打补丁。
安装:cvs-1.11.22-cvsacl-1.2.5-patched.tar.gz
[root@RH opt]# tar -zxvf cvs-1.11.22-cvsacl-1.2.5-patched.tar.gz
[root@RH opt]# cd cvs-1.11.22-cvsacl-1.2.5-patched
[root@RH cvs-1.11.22-cvsacl-1.2.5-patched]# ./configure
[root@RH cvs-1.11.22-cvsacl-1.2.5-patched]# make
[root@RH cvs-1.11.22-cvsacl-1.2.5-patched]# make install
如果显示以下内容表示安装成功
[root@RH opt]# cvs –version
Concurrent Versions System (CVS) 1.11.22 (client/server)
with CVSACL Patch 1.2.5 (cvsacl.sourceforge.net)
注:如果系统中已安装CVS,不必删除,直接安装CVSACL即可.
3、在CVS服务器端建立仓库
//创建用于CVS的专用系统组和用户,以后要访问CVS服务的用户加入cvs这个组:
[root@RH opt]# groupadd cvs
[root@RH opt]# useradd -g cvs -s /sbin/nologin cvsroot
[root@RH opt]# passwd cvsroot
//初始化cvs服务器环境
[root@RH opt]# mkdir /project
[root@RH opt]# cvs -d /project init
注:添加多个仓库后,记得修改/etc/xinetd.d/cvs文件
//其实就是cvs初始化cvs环境的命令,会在 /project目录下生成CVSROOT文件夹,但是安装了CVSACL后,使用此命令CVSROOT文件夹中生成的文件会和不安装CVSACL的文件有所区别,会增加几个文件,稍后会详细介绍这几个文件的作用.
Aclconfig
Access
aclconfig,v
//设置CVS配置库归属及权限:
[root@RH opt]# chown -R cvsroot.cvs /project
[root@RH opt]# chmod -R 770 /project
4、创建CVS用户
取消使用系统的组用户,使用CVS的组用户,具体操作
[root@localhost /]# vi /project/CVSROOT/aclconfig
UseSystemGroups=no
UseCVSGroup=yes
改为“SUseSystemGroups =no”,/etc/passwd里的用户将不再生效,需要给开发者在CVSROOT/passwd里逐一建立账号,新建的不要分配用户目录,因为它将作为一个虚拟用
户帐号来使用,具体命令如:
[root@RH doc]# useradd -g cvs -M xiajc
[root@RH doc]# passwd bogus
将系统的shadow文件复制到CVSROOT, 并重命名为passwd:
[root@RH ~]# cp /etc/shadow /project/CVSROOT/passwd
[root@RH ~]# chmod 0644 /project/CVSROOT/passwd
修改passwd文件,将除刚才设定的可使用CVS的用户xiajc之外的所有行删除,然后去掉每行第二个冒号以后的所有内容,并添上字符串cvsroot, 改为如下格式:
bogus:ND5$J8N9BW5DKV.nPdxfdsh:cvsroot
删除掉刚刚在系统中添加的那个用户xiajc:
[root@RH ~]# userdel -f xiajc
可以使用下面的脚本添加用户:
#!/bin/sh
cvspath=/project
chown -R cvsroot.cvs $cvspath
#mv cvsroot to CVSROOT/passwd
if [ "`grep "^cvsroot" $cvspath/CVSROOT/passwd`" = "" ]; then
grep "^cvsroot\>" /etc/shadow |awk -F ":" '{print $1 ":" $2 ":cvsroot"}' >>$cvspath/CVSROOT/passwd
fi
#add new user
echo -ne "Input the user name which you want to added: "
read user
if [ "`grep $user /etc/shadow`" != "" ] || [ "`grep $user $cvspath/CVSROOT/passwd`" != "" ]; then
echo "user exiest or it is a system user, you can not add it"
exit 1
else
/usr/sbin/useradd -g cvs -M $user
passwd $user
grep "$user\>" /etc/shadow |awk -F ":" '{print $1 ":" $2 ":cvsroot"}' >>$cvspath/CVSROOT/passwd
chmod 0644 $cvspath/CVSROOT/passwd
userdel -f $user
echo "user add successful"
fi
5、创建CVS组
在CVSROOT文件夹中创建group文件,并将cvs的用户添加到此组中
[root@RH CVSROOT]# touch /project/CVSROOT/group
[root@RH CVSROOT]# vi /project/CVSROOT/group
Group文件格式如下
group1:x:1: login_name1, login_name2, login_name3
login_name之间以”,”隔开
注:cvsacl有个bug,必须在组用户最前边添加一个不存在的cvs用户,group文件才会生效。即login_name1为一个不存在的cvs用户(没有在passwd文件中无此用户)
[root@RH opt]# chown -R cvsroot.cvs /project
[root@RH opt]# chmod -R 770 /project
6、 使用cvsacl细化权限:(可以针对用户,也可以针对组设置权限)
使用cvs -d racl 命令设置权限,命令执行成功后,会在屏幕中显示执行结果,并且会在access文件(就是我在”初始化cvs服务器环境”中提到的使用acl在CVSROOT中多出
来的3个文件之一)中记录用户对于指定目录的权限信息.
命令说明
1. 命令格式:cvs –d 配置库位置 racl [用户||组:权限] [-Rl] [-r tag] [模块…] [文件…]
2. 权限参数
权限 参数 说明
没有权限 n 用户不能做任何cvs操作
读权限 r 可以执行annotate, checkout, diff, export, log, rannotate, rdiff, rlog, status命令
写权限 w 可以执行commit/checkin命令
tag t 可以执行tag/rtag命令,依赖读权限
创建 c 可以执行add import 命令
删除 d 可以执行rm命令
全部权限 a 可以执行所有cvs命令处理cvsacl管理命令
管理权限 p 可以执行所有命令
3. 命令参数
- R 进行目录递归
- r rev 设定版本/标签
- l列出已定义的ACLs权限
4. 如果没有通过cvs -d racl指定用户或组对某个文件的权限,那么这个用户或组会对此目录具有最大权限( 只受文件本身属性限制)
因此在实际对CVS中的项目进行权限设置时,必须指定用户对每一个文件的权限.
5. 最后举个例子,以下命令会使test无权访问通讯程序/mm7_batch下的所有文件
[root@localhost CVSROOT]# cvs -d /home/cvsroot/pro3 racl test:n -R 通讯程序/mm7_batch
查看access文件会发权限设置信息,由于在命令中使用了-R(递归),你会发现,access对通讯程序/mm7_batch的每个目录都进行了权限设定.
[root@localhost CVSROOT]# vi access
# CVS ACL definitions file. DO NOT EDIT MANUALLY
具体的文件列表就不给大家看了,这可是公司机密:)
cvs -d /project racl qq:w -R cvstest 修改
cvs -d /project racl qq:wc -R cvstest 修改+创建
cvs -d /project racl qq:rw -R cvstest 报错
6、测试
新建个用户 qq
对项目cvstest赋权限,允许qq读,不允许写。
[root@RH project]# cvs -d /project racl qq:r -R cvstest
X cvstest
[root@RH CVSROOT]# cat /project/CVSROOT/access
# CVS ACL definitions file. DO NOT EDIT MANUALLY
d:cvstest:HEAD:qq!r:
使用wincvs登陆,修改这个cvstest下的文件,修改后为红色,提交时提示被拒绝,权限设置成功。
关于:建立多个仓库?
[root@RH ~]# mkdir ads
[root@RH ~]# mkdir camp
[root@RH ~]# cvs –d /project/ads init
[root@RH ~]# cvs –d /project/camp init
[root@RH ~]# chmod –R 770 /project
[root@RH ~]# vi /etc/xinetd.d/cvs
service cvspserver
{
disable = no
port = 2401
socket_type = stream
protocol = tcp
wait = no
user = root
passenv = PATH
server = /usr/bin/cvs
env = HOME=/var/cvs
server_args = -f --allow-root=/project/ads --allow-root=/project/camp pserver
# bind = 127.0.0.1
}
server_args= -f --allow-root=/home2/cvsroot/project1 --allow-root=/home2/cvsroot/project2
注:由于xinetd的server_args长度限制,当你想运行很多的单个仓库的时候,可以这么做:
[root@RH ~]# vi /etc/xinetd.d/cvs
service cvspserver
{
disable = no
port = 2401
socket_type = stream
protocol = tcp
wait = no
user = root
passenv = PATH
server = /project/cvs.run
# bind = 127.0.0.1
}
编写cvs.run脚本
#> vi /project/cvs.run
#!/bin/bash
/usr/bin/cvs -f
--allow-root=/project/ads
--allow-root=/project/camp
pserver
二、客户端的使用
wincvs
需要Python,TCL,也可从上面的网站下载,注意Python版本
装python时建议把html doc去掉
注:关于wincvs的一些设置的保存位置:注册表-Hkey_CURRENT_USER-software-wincvs,删除wincvs后需要清除wincvs的配置时删除即可。
建立文件夹D:\work
1、配置
管理-设置-普通-〉
验证方式选择:pserver
路径project
主机:192.168.7.251
用户:cvsroot(这是我开的帐户)
CVSROOT:项如下所示:
cvsroot@192.168.7.251:/project
CVS-HOME-〉填写:d:\work
2、更改本地工作目录
项目|模块 :默认是C:\
改变默认工作路径到D:\目录:点击第二栏菜单路径旁边的重
置,将工作路径更改到D:\work
3、登陆
管理-登陆-在提示框中输入口令,如果在Output窗口出现以下提示:
*****CVS exited normally with code 0*****
0就表示现在可以在Windows下使用cvs服务了。
4、添加项目到cvs中。
(1)建立一个新的CVS项目,比如叫 cvstest:
切换左下方的窗口到资源管理器栏目,选中包含你的源文件的目录,然后在菜单“远程”->”导入项目|模块”,把它导入CVS在文件过滤之后点击继续,在导入设置项中填
入如下几项,如:
目录文件名:cvstest (用于导出项目时填写)
开发商标记:avendor
版本标记:arelease
CVS客户端提示信息如下:
Filtering 'F:\cvstest'...
Filtering 'F:\cvstest'...
No conflicts created by this import
*****CVS exited normally with code 0*****
这样我们就建立了一个CVS仓库了,然后,我们可以把这个测试项目文件cvstest删除。试验一下如何从仓库获取文件。
(2)导出项目
菜单“远程”->”导出项目|模块”
服务器上的模块名和路径:cvstest
在“项目|模块”栏目里就会出现 cvstest这个项目了。现在可以在对项目源文件进行修改了。
5、修改与提交
当你修改了工作目录中的文件后,在wincvs里,你就可以看到这个文件变成红色了。有一个好习惯是,在你准备提交到服务器之前,先更新一下,因为有可能别的开发者在
你修改这个文件的同时,也可能也修改了这个文件,这就有可能会存在冲突,我们总是在提交前先处理冲突。
关于错误
cvs [login aborted]: unrecognized auth response from 192.168.7.223: cvs pserver: cannot open /project/ads/CVSROOT/config: Permission denied
查看是否启用了selinux
阅读(2069) | 评论(0) | 转发(0) |