博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CVS的操作与使用(Linux下版本管理)
阅读量:2298 次
发布时间:2019-05-09

本文共 10673 字,大约阅读时间需要 35 分钟。

CVS的操作与使用(Linux下版本管理)
CVS的操作与使用
1.初始设定与建立存储库
(1)设定环境变量
在/etc/profile(所有使用者) 或 .bash_profile(当前使用者) 中添加如下语句:
#vi /etc/profile
export EDITOR=/bin/vi
export CVSROOT=/home/cvsroot
 
(2)建立存储库
#mkdir /home/cvsroot
#chmod 777 /home/cvsroot
 
(3)初始化CVS
$cvs init
 
(4)建立存储库原始版本
[jnkt@"ZHOUHY-VM" client]$ pwd
/data/jnkt/client
[jnkt@"ZHOUHY-VM" client]$ cvs import client v1_0 r1_0
 
2.工作版本的建立与操作
(1)工作版本的建立
[jnkt@"ZHOUHY-VM" jnkt]$ pwd
/data/jnkt
[jnkt@"ZHOUHY-VM" jnkt]$ ls
client  client_xlhc.tar  sigflat  test  xlhc  xlhc_1.0.0.6.tar
[jnkt@"ZHOUHY-VM" jnkt]$ mkdir work
[jnkt@"ZHOUHY-VM" jnkt]$ cd work/
[jnkt@"ZHOUHY-VM" work]$ cvs checkout client
cvs checkout: Updating client
U client/bksrc.sh
U client/infile.sh
U client/omcclient
cvs checkout: Updating client/framework
cvs checkout: Updating client/framework/include
U client/framework/include/base.h
U client/framework/include/pubfunc.h
cvs checkout: Updating client/framework/linux
U client/framework/linux/makefile
U client/framework/linux/makefile_old
cvs checkout: Updating client/framework/src
U client/framework/src/pubfunc.c
cvs checkout: Updating client/lib
cvs checkout: Updating client/linux
U client/linux/makefile
U client/linux/makefile_old
cvs checkout: Updating client/src
U client/src/main.cpp
U client/src/parainput.cpp
U client/src/parainput.h
U client/src/version.h
[jnkt@"ZHOUHY-VM" work]$ ls
client
[jnkt@"ZHOUHY-VM" work]$ pwd
/data/jnkt/work/client
[jnkt@"ZHOUHY-VM" client]$ ls
bksrc.sh  CVS  framework  infile.sh  lib  linux  omcclient  src
 
(2)删除工作版本的文件
[jnkt@"ZHOUHY-VM" client]$ rm omcclient
[jnkt@"ZHOUHY-VM" client]$ cvs remove omcclient
cvs remove: scheduling `omcclient' for removal
cvs remove: use 'cvs commit' to remove this file permanently 
 
(3)在工作版本中增加文件
[jnkt@"ZHOUHY-VM" client]$ cp bksrc.sh bksrc_old.sh
[jnkt@"ZHOUHY-VM" client]$ cvs add bksrc_old.sh
cvs add: scheduling file `bksrc_old.sh' for addition
cvs add: use 'cvs commit' to add this file permanently 
 
3.上传工作版本到存储库
[jnkt@"ZHOUHY-VM" client]$ cvs commit
cvs commit: Examining .
cvs commit: Examining framework
cvs commit: Examining framework/include
cvs commit: Examining framework/linux
cvs commit: Examining framework/src
cvs commit: Examining lib
cvs commit: Examining linux
cvs commit: Examining src
RCS file: /home/cvsroot/client/bksrc_old.sh,v
done
Checking in bksrc_old.sh;
/home/cvsroot/client/bksrc_old.sh,v  <--  bksrc_old.sh
initial revision: 1.1
done
Removing omcclient;
/home/cvsroot/client/omcclient,v  <--  omcclient
new revision: delete; previous revision: 1.1.1.1
done
 
4.由存储库更新工作版本
(1)
[jnkt@"ZHOUHY-VM" client]$ cvs update
cvs update: Updating .
cvs update: bksrc.sh is no longer in the repository
U bksrc_old.sh
cvs update: Updating framework
cvs update: Updating framework/include
cvs update: Updating framework/linux
cvs update: Updating framework/src
cvs update: Updating lib
cvs update: Updating linux
cvs update: Updating src
 
(2)
[jnkt@"ZHOUHY-VM" client]$ cvs update
cvs update: Updating .
M bksrc_old.sh
cvs update: warning: infile.sh was lost
U infile.sh
cvs update: Updating framework
cvs update: Updating framework/include
cvs update: Updating framework/linux
cvs update: Updating framework/src
cvs update: Updating lib
cvs update: Updating linux
cvs update: Updating src
[jnkt@"ZHOUHY-VM" client]$ cvs update -C bksrc_old.sh
(Locally modified bksrc_old.sh moved to .#bksrc_old.sh.1.2)
U bksrc_old.sh
 
5.信息的查询
[jnkt@"ZHOUHY-VM" client]$ pwd
/data/jnkt/work2/client
[jnkt@"ZHOUHY-VM" client]$ cvs status bksrc_old.sh
===================================================================
File: bksrc_old.sh      Status: Up-to-date
   Working revision:    1.2     Tue Jan  5 02:28:32 2010
   Repository revision: 1.2     /home/cvsroot/client/bksrc_old.sh,v
   Sticky Tag:          (none)
   Sticky Date:         (none)
   Sticky Options:      (none)
[jnkt@"ZHOUHY-VM" client]$ cvs log bksrc_old.sh
RCS file: /home/cvsroot/client/bksrc_old.sh,v
Working file: bksrc_old.sh
head: 1.2
branch:
locks: strict
access list:
symbolic names:
keyword substitution: kv
total revisions: 2;     selected revisions: 2
description:
 
6.清楚工作版本与目录
[jnkt@"ZHOUHY-VM" client]$ cvs release
[jnkt@"ZHOUHY-VM" client]$ cd ..
[jnkt@"ZHOUHY-VM" work2]$ rm -rf client/ 
 
 
7.清除存储库
删除如下语句:
在/etc/profile(所有使用者) 或 .bash_profile(当前使用者) 中添加如下语句:
#vi /etc/profile
export EDITOR=/bin/vi
export CVSROOT=/home/cvsroot
#rm -rf /home/cvsroot
 
8.恢复旧版本的方法
cvs update -p -r1.2 file_name >file_name
 
9.项目发布不带CVS信息的方法

cvs export -D now project_name

     Linux CVS 安装配置使用

    安装cvs所需要的支持包 xinetd

    一、安装

    1、验证是否已安装xinetd和cvs

    #rpm -q xinetd

    #rpm -q cvs

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

    #xinetd-xx.xx.

    #cvs-xx.xx.

    一般安装在/usr/bin/cvs,如果未安装,

    

    下载一个最新的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:

    

    

    

    Tips:

    最好先把selinux关闭,在图形界面下把home , cvsroot ,CVSROOT

    的属性重新设置成owner:cvsroot

    ,group:cvs,还有修改/home/cvsroot/CVSROOT/config这个文件的第二行SystemAuth=no这样最顺利了

    

    

    

    

    

    

    

    

    

    

    本文来自ChinaUnix博客,如果查看原文请点:

转载地址:http://znkib.baihongyu.com/

你可能感兴趣的文章
503. Next Greater Element II
查看>>
543. Diameter of Binary Tree
查看>>
560. Subarray Sum Equals K
查看>>
572. Subtree of Another Tree
查看>>
深入理解计算机系统(CSAPP) 第一章学习笔记
查看>>
深入理解计算机系统(CSAPP) 第二章学习笔记
查看>>
1. Two Sum
查看>>
深拷贝和浅拷贝
查看>>
2. Add Two Numbers
查看>>
3. Longest Substring Without Repeating Characters
查看>>
6. ZigZag Conversion
查看>>
理解List<String> list=new ArrayList<String>();
查看>>
String、StringBuilder和StringBuffer的区别
查看>>
HashMap & HashSet
查看>>
11. Container With Most Water
查看>>
17. Letter Combinations of a Phone Number
查看>>
匿名内部类Anonymous Classes
查看>>
724. Find Pivot Index
查看>>
498. Diagonal Traverse
查看>>
54. Spiral Matrix
查看>>