第一部分 CVS简介
cvs ( Concurrent Version System )是个版本控制系统,什么是版本控制系统呢?简单的说,他能够记录程式代码修改的过程,有一个完整的历史记录( history )。辟如说,当您在修改程式代码的时候, 不小心写出了一个 bug,但是您可能很久以后才发现多出了这个 bug, 这个时候,cvs 就能很有效的帮助您找出到底是在哪一次的修改中,出现了这个 bug。
也许您会说, 那我每次都把程式保存起来, 用tar 做好备份不就行了,当然, 您能够这样做, 但是这太浪费空间了! cvs 在版本更改间, 只储存不同的部分, 这样就能够省下很多空间。
在另一个场合里, 更能显示出 cvs 的好处 ,比如多人一起研发软件的时候。 cvs支持远程访问, 用户能够对他要修改的文档加上正在编辑的标志, 让别人知道他要修改这个文档了。 当然, 一个较大的研发队伍,一般还会需要一个 mailing list 用来沟通。毕竟cvs 只是个管理程式代码的工具, 他并不扮演沟通的角色。 cvs的同类软件更有rcs和sccs。RCS ( Revision Control System ) 能够从FSF获得。SCCS ( Source Code Control System ) 由AT&T在SystemV中引入,现在已被加入X/Open标准( Unix 98? )。比起这些软件,CVS的要优秀得多,特别是在支持多人远程研发方面。由于CVS出现较新,所以使用上反而没有他们普及。当然,假如您熟悉rcs,您会发现学习cvs很容易。
名词
repository: 意为仓库。在 cvs 里, 他就是您真正存放各历史版本的地方。 pserver: cvs 远程服务器,cvs 有两种工作模式, 一种是 local, 一种是 remote。 一般通过inetd启动pserver。
CVSROOT: 当使用 cvs 的时候, 要设定 CVSROOT这个环境变量, 或是用 -d 选项来指定该参数,该参数指明您的仓库放在哪里。
本地( local )cvs
首先, 确定一个 cvsroot,比如:
export CVSROOT="/home/joe/cvsroot/" 建立该目录:
mkdir /home/joe/cvsroot
接着,运行cvs init :
cvs init
cvs init 会帮您把 cvsroot 初始化。接着, 建立一个要放文档的目录 ( 相当于一个Project ): mkdir /home/joe/cvsroot/cvsdoc
cd /home/joe/work
cvs checkout cvsdoc( 或简写为: cvs co cvsdoc ) 您会看到下面的信息: cvs checkout: Updating cvsdoc cvs checkout 会把当前最新的版本拷贝到您的当前目录下。
记住, 不要自己建立 /home/joe/work/cvsdoc, 该目录下还会有一些用于管理的 cvs 相关的信息。
接着, 进入 cvsdoc 目录, 编辑 cvs.doc 这个文档档案,输入一些信息。
然后,运行:
cvs add cvs.txt cvs commit -m "Initial revision." cvs add 就会把 cvs.txt 加入 cvs 维护的文档列表中去。
cvs commit 检查当前目录下任何的在文档列表中的文档,并把对他们的改变加入到仓库中。-m 表示这次 commit 的 message,一般说明此次修改的相关信息。
现在修改一下 cvs.txt,并且,在文档档案的最上面加上 $Id$ 的字样。
改完之后, 再 commit 一次:
cvs commit -m "Adding new stuff."
现在看看我们所做的修改:
cvs log cvs.txt
能够看到:
RCS file: /home/joe/cvsroot/cvsdoc/cvs.txt,v
Working file: cvs.txt
head: 1.2
branch:
locks: strict
access list:
symbolic names:
keyword substitution: kv
total revisions: 2; selected revisions: 2
description:
----------------------------
revision 1.2
date: 2000/09/11 11:55:06; author: joe; state: Exp; lines: 2 -0
i
----------------------------
revision 1.1
date: 2000/09/11 11:52:32; author: joe; state: Exp;
initial version
==================================================================
您会看到每次修改加进去的 message。这对研发者,特别是个大的项目的研发者,其帮助是不言而喻的。
cvs diff -r 1.1 -r 1.2 cvs.txt
能够看到:
Index: cvs.txt
================================================================== RCS file: /home/joe/cvsroot/cvsdoc/cvs.txt,v
retrieving revision 1.1
retrieving revision 1.2
diff -r1.1 -r1.2
0a1
> $Id: cvs.txt,v 1.2 2000/09/11 11:55:06 joe Exp $
1a3
> hehe,sencond time edit it!
这样会显示 1.1 和 1.2 版的 diff, 原本有 1.1 版的人, 只需要用这个 patch 就能够了升级到1.2了!
再编辑 cvs.txt, 能够发现最上面的 Id 变长了? 加了一代串文字:
$Id: cvs.txt,v 1.2 2000/09/11 11:55:06 joe Exp $ 这显示这个版本的一些相关信息。
远程( remote )cvs
假如我们要做一个比较大的项目,上面讲的本地cvs服务就太简单了,我们要让众多的人能够远程研发程式! 比如我们要用cvs组织起我们的minigui项目。 检查 /etc/services 有没有这两行,没有请加入:
cvspserver 2401/tcp #CVS network server cvspserver 2401/udp #CVS network server
在 /etc/inetd.conf 加入:
cvspserver stream tcp nowait root /usr/local/bin/cvs cvs --allow-root=/home/minigui pserver
mkdir /home/minigui
要是该配置生效,请重启inetd。
添加用户anoncvs, 这是要给匿名cvs 用户使用的帐号,其组为nogroup。 新加一个名为 minigui的 group。 添加参和 minigui研发的用户的帐号, 当然, 把他们的 group 设为 minigui。
cvs -d /home/minigui init
cd /root/minigui, 这是原来已存在的版本, 现在我们要把他的东西放进 cvs 仓库里: 比如,我们把minigui的库minigui03放到仓库中:
cd minigui03;cvs import –m “the lib” minigui03 joe start
会看到cvs把一个个文档放到仓库中。
cvs import 的语法为:
cvs import -m "log msg" projname vendortag releasetag
vendortag 和releasetag 一般无需关心,我们这里使用一个用户名和一个start 标志。
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




