【转】linux下cvs配置

时间:2023-03-10 00:39:39
【转】linux下cvs配置

1、  验证是否已安装CVS

#rpm -q cvs

如果能显示出类似这样的版本信息,证明已安装CVS:

#cvs-1.11.19

若没有安装信息,则需要从htttp://www.cvshome.org 下载相应的安装包

我的安装环境是 linux as4 u2

若不想使用自带版本,可以用

#rpm–e cvs

删除自系统自带的cvs 安装包

从htttp://www.cvshome.org获取最新的安装包cvs-1.11.21.tar.gz

解压该包并安装:

# tar zxvf cvs-1.11.21.tar.gz

进入解压包 cvs-1.11.21

# ./configure–prefix =你的安装目录 &&make &&make install

2、  创建CVS用户组与用户

root用户下执行以下命令:

#groupaddcvs   //对比cvsnt:此处生成的是一个linux的系统用户组(因为Linux下的CVSROOT中不支持group文件),记录在系统文件/etc/group中; 而cvsnt里的group文件是专门为cvs建立组的,与pc系统的组是不相干的。

#addusercvsroot  //对比cvsnt:此处生成的是一个linux系统用户cvsroot, 记录在系统文件/etc/passwd中。

#passwd cvsroot  

#输入cvsroot用户密码

3、创建一个目录作为cvs库

root用户下执行:

#mkdir /cvsroot  //此处可改为你想要的cvs库的路径,如想在/home目录下mkdir一个目录作为库,则改命令为:#mkdir /home/cvsroot。

#chowncvsroot.cvs/cvsroot   //将即将成为库的目录/cvsroot的拥有者改为用户cvsroot

4、初始化CVS仓库 (自动生成CVSROOT)

需要在cvsroot用户下执行

#su - cvsroot

#cvs -d/cvsrootinit   //初始化后,目录/cvsroot正是成为一个cvs库,其下自动生成了一个子目录CVSROOT,用于存放库的配置文件。 后面对/etc/xinetd.d/cvspserver文件的配置要与这里对应,即要注意库的根目录必需与这里的一致(即为/cvsroot)。

5、修改环境变量CVSROOT

编辑/etc/profile或者/home下相应用户的.profile文件

此处以修改/etc/profile为例:

#exit

退回到root用户,只有root用户才有权限修改/etc/profile

#vi /etc/profile 编辑/etc/profile文件

在末尾加上以下两句:

CVSROOT=/cvsroot  //将环境变量CVSROOT的值设置为库的根目录/cvsroot

export CVSROOT   //使用export使环境变量CVSROOT生效

也可以直接用命令:

$ export CVSROOT=/cvsroot

更新环境变量:

#source /etc/profile

此时系统已经认识$CVSROOT这样的环境变量

6、加入&启动cvs服务:

一般的redhat上缺省就有cvs服务,所以不用加。可以先查看/etc/services文件,没有的话,就编辑它:

vi /etc/services

在末尾加入两行内容:

cvspserver 2401/tcp #pserver cvs service

cvspserver 2401/udp #pserver cvs service

在系统中加入了cvs服务后,接下来就要启动它了

一般cvs服务由inted或者xinetd来唤起,因此需要修改inetd或者xinetd提供的服务。

  • 如果你的redhat使用的是inetd方式,则编辑文件/etc/inetd.conf(在Debian或redhat7.3以下一般都是采用inetd方式):

#vi /etc/init.d/inet.conf

在其中加入以下内容:

cvspserver 2401 stream tcp nowait root /usr/bin/cvs cvs -f --allow-root=/cvsroot pserver

  • redhat7.3以上使用的是xinetd方式,在/etc/xinetd.d/目录下创建文件cvspserver,内容如下:

# default: on

# descrīption: The cvs server sessions;

service cvspserver

{

disable = no

socket_type = stream

wait = no

user = root

server = /usr/bin/cvs

// /usr/bin/cvs是cvs命令文件的位置。若删除了系统自带的cvs安装包,则server=你的cvs安装目录/bin/cvs

server_args = -f --allow-root=/cvsrootpserver

//对应第4步cvs -d/cvsrootinit命令

only_from = 192.168.10.0/24

// 24是子网掩码的长度,对应255.255.255.0。only_from是用来限制访问的,可以根据实际情况不要或者修改。

}

启动CVS服务后,要修改该cvspserver文件的权限,以防别的用户乱改:

# 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

则说明cvs服务器已经运行。

7、建立cvs用户

为了CVS系统的安全,我们要修改/cvsroot/CVSROOT/config文件,将"#SystemAuth =no"的前而的注释号#去掉,即改为“SystemAuth =no”,然后给开发者们逐一建立账号,新建的不要分配用户目录,因为它将作为一个虚拟用户帐号来使用,具体命令如:

以下,对应cvsnt:创建CVSROOT目录下的passwd文档:

------------------------------------------------------------------

  [root@terry root]# chmod -R ug+rwx /cvsroot      //修改库的访问权限:对属主及属主的组开放rwx权限

  [root@terry root]# chmod 644 /cvsroot/CVSROOT/config     //库的配置文件config只能被属主修改

以下,对应cvsnt:添加一个名为gaoshang的用户到passwd文件中。

   比起在cvsnt,在linux下的这个添加过程要麻烦多了!

--------------------------------------------------

  [root@terry root]# useradd -g cvs -M gaoshang      //创建这个pc系统用户gaoshang的目的是利用它生成密钥,因为在linux下cvs没有为用户加密的功能,不像cvsnt可以直接用命令passwd -a就可以生成一个用户与密钥了。

  [root@terry root]# passwd gaoshang

上面的命令就创建了一个并没有Home目录的用户gaoshang,接着将系统的shadow文件(shadow文件中记录了系统的用户及其密钥信息)复制到CVSROOT, 并重命名为passwd,操作如下:

  [root@terry root]# cp /etc/shadow /cvsroot/CVSROOT/passwd

  [root@terry root]# chmod 0644 /cvsroot/CVSROOT/passwd

  然后修改passwd文件,将除刚才设定的可使用CVS的用户cvsroot及gaoshang之外的所有行删除,然后去掉每行第二个冒号以后的所有内容,并添上字符串cvsroot, 改为如下格式:

  [root@test11 CVSROOT]# more passwd

cvsroot:$h3ntACe9$cM2SADto6B9P5h5Wrbgyi.:cvsroot

gaoshang:ttSJv9AK.zzZhhHLEQZnZPgEe8f1:cvsroot

  然后,删除掉刚刚在系统中添加的那个用户gaoshang:

  [root@terry root]# userdel -f gaoshang   //因为gaoshang这个系统用户只是用来为cvs用户gaoshang的密码生成密钥的,所以,密钥得到后,系统用户gaoshang可以删除了。

---------------------------------------------------

至此,passwd文件已经创建好了,并且已经有两个cvs用户加入其中了:cvsroot与gaoshang,其中cvsroot还是pc系统用户,而gaoshang只是cvs用户,它必须对应到一个系统用户,这里它对应的是cvsroot。

-------------------------------------------------------------------

好了,至此,CVS服务器端已配置完成。这时你的CVS用户就只能用passwd中规定的用户来登陆你的CVS服务器了。

8 .为用户分配权限

对比cvsnt:在cvsnt中,可以用命令cvs chown来修改某个目录的属主,用命令cvs chacl来设置某个cvs用户/组对一个目录的访问权限; 可以在CVSROOT下创建admin文件来设置库的管理员,创建group文件来设立不同的组。 

而在linux下,cvs不支持group与admin文件,也不支持cvs chacl命令,所以就只能用系统命令:chown 与 chmod 对pc系统用户的访问权限进行设置,之后,映射到这个系统用户的cvs用户的权限也就跟着改变了(这一点与cvsnt很不一样,在cvsnt中:cvs用户与pc系统用户的权限是不相干的,映射只是为了登陆,而权限不会也跟着映射过来的); 在linux下,cvs还是支持readers、writers文件的,所以也可以通过修改它们来修改用户的权限不过这个权限是对整个库的访问权限。

在/cvsroot/CVSROOT/下 ,加入两个文件 readers , writers

将只有只读权限的用户加入 readers 文件,

将具有读写权限的用户加入writers 文件。

如:# vi writers

gaoshang

注意:readers文件的优先性高于writers文件的,也就是说,如果将同一个用户都加在这两个文件中,那这个用户只拥有只读权,并不拥有写权。

所以:writers中的用户不能在readers中,要不然不能上传更新文件。

9、linux客户端登录测试 (或见 window cvs客户端 wincvs 1.3的使用说明)

假定cvs服务器在192.168.10.11上,系统上有用户cvsroot和gaoshang。登陆另一台linux机器,执行下列命令可以完成测试:

[root@test2 test]# export CVSROOT=:pserver:cvsroot@192.168.10.11:2401/cvsroot

[root@test2 test]# cvs login

Logging in to:pserver:cvsroot@192.168.10.11:2401/cvsroot

CVS password:

#注:输入密码,没有出错提示表示登陆成功。

[root@test2 test]#

[root@test2test]# export CVSROOT=:pserver:gaoshang@192.168.10.11:2401/cvsroot

[root@test2 test]# cvs login

Logging in to:pserver:gaoshang@192.168.10.11:2401/cvsroot

CVS password:

#注:输入密码,没有出错提示表示登陆成功。

[root@test2 test]#

配置中碰到的问题

1、cvsroot用户不能登录

[root@test2 test]# export CVSROOT=:pserver:cvsroot@192.168.10.11:2401/cvsroot

[root@test2 test]# cvs login

Logging in to:pserver:cvsroot@192.168.10.11:2401/cvsroot

CVS password:

no such user cvsroot in CVSROOT/passwd

解决办法,查看发现原因是/cvsroot/CVSROOT/passwd文件中没有包含cvsroot用户

2、只有cvsroot用户可以登陆,别的用户都不能登录

查看原因发现是/etc/xinetd.d/cvspserver文件的server_args = -f --allow-root=/cvsroot pserver目录参数不对,因为我们此次配置的cvs工作目录是/cvsroot,而不是/home/cvsroot,所以将该参数改为server_args = -f --allow-root=/cvsroot pserver,所有用户均可正常登录

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

windows上有名的版本控制软件是VSS,而Linux下也有自己的版本控制软件CVS,下面主要讲讲Linux下的CVS的配置。
CVS的配置可分为三个部分:Linux CVS服务端配置、Linux CVS客户端配置、 Windows CVS客户端配置
Linux服务端CVS配置:
1,查询是否安装CVS
# rpm -qa | grep cvs         //
查询CVS软件包是否安装
如果显示cvs-1.11.2-10说明已经安装(后面数字为版本号)
2,CVS服务使用xinetd方式托管,所以需要在xinetd.d目录下添加需要启用的CVS服务
#
cd /etc/xinetd.d        // 进入目录
# vi cvspserver      //
编辑CVS服务文件
文件内容为:
service cvspserver
{
 disable = no
 socket_type = steram
 wait =
no
 user = root
 server = /usr/bin/cvs   // CVS命令所在路径
 server_args = -f
--allow-root=/cvs pserver     //
/cvs为数据仓库目录
 log_on_failure += USERID
}
3,加入CVS服务到services文件中
# vi /etc/services      //
编辑services文件
在文件底部加入:
cvspserver 2401/tcp
4,重启动xinetd
#
/etc/rc.d/init.d/xinetd restart
5,检查cvs服务是否启动
netstat -a | grep cvspserver       //
查询CVS服务端口是否在监听状态
如果成功应该显示有:
ctp 0 0 *:cvspserver *:* LISTEN
6,设置使用用户
一般可以将CSV服务分为管理用户和使用用户,管理用户专用于管理CVS项目;使用用户用于对CVS中的项目进行开发,所以可以建两个用户组:管理组cvsmanager;使用组cvsuser;
#
groupadd cvsmanager      // 建立管理用户组
# groupadd cvsuser      //
建立使用用户组
添加管理组用户和使用组用户:
# useradd -G cvsmanager cvsnanager       //
建立该组用户成员
# useradd -G cvsuser timmy
7,建立一个目录为数据仓库
# mkdir /cvs         
//  建立一个目录用作数据仓库
# cvs -d /cvs init      //
初始化该数据仓库
此时,cvs目录中将生成CVSROOT,更改该目录权限为CVS管理组
# chgrp
cvsnanager /cvs/CVSROOT         // 更改CVS管理文件为CVS管理组
# chmod 075
/cvs/CVSROOT        // 更改CVS管理文件的使用权限
现在就可以在此目录中创建和管理,使用项目了。
Linux
CVS客户端配置:
设置使用用户系统环境变量,在个人环境配置文件中加入CVSROOT变量:
修改 .bash_profile文件,加入一行
export
CVSROOT=:pserver:timmy@192.168.0.2:/cvs      //
timmy为用户者用户名,/cvs为数据仓库目录
Windows下CVS客户端配置:
在Windows平台下安装WinCvs1.3,在管理中-->设置,在认证方式中选择:pserver,在远程路径中填入数据仓库路径,并输入主机地址及用户名,就可正常登陆使用了.
~~~~~~~~~~~~~~~~~~~
3、  配置一个项目

groupadd cvsgroup1

useradd -g cvsgroup1 -d /home/cvsroot1 cvsroot1

passwd cvsroot1

chmod -R 750 /home/cvsroot1

以cvsroot1用户登录

export CVSROOT=/home/cvsroot1

cvs init

采用cvs验证方式

将cvsroot1加入到CVSROOT/admin中(这个文件默认没有)

(在admin文件里面的用户,被当做这个Repository的管理员)

export CVSROOT=:pserver:
cvsroot1@localhost:/home/cvsroot1

cvs login

cvs passwd -r cvsroot1-a sjc
       // cvsroot1 为映射到系统的用户,sjc为cvs虚拟用户

cvs passwd -r cvsroot1-a hgb

cvs passwd -r cvsroot1-a cvsadmin1

将管理员改为 cvsadmin1 虚拟用户

将cvsadmin1加入到CVSROOT/admin中(这个文件默认没有)

export CVSROOT=:pserver:
cvsadmin1@localhost:/home/cvsroot1

chmod u+w config

将config中的UseSystemUser=no

4、 
新加一个项目

由管理员创建用户

groupadd cvsgroup2

useradd -g cvsgroup2 -d /home/cvsroot2 cvsroot2

passwd cvsroot2

chmod -R 750 /home/cvsroot2

由该项目配置管理员操作:(某一个项目用户只能由专一帐号登录)

以cvsroot2用户登录

export CVSROOT=/home/cvsroot2

cvs init

采用cvs验证方式

将cvsroot2加入到CVSROOT/admin中(这个文件默认没有)

(在admin文件里面的用户,被当做这个Repository的管理员)

export
CVSROOT=:pserver:cvsroot2@localhost:/home/cvsroot2

cvs login

cvs passwd -r cvsroot2 -a sjc

cvs passwd -r cvsroot2 -a hgb

cvs passwd -r cvsroot2 -a cvsadmin2

将管理员改为 cvsadmin2 虚拟用户

将cvsadmin2加入到CVSROOT/admin中(这个文件默认没有)

export
CVSROOT=:pserver:cvsadmin2@localhost:/home/cvsroot2

chmod u+w config

将config中的UseSystemUser=no

5、 
客户端软件wincvs

启动wincvs,ctrl +L,弹出命令行模式,输入 cvs passwd
修改密码

~~~~~~~~~~~~~~~~~~~~~~~~~~~

1.创建用户cvs
#useradd cvs
为cvs用户添加密码
#passwd cvs

创建目录来放需要导入的源代码库
#mkdir /home/cvs/cvsroot
修改目录归属
#chown -R
cvs:cvs /home/cvs/cvsroot

2.初始化cvs源代码库,此操作生成目录/home/cvsroot/CVSROOT,其下为一些初始化文件
#cvs -d
/home/cvs/cvsroot init
也可以将cvsroot目录建在别的地方
#cvs -d /space/cvsroot
init

*加入cvs服务(缺省安装的通常缺省就有cvs服务)
#vi /etc/services
#cvspserver
2401/tcp #pserver cvs service
#cvspserver 2401/udp #pserver cvs service

3.把cvs服务放到xinetd系统服务中
#cd /etc/xinetd.d
#vi cvspserver
文件内容:

service cvspserver
{
flags             = REUSE
socket_type      
= stream
wait              = no
user              = root
server    
       = /usr/bin/cvs
server_args       = -f --allow-root=/home/cvs/cvsroot
pserver
log_on_failure   += USERID
disable           = no
}

确认/etc/services文件中,有cvspserver关键词,并分配了端口,如:cvspserver  2401/tcp
重新启动xinetd:

#/etc/rc.d/init.d/xinetd restart
*检查cvspserver服务是否已经启动
#netstat -l
|grep cvspserver
应该有如下结果,表明cvs服务器安装成功:
tcp 0 0 *:cvspserver *:* LISTEN

4.登录cvs服务器(如服务器IP是192.168.68.253):
另一台linux机器执行下列命令:
#export
CVSROOT=:pserver:cvs@192.168.68.253:2401//space/cvsroot
#cvs login

输入密码,没有出错提示表示登陆成功.
如果想在一个linux系统上建多个源代码库,分别提供cvs服务。重复上面步骤就可以了。

第1步时候要注意使用一个不同路径。

第2步放到xinetd系统服务中稍微麻烦点。/etc/xinetd.d目录下要生成一个新的任务配置文件,

例如cvspserver1,文件中service名称一定要区分第一个,例如service

cvspserver1,server_args做相应变动。还要在/etc/services文件中,加入新的服务端口号,
例如:cvspserver1 
    2402/tcp。重新启动xinetd服务.
第3步测试时候,可以这样设定:
#export
CVSROOT=:pserver:cvs@192.168.68.253:2402/usr/local/source1

客户端需要设置CVSROOT变量,下次登陆cvs的时候不用输入路径

如客户端有用户guo,在/HOME/guo目录的文件.bash_profile中加入:

CVSROOT=:pserver:cvs@202.204.114.37:/home/cvs/cvsroot
export CVSROOT

键入命令使变量设置马上生效:
#source /home/weiqiong/.bash_profile

导入源代码,如果所有的代码都在目录/home/guo/source下
#cd ~/source
#cvs import -m
"initial code" test guo start

这样服务器上生成目录/home/cvs/cvsroot/test中为源代码库

~~~~~~~~~~~~~~

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