UML软件工程组织

 

 

CVS安装配置与使用指南
 
作者:Smilings 出处:CSDN
 

第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中

 

组织简介 | 联系我们 |   Copyright 2002 ®  UML软件工程组织 京ICP备10020922号

京公海网安备110108001071号