第1章 CVS工具的安装配置
1.1 基本安装
1.1.1 验证是否已安装CVS
#rpm -q cvs
如果能显示出类似这样的版本信息,证明已安装CVS:
#cvs-1.11.2-10
一般安装在/usr/bin/cvs,如果未安装,http://www.cvshome.org/下载一个最新的rpm安装即可。
1.1.2 CVS安装
从http://ccvs.cvshome.org/servlets/ProjectDownloadList下载最新的cvs安装包到本地后:
%gunzip cvs-1.11.2.tar.gz
%tar xvf cvs-1.11.2.tar
%cd cvs-1.11.2
%./configure (可以用./configure --help看看,根据自己的环境添加相应的参数)
%make
%su - (以正确的用户来安装)
%make install
1.2 CVS Server端的配置
安装完CVS(假设cvs安装在/usr/local/bin)后:
1.2.1 建立cvsroot用户和组(使cvsroot用户属于cvs组,用于对cvs进行管理)
root用户下执行以下命令:
#groupadd cvs
#adduser cvsroot –g cvs –d /root/cvsroot
#passwd cvsroot
#输入cvsroot用户密码
1.2.2 创建cvsroot
建立用户使用的HOME目录并将HOME目录的属性给cvsroot:
#mkdir /root/cvsroot
#chgrp –R cvs /root/cvsroot
#chown –R cvsroot /root/cvsroot
1.2.3 初始化CVS
需要在cvsroot用户下执行
#su – cvsroot
初始化CVS服务器的根目录,以后创建的CVS项目都将建立在这个目录下,采用的命令如下:
#cvs -d /root/cvsroot init
这样目录/root/cvsroot就成为CVS服务器的根目录,以后创建的目录都将默认的存放在这个目录下。
1.2.4 设置环境变量
使用cvsroot用户登录,在这个用户下的.bash_profile环境配置文件,在这个文件中增加
CVSROOT=/var/cvsroot
export CVSROOT
1.2.5 启动CVS服务
在/etc/xinetd.d/目录下创建文件cvspserver,内容如下:
# default: on
# description: The cvs server sessions;
service cvspserver
{
socket_type = stream
wait = no
user = root
server = /usr/bin/cvs
server_args = -f --allow-root=/var/cvsroot pserver
log_on_failure += USERID
only_from = 216.245.143.71/24
}
其中only_from是用来限制访问的,可以根据实际情况不要或者修改。 注意:如果路径/var/cvsroot与上面创建的不一致,或者为/var/cvsroot/,将出现no
such repository问题。
修改该文件权限:
# chmod 644 cvspserver
然后重新启动xinetd:
# /etc/rc.d/init.d/xinetd restart
然后察看cvs服务器是否已经运行:
# netstat -lnp|grep 2401
tcp 0 0 0.0.0.0:2401 0.0.0.0:* LISTEN xxxxxx/xinetd 或 #netstat
-l |grep cvspserver
tcp 0 0 *:cvspserver *:* LISTEN
则说明cvs服务器已经运行。
1.2.6 配置cvs环境
在 cvs 管理员用户的HOME目录里有一个 CVSROOT 目录,这个目录里有三个配置文件,passwd, readers,
writers,可以通过设置这三个文件来配置 CVS 服务器,下面分别介绍这几个文件的作用:
passwd:cvs 用户的用户列表文件,它的格式很象 shadow 文件:
{cvs 用户名}:[加密的口令]:[等效系统用户名]
readers:有 cvs 读权限的用户列表文件。就是一个一维列表。在这个文件中的用户对 cvs只有读权限。
writers:有 cvs 写权限的用户的列表文件。和 readers 一样,是一个一维列表。在这个文件中的用户对 cvs 有写权限。
注意:如果用户同时在readers和writers文件存在,则这个用户只有read的权限而没有write的权限。
1、创建可以登陆cvs服务的用户及密码,需要创建文件passwd
vi /root/cvsroot/CVSROOT/passwd
文件内容如下:
smilings:xxxxx:cvsroot
chenxu:xxxxx:cvsroot
此文件的意思是smilings和chenxu两个用户可以登陆cvs服务器,登陆后其权限为用户cvsroot的权限
注意:cvs用户和服务器用户是可以不一样的
2、xxxxxx为密码,由以下文件生成:
vi /var/cvsroot/passwdgen.pl
文件内容:
#!/usr/bin/perl
srand (time());
my $randletter = "(int (rand (26)) + (int (rand (1) + .5)
% 2 ? 65 : 97))";
my $salt = sprintf ("%c%c", eval $randletter, eval $randletter);
my $plaintext = shift;
my $crypttext = crypt ($plaintext, $salt);
print "${crypttext}\n";
3、修改passwdgen.pl为可执行
#chmod +x passwdgen.pl
如果需要密码为:smilings,则敲入:
passwdgen.pl "smilings"
回车即可得到加密密码,用其替换passwd文件中的xxxxxx
4、编辑 writers 文件,加入下面几行:
smilings
chenxu
注:passwd文件的格式是:
以“:”为分隔,分为三部分:
- 第一部分是cvs帐号名(与系统帐号无关,也可与系统帐号名相同)
- 第二部分(可选项)是加密串,每个系统用户的加密串缺省是在/etc/shadow中,如果cvs帐号不是操作系统的帐号,shadow中是不会有cvs帐号的加密串的,这时就必须手工为cvs帐号生成加密串,可以将其他系统帐号的密码修改成想要的密码(此时shadow文件的加密
串跟着改变),在取得加密串后改回去。当第二部分置空时,该帐号以任何口令均可登入cvs server
- 第三部分(可选项)是一个操作系统帐号, 如果登陆成功, cvs用户就以此系统帐号的身份存取cvs中的源代码,这里的系统帐号是cvs权限控制的关键,
这个系统帐号有什么权限, 以此帐号身份存取cvs的cvs用户就有相同的权限.。注意: 考虑到cvs用户是以某个系统帐号的身份运行的,
此系统帐号应当对repository下的相应目录有写的权限, 这样就存在直接进入目录对文件进行修改的可能, 而这是cvs操作所不允许的,为了避免这种误操作,
建议在产生此系统帐号时使其shell为/bin/false, 并且不设置此帐号的密码,这样可以禁止直接以此系统帐号telnet或者ftp进入CVS
Server。
另外,passwd文件中的用户不能重名,否则只有第一个有效。
1.3 CVS Client端的配置
1.3.1 Unix/Linux环境下
CVS服务器正确安装置后,就可以设置Client端来操作了。
设置方法是:将环境变量增加到.profile/bash_profile中:
export CVSROOT=:pserver: smilings@216.245.143.71:/root/cvsroot
%cvs login 系统将提示输入CVS口令
口令认证通过后,就可以进行CVS的操作了。
1.3.2 Windows环境下
在http://www.wincvs.org下载最新wincvs软件并安装。
设置环境CVSROOT变量:
运行wincvs,从界面菜单处,选择admin --> preference --> General -->设置CVSROOT为::pserver:a@216.245.143.71:/root/cvsroot
其中的a为用户的CVS帐号,@后面是CVS服务器的IP地址。
当cvs server的端口不是缺省的2401时,需要在
admin --> preference --> Ports -->设置For "pserver"(passwd)
port为定义的值。
第2章 CVS的基本操作
2.1 Unix/Linux环境下的操作说明
(1) 登录CVS Server
%cvs login
CVS password: ******
注: 如果此时提示.cvspass文件不存在,只要手工创建一个即可: %touch .cvspass
(2) 查看帮助
% cvs --help
%cvs –help-options
%cvs –help-commands
(3) 检取源代码(将CVS服务器端的源代码下载到本地。则本地上的内容为服务器端的一个拷贝)
cvs co [-r tagname/revision] filename|directory
例:%cvs co -r aiobs61_dev products/aiobs/aiip
%cvs co [–D “1 Dec 2002”/2002-12-1/”1 Dec 20:22”] file1
(4) 增加文件或目录到CVS 库中
$ cvs add filename|directory
(5) 提交文件
%cvs ci [-r revision] [ -m”add new functions”] [filename]
增加文件后,需要再执行cvs ci命令,才能完成永久提交。
增加目录后,则不需要再另外执行cvs ci 命令了。
(6) 更新当前工作目录中的文件
%cvs update [-d] [filename]
-d: 取出新增加的目录 = cvs co
(7) 查看文件历史记录
%cvs log [filename]
将给出文件的所有修改记录,版本信息,修改人, 修改时间及更改说明等。
(8) 比较文件
%cvs diff filename
cvs diff可以用来比较本地工作目录和server上的文件,也可以用来比较文件的两个版本之间的差异,实现的是按行比较。对二进制文件则无效。
%cvs diff –r aiobs filename
比较本地和另外一个分支上(分支Tag为aiobs)的文件差异
%cvs diff -D 2002-1-3 -r cbs_rm ora.sql
比较某个日期与某个分支下的文件差异
(9) 显示文件的当前状态
$cvs status filename
常见三种状态:Up-to-date, Need-patch, Locally Modified
Up-to-date:表示该文件已经与CVS服务器端的最新版本是一致的
Need-patch:表示该文件的本地版本低于服务器端的最新版本,需要从服务器端下载更新的版本
Locally Modified:表示该文件在本地已经做过修改了,但还没有提交到服务器上
(10) 删除文件------分三步
%rm filename (先从工作目录中删除)
%cvs remove filename (从CVS中删除)
%cvs commit filename (永久删除)
(11) 删除目录
首先将目录中的所有文件从cvs中删除
% cd ..
% cvs update –p
-p: 告诉update从工作目录中删除这些空目录
即删除了目录下的所有文件,则CVS认为该目录已经被删除了
(12) 给产品/模块打tag
相当给产品或者模块做一个标签或快照
cvs rtag tagname products/module
或 cvs tag tagname products/module
以上两个命令功能相似,区别在于rtag直接到CVS服务器端为源代码加Tag,而使用cvs tag命令则需要事先把源代码checkout到本地。
(13) 建立分支
cvs rtag –b tagname products/module
或cvs tag –b tagname products/module
建立分支常用于程序bug的跟踪、修复。执行cvs tag/rtag命令时,如果使用-b参数,则表示该Tag是一个分支Tag,用户使用这个Tag可以对程序进行修改和提交。而如(12)中建立的普通Tag则只能做查询用。
2.2 Windows环境下的操作说明
(1) 运行wincvs程序
第一次运行时,在界面上弹出“wincvs preferences” 对话窗,以后进入时,通过选中菜单Admin--->preferences,可进入wincvs参数配置对话窗),
设置如下:
在general页中设置CVSROOT 为:
:pserver:username@hostname:/root/cvsroot,
username是访问cvs的用户名及其密码,由CVS 管理员提供。
- 设置Authentication为: "passwd" file on the cvs server
- 如果不希望删除空目录,在Globals页面中去掉"Prune (remove) empty directories"
选项, 并同时去掉此页中的 “ chekcout readonly”.在WinCvs页中,设置"HOME folder"为自己的工作目录,如:
E:\work
(2) 在图标栏选中“change location”图标(在目录下拉框的右边)改变缺省工作目录为:E:\work
(3) checkout某个module到本地
选中admin--->login,输入PASSWD
选中create--->checkout module....将弹出的对话框,在checkout settings页中,
设置module name 如: products/aiobs63/testcase,设置local folder to checkout
to: 为E:\work, 在”checkout options”页中可以设置根据日期(通过选中by date 日期格式为:YYYY-MM-DD
Hour:Mins) 或者版本号(通过选中by revision/tag/branch)来checkout module,点击"确定"即可将testcase目录下的全部文件check
out出来。
(4) 增加某个已有的module(目录)到CVS服务器中
- 选中create--->import module-选择一个需要checkin的目录
(例如 E:\work\products\aiobs63\testcase)在Import setting页中设置 “select
module name and path in the remote server“ ,输入你需要提交的位置例如: product/aiobs63/testcase,在vendor
tag 和release tag中加入相应的标签, 在“Enter the log message”框内输入日志, 点击确定
- 增加add
Modify---> add selection
- 提交commit
(5) checkin 某个文件
运行wincvs程序,在右边的文件列表框中,选择需要check in的文件名-点右键- 选择“commit selection"-在commit
setting中的”enter the log message”输入修改日志-确认。
(6) checkout某个文件
运行wincvs程序,在右边的文件列表框中,选择需要check out的文件名-点右键- 选择“update selection"-在”stick
options”页中可以设置根据日期(通过选中”before date” 日期格式为:YYYY-MM-DD Hour:Mins)或者版本号(通过选中revision/tag/branch)来checkout
文件。
(7) 如何打tag
注意: 为了便于产品管理,公司软件产品的tag都是由Build Master打的。
- 对module打tag:选中module(通过wincvs界面中间部分左边地module页)然后选择create--create
tag by modules,在create tag settings中输入tag名和module 名.
- 对文件打tag:选中需要打tag地文件,选择modify-create a tag on selection在enter
the tag name to create中输入tag名
(8) 如何将本地新文档checkin到CVS
选中新文档,选择modify-add selection,如果是NONCVS FILE(在文件status栏出现), 则会出现警告,此时应选择modify--add
selection binary(以二进制方式add)。 然后选择modify-commit selection将文件提交到CVS库中。
(9) CVSlog修改日志
在每次文档修改时,请按照下列内容,记录修改日志
修改主题:
修改章节:
修改人:
修改时间:
这些信息将被写入wincvs的cvslog中
|