根据网上各种文档整理而成.=号两边要空格的问题折磨了我好久.
1:安装
先检查是否安装CVS包
#>rpm -qa|grep cvs
没有安装的话,用下面2种方法安装
(1):在安装linux的时候可以选择安装CVS包
(2):另外下载CVS RPM包 自行安装
2:建立cvs用户和组
#> groupadd cvs
#> useradd -g cvs -G cvs –d /cvsroot cvsroot
#> passwd cvsroot
更改目录属性
chmod –R 770 /cvsroot
3:建立CVS服务
#more /etc/services | grep cvspserver
看看是否有
cvspserver 2401/tcp #CVS client/server operations
cvspserver 2401/udp #CVS client/server operations
如果没有需要到/etc/service文件中增加
建立#vi /etc/xinet.d/cvspserver 文件内容如下
service cvspserver
{
disable = no
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/bin/cvs
server_args = -f --allow-root=/cvsroot pserver
}
该文件有特别要注意的地方,所有=号两边都需要空一个空格,除了"root=/cvsroot" 所有要空格的地方,不要多加空格.否则会有CVS服务不能启动的问题
切换到cvsroot用户
#cvs -d /cvsroot init
然后重新启动xinetd服务或者重启动机器
#service xinetd restart
然后用
#netstat -l | grep cvspserver
or
#netstat -l | grep 2401
看是否有下面tcp 0 0 *:cvspserver *:* LISTEN
说明已经正常启动,没有的话请重新检查配置过程是否有错误或者遗漏。最后还必须检查防火墙的设置,把2401端口打开。
4:用户管理
CVS默认使用系统用户登录,所有系统用户都可以登陆,但是这样对系统不安全,我们需要独立的用户管理.CVS用户名和密码保存在CVSROOT目录下的passwd文件中.格式
用户名:密码:系统用户
#htpasswd passwd username
用来设置用户密码并保存到passwd文件中.
然后需要关闭系统用户登陆使用cvs的权限,CVSROOT目录下的config文件,把#SystemAuth=no的#去掉就可以了.
测试登陆
#cvs -d “:pserver:username@127.0.0.1:/cvsroot” login
ok
5 :源代码仓库的备份和移动
基本上,CVS的源代码仓库没有什么特别之处,完全可以用文件备份的方式进行备份。需要注意的只是,应该确认备份的过程中没有用户提交修改,具体的做法可以是停止CVS服务器或者使用锁等等。恢复时只需要把这些文件按原来的目录结构存放好,因为CVS的每一个模块都是单独的一个目录,与其他模块和目录没有任何瓜葛,相当方便。甚至只需要在仓库中删除一个目录或者文件,便可以删除该模块的一些内容,不过并不建议这么做,使用CVS的删除功能将会有一个历史记录,而对仓库的直接删除不留任何痕迹,这对项目管理是不利的。移动仓库与备份相似,只需要把该模块的目录移动到新的路径,便可以使用了。
如果不幸在备份之后有过一些修改并且执行了提交,当服务器出现问题需要恢复源代码仓库时,开发者提交新的修改就会出现版本不一致的错误。此时只需要把CVS相关的目录和文件删除,即可把新的修改提交。
6.更进一步的管理
CVSROOT目录下还有很多其他功能,其中最重要的就是modules文件。这个文件定义了源代码库的模块,下面是一个例子:
代码: |
Linux Linux
Kernel Linux/kernel |
这个文件的内容按行排列,每一行定义一个模块,首先是模块名,然后是模块路径,这是相对于CVS根目录的路径。它定义了两个模块,第一个是Linux模块,它位于Linux目录中,第二个是Kernel模块,这是Linux模块的子模块。
modules文件并非必须的,它的作用相当于一个索引,部分CVS客户端软件通过它可以快速找到相应的模块,比如WinCVS。
7.协同开发的问题
默认方式下,CVS允许多个用户编辑同一个文件,这对一个协作良好的团队来说不会有什么问题,因为多个开发者同时修改同一个文件的同一部分是不正常的,这在项目管理中就应该避免,出现这种情况说明项目组内部没有统一意见。而多个开发者修改文件的不同部分,CVS可以很好的管理。
如果觉得这种方式难以控制,CVS也提供了解决办法,可以使用cvs admin -l进行锁定,这样一个开发者正在做修改时CVS就不会允许其他用户checkout。这里顺便说明一下文件格式的问题,对于文本格式,CVS可以进行历史记录比较、版本合并等工作,而二进制文件不支持这个操作,比如word文档、图片等就应该以二进制方式提交。对于二进制方式,由于无法进行合并,在无法保证只有一个用户修改文件的情况下,建议使用加锁方式进行修改。必须注意的是,修改完毕记得解锁。
从1.6版本开始,CVS引入了监视的概念,这个功能可以让用户随时了解当前谁在修改文件,并且CVS可以自动发送邮件给每一个监视的用户告知最新的更新。
8.建立多个源代码仓库
如果需要管理多个开发组,而这些开发组之间不能互相访问,可以有2个办法:
a.共用一个端口,需要修改cvspserver文件,给server_args指定多个源代码路径,即多个—allow-root参数。由于xinetd的server_args长度有限制,可以在cvspserver文件中把服务器的设置重定向到另外一个文件,如:
代码: |
server = /home/cvsroot/cvs.run |
然后创建/home/cvsroot/cvs.run文件,该文件必须可执行,内容格式为:
代码: |
#!/bin/bash
/usr/bin/cvs -f \
--allow-root=/home/cvsroot/src1 \
--allow-root=/home/cvsroot/src2 \
pserver |
注意此时源代码仓库不再是/home/cvsroot,进行初始化的时候要分别对这两个仓库路径进行初始化,而不再对/home/cvsroot路径进行初始化。
b.采用不同的端口提供服务
重复第2步和第3步,为不同的源代码仓库创建不同服务名的启动脚本,并为这些服务名指定不同的端口,初始化时也必须分别进行初始化。