Linux CVS安装配置使用(转)

来源:互联网 发布:mycard点卡淘宝 编辑:程序博客网 时间:2024/06/05 20:31
安装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这样最顺利了
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 宝宝起热痱子了怎么办 宝宝热的起痱子怎么办 吃了有农药的菜怎么办 水银吃到肚子里怎么办 牙齿有牙结石怎么办可以去除 刷牙牙结石掉了怎么办 痘痘留下的黑印怎么办 脸上用了激素药怎么办 激素药膏用多了怎么办 8岁儿童牙齿不齐怎么办 两个牙齿之间有缝隙怎么办 蛀牙就剩牙根了怎么办 牙龈发白像烂了怎么办 3岁宝宝牙龈肿痛怎么办 1岁宝宝牙龈肿痛怎么办 牙疼引起的发烧怎么办 2岁小儿牙龈红肿怎么办 宝宝出牙牙龈红肿怎么办 3岁宝宝牙龈红肿怎么办 1岁宝宝牙龈红肿怎么办 4岁宝宝牙龈红肿怎么办 儿童牙黑了怎么办啊 牙黑了掉了一块怎么办 1岁幼儿牙齿腐蚀怎么办 我的大牙变黑了怎么办 牙齿里面黑了疼怎么办 最里面的牙黑了怎么办 牙龈的肉裂开了怎么办 有蛀牙怎么办可以变好么 拔智齿没拔干净怎么办 蛀牙只剩牙根了怎么办 牙掉的就剩牙根怎么办 蛀牙牙冠都掉了怎么办 拔智齿断了牙根怎么办 牙肉肿痛有脓包怎么办 种植牙到寿命后怎么办 牙齿松动快掉了怎么办 一颗牙齿松动了怎么办 种植牙牙冠掉了怎么办 牙就剩下牙根了怎么办 后面的大牙掉了怎么办