l Redhat 9.0
l 安装rpm包
rpm –i cvs- 1.11.18 -cvshome.org.FC1.1.i386.rpm
l 首先创建用于CVS的组和用户:
#groupadd cvs
#useradd cvsroot -g cvs
#passwd cvsroot
l 修改配置文件:
#more /etc/services | grep cvspserver
看看是否有:
cvspserver
2401/tcp #CVS client/server operations
cvspserver
2401/udp #CVS client/server operations
这2行。系统自带了CVS时,这2行也已经有了,只需要确认一下。如果没有,请自己加上去。然后必须创建启动脚本:
#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=/home/cvsroot --allow-root=/var/src/cvs pserver
log_on_success += USERID
log_on_failure += USERID
}
其中server指定CVS可执行文件路径,默认安装就是/usr/bin/cvs。server_args指定源代码库路径及认证方式等,例子中创建了两个仓库,一个为/home/cvsroot(作为测试用)一个为/var/src/cvs,也可以另外指定路径,但必须注意权限设置,pserver是密码认证方式,这种方式的安全性要差一些,但操作起来比较简单。请注意每行等号左右都有一个空格,否则无法启动服务。
l 初始化一个仓库
切换到cvsroot用户,然后进行初始化:
#cvs -d /var/src/cvs init
这个路径应该与cvspserver文件中指定的路径相同,初始化后会在此路径下面创建CVSROOT目录,存放用于CVS管理的一些文件。此时重新启动xinetd服务,CVS服务器应该能够启动了。:
#service
xinetd restart
当然,重新启动计算机也可以。确认是否启动:
#netstat -l | grep cvspserver
如果能看到:
tcp 0 0 *::cvspserver *::* LISTEN
说明已经正常启动,没有的话请重新检查配置过程是否有错误或者遗漏。最后还必须检查防火墙的设置,把2401端口打开。
l 用户管理(在系统安装有cvstrac的时候,系统的用户由cvstrac接管,下面的这些步骤就不需要了)
CVS默认使用系统用户登录,为了系统安全性的考虑也可以使用独立的用户管理。CVS用户名和密码保存在CVSROOT目录下的passwd文件中,格式为:
用户名::密码::系统用户
也就是说,它把CVS用户映射到系统用户,这样我们就可以通过系统用户的权限设置来分配给用户不同的权限,而不需要让用户知道系统用户名和密码。 passwd文件默认并不存在,我们必须自己创建。文件中的密码字段使用MD5加密,不幸的是CVS没有提供添加用户名的命令,所以我们借用Apache的命令来完成这项工作:
#htpasswd passwd username
这个命令为username指定密码,并保存在passwd中,文件不存在时会自动创建。htpasswd命令不是为CVS而设,因此总有一些遗憾,它不能自动添加映射到的用户名,不过没关系,我们设置好密码后,自己把这部分加上。我的做法是映射到cvsroot用户,如果需要映射其他的用户,请注意给相应的目录设置好权限,否则CVS用户可能无法访问源代码仓库。要彻底防止使用系统帐号登陆,可以编辑CVSROOT目录下的config文件,把:
#SystemAuth=no
这一行前面的#去掉,CVS就不会验证系统用户了,否则当用户名不在passwd文件中时,CVS会进行系统用户的验证。此外还必须配置读写权限,使用CVSROOT目录下的readers和writers文件进行这个工作。这2个文件默认也是没有的,没关系,自己创建就可以了。readers文件记录拥有只读权限的用户名,每行一个用户;writers文件记录拥有读写权限的用户名,也是每行一个用户。注意, readers文件比writers优先,也就是说出现在readers中的用户将会是只读的,不管writers文件中是否存在该用户。配置完毕,先测试一下:
#cvs -d “::pserver::[email protected]::/var/src/cvs” login
这里假设用户名是username,本机登陆。出现密码提示,输入正确的密码后,登陆成功。如果提示访问被拒绝,请检查用户权限、目录权限以及防火墙设置。建议设置环境变量CVSROOT:
#export CVSROOT=::pserver::[email protected]::/var/src/cvs
以后就不需要输入-d参数了,但-d参数会覆盖这个环境变量的设置。
l 安装tcl832.exe
l 安装wincvs
l 配置参见wincvs安装后的手册
(1)tar xvzf cvsweb- 3.0.5 .tar.gz
(2)拷贝cvsweb.cgi至/var/www/cgi-bin/目录下
(3)添加httpd.conf如下:
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
<Location /cgi-bin/cvsweb.cgi>
# See also $charset in cvsweb.conf.
AddDefaultCharset UTF-8
# mod_perl >= 1.99:
<IfModule mod_perl.c>
SetHandler perl-script
PerlResponseHandler ModPerl::Registry
PerlOptions +ParseHeaders
Options ExecCGI
</IfModule>
AuthName "CVS Authorization"
AuthType Basic
AuthUserFile /var/src/cvs/CVSROOT/passwd
require valid-user
#mod_perl < 1.99:
# TODO
</Location>
(4)由于cvsweb.cgi中的cvsweb.conf的路径指向/usr/local/etc/cvsweb,所以拷贝cvsweb.conf至/usr/local/etc/cvsweb目录下。
(5)转到/usr/local/etc/cvsweb/下并修改cvsweb.conf:
1. 修改CVSROOT路径设置:
%CVSROOT = (
'Development' => '/path/to/cvsroot', #<==修改指向本地的CVSROOT
);
2. 缺省不显示已经删除的文档:
"hideattic" => "1",#<==缺省不显示已经删除的文档
3. 在配置文件cvsweb.conf中还可以定制页头的描述信息,你可以修改$long_intro成你需要的文字
(6)CVSWEB可不能随便开放给所有用户,因此需要使用WEB用户认证:
先生成 passwd(/path/to/apache/bin/htpasswd -c cvsweb.passwd user
修改httpd.conf: 增加
<Directory "/path/to/apache/cgi-bin/cvsweb/">
AuthName "CVS Authorization"
AuthType Basic
AuthUserFile /path/to/cvsweb.passwd
require valid-user
</Directory>
注:可以直接使用cvs用户的passwd,如(3)所示,不需要再生成。
(1)sqlite- 2.8.16 .tar.gz(cvstrac所用数据库需要的库)
Tar xvzf sqlite- 2.8.16 .tar.gz
./configure
Make install
(2)cvstrac_ 1.1.5 _src_cn_20050115.tar.gz
tar xvzf cvstrac_ 1.1.5 _src_cn_20050115.tar.gz
规划将cvstrac安装到/usr/local/bin目录下, cd /解压path/cvstrac编辑linux-gcc.mk:
修改:
SRCDIR = /解压path/cvstrac
INSTALLDIR = /usr/local/bin
然后
mv linux-gcc.mk Makefile
make
make install
(3)初始化cvstrac数据库:假设数据库名是 myproj
在已经装好的CVS服务器上(CVS库这时候应该已经是初始化好了,比如:cvs init初始化在/var/src/cvs里),运行一下
cvstrac init /var/src/cvs myproj
运行后,/var/src/cvs里会有一个的myproj.db库,使用CVSTRAC服务,/var/src/cvs /myproj.db /var/src/cvs /CVSROOT/readers /var/src/cvs /CVSROOT/writers /var/src/cvs /CVSROOT/passwd这几个文件对于web服务的运行用户应该是可写的,在RedHat9上,在httpd.conf文件中设置了用cvsroot用户运行web服务:
User cvsroot
Group cvs
然后设置属于cvsroot用户和cvs组
#chown -R cvsroot:cvs /var/src/cvs
此外还在/var/src/cvs/CVSROOT中设置了:
chmod 664 readers writers passwd
(4)在/var/www/cgi-bin目录中创建脚本cvstrac:
#!/bin/sh
/usr/bin/cvstrac cgi /var/src/cvs
设置脚本可执行:
chmod +x /var/www/cgi-bin/cvstrac
(5) 从 http://cvs.server.address/cgi-bin/cvstrac/myproj/ 进入管理界面
缺省登录名:setup 密码 setup
对于一般用户可以从:
http://cvs.server.address/cgi-bin/cvstrac/myproj/
(6) 在setup中重新设置了CVSROOT的路径后,/var/src/cvs/cvsroot
如果是初次使用需要在/var/src/cvs/CVSROOT下创建passwd, readers, writers文件
touch passwd readers writers
然后设置属于cvsroot用户,
chown cvsroot.cvs passwd readers writers
这样使用setup用户创建新用户后会同步更新CVSROOT/passwd下的帐号
似乎后面的cvs版本自己会自动创建passwd
(7)对于前面提到的WinCVS在perference里设置:
CVSROOT栏输入:[email protected]:/var/src/cvs
Authenitication选择:use passwd file on server side
就可以了从服务器上进行CVS操作了。
你可以使用“tag -b”去建立一个分支。例如,假定你在工作于一个工作拷贝中:
$cvs tag -b rel_1_0_patches
这将基于当前的拷贝分离出一个分支,并分配“rel_1_0_patches”的名字。
懂得分支是在CVS仓库中创建,而非在工作拷贝中创建的是非常重要的。正上面的例
子,创建一个基于当前版本的分支不会自动把当前的工作拷贝转到新的分支上。欲知
详情,请看进入一个分支。你也可以不参考任何工作拷贝而建立一个分支。
你可以使用rtag命令:
cvs rtag -b -r rel-1-0 rel-1-0-patches tc.
“-r rel-1 -0” 说明这个分支是基于标志了rel-1-0的版本文件,它不是从最新的版本
开始分支.这对需要从老的版本进行分支很有用(例如:当修订一个过去的稳定版本时)
当使用“tag”标志,这个“-b”标志告诉rtag去创建一个分支(而非是这个版本的符号
连接)。注意标记“rel-1 -0” 可能对不同的文件有不同的版本数字。因此,这个命令的结果
是为tc模块建立了一个命名为“rel-1-0-patches”的新版本分支,它是基于标记为“rel-1 -0”
的版本树。
你可以通过两种方式进入分支:重新checkout或是从现存的拷贝进入。重新checkout使用
checkout命令并带上“-r”标识,后面是这个分支的标笺(tag)名。(请看5.2[创建一个分支]):
$cvs checkout -r rel-1-0-patches tc.
或者如果你已有了一个拷贝,你可以使用“update -r”命令转到这个分支。
$cvs update -r rel-1-0-patches tc.
或者使用另一个等同的命令:
$cd tc
$cvs update -r rel-1-0-patches
这对现有拷贝为主干代码或是其它分支都是有效的.上面的命令将把它转到命
名的分支。同“update”命令相类似。“update -r”合并你所做的任何改变,请注
意是否有冲突出现。
一但你的工作拷贝已经转向一个特定的分支。它将一直保持在这个分支内,除非你
又做了其它的操作。这意味着从这个工作拷贝checkin的变更将加到这个分支的新版
本中,而不影响到主干版本和其它分支代码。
想看一个工作拷贝是基于哪一个分支,可以使用“status”命令。在它们输出中查找。
如果使用命令
cvs import dir ujs release1_0 (ujs为vendor名称 release1_0为当时的tag)
这个命令默认在主干中还创建了一个 1.1.1 (命名为ujs)的分支版本,其所有1.1.1.1的文件有一个符号连接为release1_0。
如果主干认为这些错误修改在2.0里也需要,也可以在主干的开发目录下合并release_1_0_patch_1中的修改到当前代码中:
cvs update -j release_1_0_patch_1
如果工作目录在某个分支下面,则可以使用
cvs update -A' 命令来去掉粘性标签。`-A' 选项将把本地的改变合并进树干顶部的文件,并且忽略中间的任何粘性标签。(即忽略其他分支情况)。
1 cvs中文手册:http://www.soforge.com/cvsdoc/zh_CN/index.html
2 原cvs官方网站:http://www.cvshome.org
3 wincvs中文版 下载http://www.8848software.com/wincvs/
4 cvs的替代:http://subversion.tigris.org
5 cvstrac官方: http://www.cvstrac.org
6 cnpack: http://www.cnpack.org/
7 cvsweb: http://www.freebsd.org/projects/cvsweb.html