Linux CVS安装设置使用(转)2008-10-25 11:26安装cvs所需要的支持包 xinetd
一、安装
1、验证是否已安装xinetd和cvs
#rpm -q xinetd
#rpm -q cvs
如果能显示出类似这样的版本信息,证实已安装
#xinetd-xx.xx.
#cvs-xx.xx.
一般安装在/usr/bin/cvs,如果未安装,
http://download.fedora.redhat.com/pub/fedora/linux/core/6/i386/os/Fedora/RPMS/
下载一个最新的rpm安装即可;安装命令如:rmp -ivh cvs-1.11.2-10.i386.rpm
也能用YUM命令在线安装
2、创建CVS用户组和用户
root用户下执行以下命令:
#groupadd cvs
#adduser cvsroot
#passwd cvsroot
#输入cvsroot用户密码
3、创建CVSROOT
root用户下执行:
#mkdir /var/cvsroot 此处可改为你想要的cvsroot路径
#chown cvsroot.cvs /var/cvsroot 更改cvsroot权限
4、初始化CVS
需要在cvsroot用户下执行
#su - cvsroot
#cvs -d /var/cvsroot init 此处对应上面创建的cvsroot路径
5、修改环境变量
编辑/etc/profile或/home下相应用户的.profile文件
此处已修改/etc/profile为例:
#exit
退回到root用户,只有root用户才有权限修改/etc/profile
#vi /etc/profile 编辑/etc/profile文件
在末尾加上以下两句:
CVSROOT=/var/cvsroot
export CVSROOT
更新环境变量:
执行#. /etc/profile 注意点的后面有空格
此时系统已认识$CVSROOT这样的环境变量
注意:若提示无权限,则需要改动profile的权限后,再执行上一步骤;
#chmod 777 /etc/profile
6、启动cvs服务器:
6.1、修改 cvs设置文件
#vi /var/cvs/CVSROOT/config
把 "#SystemAuth=no" 换成 "SystemAuth=no"
在/etc/xinetd.d/目录下创建文件cvspserver,内容如下:
# default: on
# description: The cvs server sessions
service cvspserver
{
disable = no
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 = 192.168.0.0/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服务器已运行。
二、使用管理
在 cvs 管理员用户(在我这里是 cvsroot 用户)的家目录里有一个 CVSROOT 目录,这个目录里有三个设置文件,passwd, readers, writers,我们能通过设置这三个文件来设置 CVS 服务器,下面分别介绍这几个文件的作用:
passwd:cvs 用户的用户列表文件,他的格式非常象 shadow 文件:
{cvs 用户名}:[加密的口令]:[等效系统用户名]
readers:有 cvs 读权限的用户列表文件。就是个一维列表。在这个文件中的用户对 cvs只有读权限。
writers:有 cvs 写权限的用户的列表文件。和 readers 相同,是个一维列表。在这个文件中的用户对 cvs 有写权限。
1、创建能登陆cvs服务的用户及密码,需要创建文件passwd
vi /var/cvsroot/CVSROOT/passwd
文件内容如下:
jiaojj:xxxxx:cvsroot
chenxu:xxxxx:cvsroot
此文件的意思是weiqiong和chenxu两个用户能登陆cvs服务器,登陆后其权限为用户cvsroot的权限
注意:cvs用户和服务器用户是能不相同的
※事实上必须创建jiaojj这样的系统用户
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 111 passwdgen.pl
如果需要密码为:some,则敲入:
passwdgen.pl "some"
回车即可得到加密密码,用其替换passwd文件中的xxxxxx
4、编辑 writers 文件,加入下面几行:
jiaojj
chenxu
5、使用
cvs -d :pserver:用户名@localhost:/var/cvsroot login
敲入命令回车后提示输入用户名的密码,你按照自己设置的密码输入,如果没有什么错误信息出现就是成功了
=============CVS 使用简介==================
CVS是RCS的前端工具,他是用于多用户并行研发的版本控制工具,他的最大特点
是使用了“copy-modify-merge”机制而不是“lock-modify-unlock”。通过使用
CVS生成一个存储文件的仓库(repository),存储在仓库中的每个目录叫做模块
(module),在修改时将相应的模块检出到工作目录中(working directory)生
成对应的目录,所有的修改都在工作目录中完成,修改完成后再提交到仓库中生
成新的版本号,并加以保存。
1. CVS初始化
(1) 创建CVSROOT根目录
编辑有关的环境变量,加入CVSROOT的定义(比如在 /etc/bashrc 文件中加入下
面两行):
CVSROOT=/var/cvsroot
export CVSROOT
然后在相应位置开始创建CVSROOT
$cd /var
$mkdir cvsroot
$cvs ?d /var/cvsroot init
这时就会产生/var/cvsroot/CVSROOT 目录,这下面放着有关CVS的设置文
件。同时/var/cvsroot/也作为文件仓库存放所有的文件。
(2) 创建研发项目
如果从头开始一个新的项目,就需要创建一个独立的目录,并把所有要使用的文
件做一个有效的组织。而如果在开始使用源文件的目录之前就有了,则只需进入
该目录就行了。
$cd /work/tang
$ls cvstest
. .. c/
$cd cvstest
然后,就能输入源文件目录:
$cvs import ?m “Create Source Dir” cvstest/c tang cvstest
这样会生成 $CVSROOT/cvstest/c 目录。 其中 -m 用来指定注释信息,如果后面
在命令行不指定注释信息,则会启动缺省编辑器(vi)需求输入注释信息。 tan
g, cvstest分别标识了厂商和发行标识。
注意,使用import命令会把当前目录下的所有文件和目录(包括子目录)引入到
文件仓库中指定模块(目录)下。
2. 命令简介
-------------
(1) 检出源文件
cvs checkout [-r rev][-D date][-d dir][-j merg1] [-j merg2] modules
-r 检出指定版本的模块
-D 检出指定日期的模块
-d 检出指定目录而不是模块
-j 合并当前版本和指定版本
使用下面的命令会检出刚才生成的模块,并在当前目录下生成和文件仓库中完全
相同的目录结构:
$cvs checkout cvstest/c
对于目录结构比较复杂的模块能在 $CVSROOT/CVSROOT/modules中加以指定:
1) $cvs checkout CVSROOT/modules
2) 在modules文件中加入下面一行:
SOURCE cvstest/c
3) 然后执行:
$cvs commit ?m “Add SOURCE”
以后就能使用下面的命令在当前路径下生成 cvstest/c 目录
$cvs checkout SOURCE
在当前路径下生成的这个目录就被称为工作目录,对源文件的所有修改都应该在
这个目录下完成,而绝对不允许去改动在 文件仓库中$CVSROOT 目录下的文件。
(2) 删除、增加、重命名文件和目录
cvs add [-k kflags][-m message] files...
-k 指定以后该文件的缺省检出目录
-m 对文件的描述
上述命令会加入一个新的文件到文件仓库里,但直到使用了提交命令他才会真正
更新文件仓库。
cvs remove [options] files
上述命令会从文件仓库中删除文件,但也要到提交之后才有作用。
例1:增加文件
$cvs checkout SOURCE
$cd cvstest/c
$touch test.c
$cvs add test.c
$cvs commit ?m “add test.c”
例2:删除文件
$cvs checkout SOURCE
$cd cvstest/c
$rm test.c
$cvs remove test.c
使用 ?f 选项能上面两步合做一步。
$cvs remove ?f test.c
如果在提交之前想恢复刚才删除的文件,能如下:
$cvs add test.c
如果只执行了第一步删除(rm),则能用下面的方法恢复:
$cvs update test.c
对于重命名的文件,能先删除再添加。
对于目录的修改(重命名),可能需要修改cvs 管理文件,一般应该遵循以下步
骤:
1) 确认所有有关的修改都已提交;
2) 进入文件仓库中要修改的模块目录,对相应的目录进行修改(重命名或删除)
$cd $CVSROOT/modules
$mv old_dir new_dir
3) 如果有必要,修改管理文件,比如modules 文件
如果要删除目录,则应该先对目录中每个文件都进行了删除(包括使用cvs remo
ve )处理之后再执行上面的第2步。
(3) 提交源文件
cvs commit [-Rl][-m mesg] files
-R 连子目录一起提交
-l 只提交本地目录(不提交子目录)
-m 注释信息
在检出源文件之后,在工作目录中对源文件进行的所有修改都必须在提交之后才
能对文件仓库中的源文件起作用,并且新的文件才能够被分配一个新的版本号。
(4) 释放工作目录
cvs release ?d SOURCE
这个命令会删除工作目录 cvstest/c (建议在提交了修改的模块后执行这一步), 他比使用 rm ?rf cvstest 要好。
3. 多用户研发
---------------
在多用户的情况下,如果不同用户修改的是同一个文件的不同部分,则使用下面
的命令就能进行版本合并(把检出的文件和当前的最新版本合并):
$cvs update
(1) 冲突解决
在有多个用户对同一个文件进行修改时,如果修改了其中的相同部分,而修改后
的内容如果有不同的话,出现冲突是不可避免的。如果在CVS 文件仓库中有一个
文件 test.c ,他的版本是 1.4, 用户A 先检出该文件进行修改,而稍后有用户
B 检出该文件进行修改,并提前提交成 1.5, 而在用户A再提交时就会出现冲突
(如果文件内容不同的话),这时CVS会提示需要手工解决。
文件仓库中的版本1.4:
#include
main()
{
int i;
for(i = 0; i
main()
{
int i;
for(i = 0; i
main()
{
int i;
for(i = 0; i
main()
{
int i;
>>>>>> 1.5
printf("Count: %d\n", i);
>>>>>> 1.5
}
(2) 文件版本管理
cvs log [-lR][-r rev][-d date][-w login][files…]
-l 不处理子目录
-R 对子目录做同样处理
-r 指定版本号
-d 指定时间
-w 指定登录名
使用上面的命令能参看当前模块或指定文件的所有历史版本信息。
cvs annotate [-lR][-r rev|-D date] files
-l 不处理子目录
-R 对子目录做同样处理
-r 指定版本号
使用上面的命令能参看指定文件(检出之后)的所有修改信息。
例:$cvs annotate cvstest/c/test.c
输出:
版本 修改人 修改时间 原始码
1.1 (tang 18-Jan-00): #include
1.1 (tang 18-Jan-00): #include
1.1 (tang 18-Jan-00):
1.1 (tang 18-Jan-00): main()
1.1 (tang 18-Jan-00): {
1.1 (tang 18-Jan-00): int i = 0 ;
1.1 (tang 18-Jan-00):
1.1 (tang 18-Jan-00): for(i = 0; i Tags:
cvs
Tips:
最佳先把selinux关闭,在图像界面下把home , cvsroot ,CVSROOT
的属性重新设置成owner:cvsroot
,group:cvs,更有修改/home/cvsroot/CVSROOT/config这个文件的第二行SystemAuth=no这样最顺利了
一、安装
1、验证是否已安装xinetd和cvs
#rpm -q xinetd
#rpm -q cvs
如果能显示出类似这样的版本信息,证实已安装
#xinetd-xx.xx.
#cvs-xx.xx.
一般安装在/usr/bin/cvs,如果未安装,
http://download.fedora.redhat.com/pub/fedora/linux/core/6/i386/os/Fedora/RPMS/
下载一个最新的rpm安装即可;安装命令如:rmp -ivh cvs-1.11.2-10.i386.rpm
也能用YUM命令在线安装
2、创建CVS用户组和用户
root用户下执行以下命令:
#groupadd cvs
#adduser cvsroot
#passwd cvsroot
#输入cvsroot用户密码
3、创建CVSROOT
root用户下执行:
#mkdir /var/cvsroot 此处可改为你想要的cvsroot路径
#chown cvsroot.cvs /var/cvsroot 更改cvsroot权限
4、初始化CVS
需要在cvsroot用户下执行
#su - cvsroot
#cvs -d /var/cvsroot init 此处对应上面创建的cvsroot路径
5、修改环境变量
编辑/etc/profile或/home下相应用户的.profile文件
此处已修改/etc/profile为例:
#exit
退回到root用户,只有root用户才有权限修改/etc/profile
#vi /etc/profile 编辑/etc/profile文件
在末尾加上以下两句:
CVSROOT=/var/cvsroot
export CVSROOT
更新环境变量:
执行#. /etc/profile 注意点的后面有空格
此时系统已认识$CVSROOT这样的环境变量
注意:若提示无权限,则需要改动profile的权限后,再执行上一步骤;
#chmod 777 /etc/profile
6、启动cvs服务器:
6.1、修改 cvs设置文件
#vi /var/cvs/CVSROOT/config
把 "#SystemAuth=no" 换成 "SystemAuth=no"
在/etc/xinetd.d/目录下创建文件cvspserver,内容如下:
# default: on
# description: The cvs server sessions
service cvspserver
{
disable = no
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 = 192.168.0.0/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服务器已运行。
二、使用管理
在 cvs 管理员用户(在我这里是 cvsroot 用户)的家目录里有一个 CVSROOT 目录,这个目录里有三个设置文件,passwd, readers, writers,我们能通过设置这三个文件来设置 CVS 服务器,下面分别介绍这几个文件的作用:
passwd:cvs 用户的用户列表文件,他的格式非常象 shadow 文件:
{cvs 用户名}:[加密的口令]:[等效系统用户名]
readers:有 cvs 读权限的用户列表文件。就是个一维列表。在这个文件中的用户对 cvs只有读权限。
writers:有 cvs 写权限的用户的列表文件。和 readers 相同,是个一维列表。在这个文件中的用户对 cvs 有写权限。
1、创建能登陆cvs服务的用户及密码,需要创建文件passwd
vi /var/cvsroot/CVSROOT/passwd
文件内容如下:
jiaojj:xxxxx:cvsroot
chenxu:xxxxx:cvsroot
此文件的意思是weiqiong和chenxu两个用户能登陆cvs服务器,登陆后其权限为用户cvsroot的权限
注意:cvs用户和服务器用户是能不相同的
※事实上必须创建jiaojj这样的系统用户
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 111 passwdgen.pl
如果需要密码为:some,则敲入:
passwdgen.pl "some"
回车即可得到加密密码,用其替换passwd文件中的xxxxxx
4、编辑 writers 文件,加入下面几行:
jiaojj
chenxu
5、使用
cvs -d :pserver:用户名@localhost:/var/cvsroot login
敲入命令回车后提示输入用户名的密码,你按照自己设置的密码输入,如果没有什么错误信息出现就是成功了
=============CVS 使用简介==================
CVS是RCS的前端工具,他是用于多用户并行研发的版本控制工具,他的最大特点
是使用了“copy-modify-merge”机制而不是“lock-modify-unlock”。通过使用
CVS生成一个存储文件的仓库(repository),存储在仓库中的每个目录叫做模块
(module),在修改时将相应的模块检出到工作目录中(working directory)生
成对应的目录,所有的修改都在工作目录中完成,修改完成后再提交到仓库中生
成新的版本号,并加以保存。
1. CVS初始化
(1) 创建CVSROOT根目录
编辑有关的环境变量,加入CVSROOT的定义(比如在 /etc/bashrc 文件中加入下
面两行):
CVSROOT=/var/cvsroot
export CVSROOT
然后在相应位置开始创建CVSROOT
$cd /var
$mkdir cvsroot
$cvs ?d /var/cvsroot init
这时就会产生/var/cvsroot/CVSROOT 目录,这下面放着有关CVS的设置文
件。同时/var/cvsroot/也作为文件仓库存放所有的文件。
(2) 创建研发项目
如果从头开始一个新的项目,就需要创建一个独立的目录,并把所有要使用的文
件做一个有效的组织。而如果在开始使用源文件的目录之前就有了,则只需进入
该目录就行了。
$cd /work/tang
$ls cvstest
. .. c/
$cd cvstest
然后,就能输入源文件目录:
$cvs import ?m “Create Source Dir” cvstest/c tang cvstest
这样会生成 $CVSROOT/cvstest/c 目录。 其中 -m 用来指定注释信息,如果后面
在命令行不指定注释信息,则会启动缺省编辑器(vi)需求输入注释信息。 tan
g, cvstest分别标识了厂商和发行标识。
注意,使用import命令会把当前目录下的所有文件和目录(包括子目录)引入到
文件仓库中指定模块(目录)下。
2. 命令简介
-------------
(1) 检出源文件
cvs checkout [-r rev][-D date][-d dir][-j merg1] [-j merg2] modules
-r 检出指定版本的模块
-D 检出指定日期的模块
-d 检出指定目录而不是模块
-j 合并当前版本和指定版本
使用下面的命令会检出刚才生成的模块,并在当前目录下生成和文件仓库中完全
相同的目录结构:
$cvs checkout cvstest/c
对于目录结构比较复杂的模块能在 $CVSROOT/CVSROOT/modules中加以指定:
1) $cvs checkout CVSROOT/modules
2) 在modules文件中加入下面一行:
SOURCE cvstest/c
3) 然后执行:
$cvs commit ?m “Add SOURCE”
以后就能使用下面的命令在当前路径下生成 cvstest/c 目录
$cvs checkout SOURCE
在当前路径下生成的这个目录就被称为工作目录,对源文件的所有修改都应该在
这个目录下完成,而绝对不允许去改动在 文件仓库中$CVSROOT 目录下的文件。
(2) 删除、增加、重命名文件和目录
cvs add [-k kflags][-m message] files...
-k 指定以后该文件的缺省检出目录
-m 对文件的描述
上述命令会加入一个新的文件到文件仓库里,但直到使用了提交命令他才会真正
更新文件仓库。
cvs remove [options] files
上述命令会从文件仓库中删除文件,但也要到提交之后才有作用。
例1:增加文件
$cvs checkout SOURCE
$cd cvstest/c
$touch test.c
$cvs add test.c
$cvs commit ?m “add test.c”
例2:删除文件
$cvs checkout SOURCE
$cd cvstest/c
$rm test.c
$cvs remove test.c
使用 ?f 选项能上面两步合做一步。
$cvs remove ?f test.c
如果在提交之前想恢复刚才删除的文件,能如下:
$cvs add test.c
如果只执行了第一步删除(rm),则能用下面的方法恢复:
$cvs update test.c
对于重命名的文件,能先删除再添加。
对于目录的修改(重命名),可能需要修改cvs 管理文件,一般应该遵循以下步
骤:
1) 确认所有有关的修改都已提交;
2) 进入文件仓库中要修改的模块目录,对相应的目录进行修改(重命名或删除)
$cd $CVSROOT/modules
$mv old_dir new_dir
3) 如果有必要,修改管理文件,比如modules 文件
如果要删除目录,则应该先对目录中每个文件都进行了删除(包括使用cvs remo
ve )处理之后再执行上面的第2步。
(3) 提交源文件
cvs commit [-Rl][-m mesg] files
-R 连子目录一起提交
-l 只提交本地目录(不提交子目录)
-m 注释信息
在检出源文件之后,在工作目录中对源文件进行的所有修改都必须在提交之后才
能对文件仓库中的源文件起作用,并且新的文件才能够被分配一个新的版本号。
(4) 释放工作目录
cvs release ?d SOURCE
这个命令会删除工作目录 cvstest/c (建议在提交了修改的模块后执行这一步), 他比使用 rm ?rf cvstest 要好。
3. 多用户研发
---------------
在多用户的情况下,如果不同用户修改的是同一个文件的不同部分,则使用下面
的命令就能进行版本合并(把检出的文件和当前的最新版本合并):
$cvs update
(1) 冲突解决
在有多个用户对同一个文件进行修改时,如果修改了其中的相同部分,而修改后
的内容如果有不同的话,出现冲突是不可避免的。如果在CVS 文件仓库中有一个
文件 test.c ,他的版本是 1.4, 用户A 先检出该文件进行修改,而稍后有用户
B 检出该文件进行修改,并提前提交成 1.5, 而在用户A再提交时就会出现冲突
(如果文件内容不同的话),这时CVS会提示需要手工解决。
文件仓库中的版本1.4:
#include
main()
{
int i;
for(i = 0; i
main()
{
int i;
for(i = 0; i
main()
{
int i;
for(i = 0; i
main()
{
int i;
>>>>>> 1.5
printf("Count: %d\n", i);
>>>>>> 1.5
}
(2) 文件版本管理
cvs log [-lR][-r rev][-d date][-w login][files…]
-l 不处理子目录
-R 对子目录做同样处理
-r 指定版本号
-d 指定时间
-w 指定登录名
使用上面的命令能参看当前模块或指定文件的所有历史版本信息。
cvs annotate [-lR][-r rev|-D date] files
-l 不处理子目录
-R 对子目录做同样处理
-r 指定版本号
使用上面的命令能参看指定文件(检出之后)的所有修改信息。
例:$cvs annotate cvstest/c/test.c
输出:
版本 修改人 修改时间 原始码
1.1 (tang 18-Jan-00): #include
1.1 (tang 18-Jan-00): #include
1.1 (tang 18-Jan-00):
1.1 (tang 18-Jan-00): main()
1.1 (tang 18-Jan-00): {
1.1 (tang 18-Jan-00): int i = 0 ;
1.1 (tang 18-Jan-00):
1.1 (tang 18-Jan-00): for(i = 0; i Tags:
cvs
Tips:
最佳先把selinux关闭,在图像界面下把home , cvsroot ,CVSROOT
的属性重新设置成owner:cvsroot
,group:cvs,更有修改/home/cvsroot/CVSROOT/config这个文件的第二行SystemAuth=no这样最顺利了