天天看点

版本控制CVS

概念:

 1. CVS 是一种版本跟踪系统,它可以在软件开发过程中保持文件的各种记录以及取

出文件的任何已存储的版本。同时它也可以生成两个版本的差别文件。

 2. CVS 可以让多名开发人员同时编译一个文件而不遗失任何数据。同时它将记录

谁在何事因何而改变了什么。通常情况下 CVS 可以自动解决冲突问题,但有时也需

要用户的干预。

 3. CVS 可以按不同的用途应用在不同的环境之中,例如管理配置文件、邮件别名

(mailalias)、FAQ 文件、音乐作品、论文、书籍等等。甚至可以将整个/etc

目录放入其中,检测系统配置的更改

  版本控制(version control)就是在项目中记录和读取变更的过程。版本控制系

统可以让你取回原有旧的版本也可以比较任意两个版本文件的差异。

***基 于 pserver 方式的 CVS 服务***

一/建立 cvs 用户组,便于管理 cvs 用户

  #groupadd cvs 

二/建立 cvs 组的 cvsroot 用户和所属的目录

  #useradd  g cvs  G cvs  d /home/cvsroot cvsroot 

三/为 cvsroot 用户添加密码

  #passwd cvsroot 

四/改变/home/cvsroot 的目录属性

  #chmod 775 /home/cvsroot 

五/初始化 cvs 源代码库,此操作生成目录/home/cvsroot/CVSROOT,其下为一些初始化文件

  #cvs  -d /home/cvsroot init

  #chown cvsroot.cvs /home/cvsroot/CVSROOT 

六/建立用户

  #htpasswd -c /home/cvsroot/CVSROOT/passwd qq

七/把刚建立的用户映射为系统用户

  #vi /home/cvsroot/CVSROOT/passwd

  qq:qqpasswd:cvsroot     <#添加  :cvsroot  >

八/默认允许系统用户登录 CVS, 关闭系统用户的登录

  #vi /home/cvsroot/CVSROOT/config

  将第二行的

  #SystemAuth = no 去掉注释,即改为SystemAuth = no 

九/使用 xinetd 监听 cvspserver 服务方式,在 xinetd.d 目录下添加需要启动的服务 cvspserver

  #vi /etc/xinetd.d/cvspserver   添加如下:

   service cvspserver

   {

        disable = no

        socket_type = stream

        wait = no

        user = root

        server = /usr/bin/cvs

        server_args = -f --allow-root=/home/cvsroot pserver

        #log_on_suceess += HOST

        #log_on_failure += HOST

   }

十/重新启动 xinetd: 

  #service xinetd restart

十一/测试登录 cvspserver 服务器

  #cvs  -d :pserver:qq@$IP:/home/cvsroot login

  ---$ip 换为 cvspserver 服务器的真实 ip 地址,比如 127.0.0.1 或是192.168.0.x 

十二/登录成功后导入首个项目,语法如下<现切换到项目源码的路径下>

  #cvs -d :pserver:qq@$IP:/home/cvsroot import -m "随便写什么,说明一下" <项目名称> <开发商标记> <版本号>

如:#cvs -d :pserver:qq@$IP:/home/cvsroot import -m "new project" httpd qq http1

     执行后:会将所有源文件及目录导入到/home/cvsroot/httpd 目录下

十三/这样每次执行cvs命令时都要指定“-d :pserver:qq@$IP:/home/cvsroot”,麻烦。可以这样:

  #export CVSROOT=":pserver:qq@$IP:/home/cvsroot"

  把这个添加进/root/.bashrc和/root/.bash_profile使重启生效

十四/现在建立一个工作目录/tmp/work

  #mkdir /tmp/work

十五/再从刚建立在cvs中央库/home/cvsroot中把httpd检索下来

  #cd /tmp/work

  #cvs -d /home/cvsroot/ checkout httpd

十六/现在测试:

  #cd /tmp/work         切换到工作目录

  #touch file001        新建文件file001

  #cvs add file001      cvs添加

  #cvs commit file001   传达到cvs中央库  <需要切换到cvsroot普通用户,也可以补全命令#cvs -d :pserver:qq@$IP:/home/cvsroot>

  现在在/home/cvsroot/httpd中应该多了一个file001,v

  注意:

  1.对于图片,Word 文档等非纯文本的项目,需要使用 cvs add -kb 选项按 2 进制文件方式导入(k 表示扩展选项,b 表示binary),否则有可能出现文件被破坏的情况

  比如:

  #cvs add  -kb new_file.gif 

  #cvs add  -kb readme.doc 

  2.很多 cvs 命令都有缩写形式:commit=>ci; update=>up; checkout=>co; remove=>rm;

  3.即使工作目录删除了文件,中央库也不会

查看当前文件不同版本的区别

#cvs diff  r1.3  r1.5 file_name 

查看当前文件(可能已经修改了)和库中相应文件的区别

#cvs diff file_name 

  正确的通过 CVS 恢复旧版本的方法:

  如果用

  #cvs update  r1.2 file.name 

  这个命令是给 file.name 加一个 STICK TAG: "1.2" ,虽然你的本意只是想将

它恢复到 1.2 版本

  正确的恢复版本的方法是:

  #cvs update  -p  r1.2 file_name >file_name 

  如果不小心已经加成 STICK TAG 的话:用如下方法解决

  #cvs update  A 

  移动文件/文件重命名

  cvs 里没有 cvs move 或 cvs rename,因为这两个操作是可以由先

  #cvs remove old_file_name

  然后

  #cvs add new_file_name 

  删除/移动目录

  最方便的方法是让管理员直接移动,删除 CVSROOT 里相应目录(因为 CVS 一个项目

下的子目录都是独立的,移动到$CVSROOT 目录下都可以作为新的独立项目:好比一颗树,

其实砍下任意一枝都能独立存活),对目录进行了修改后,要求其开发人员重新导出项目。

  #cvs checkout project_name 

或者

#cvs update  dP

继续阅读