单个文件的版本控制/管理,适合对少量文件进行版本控制,不适合小组进行项目协作开发。优点:使用简便;缺点:功能有限。RCS常用命令有ci/co/rcsdiff。
rcs用一个后缀为“,v”的文件保存一文件的内容和所有修改的历史信息,你可以随时取出任意一个版本,用rcs保存程序就不必为不同版本分别备份。下面是一个“,v”文件的例子:
(太长,忽略。请看演示或自己找一个样本)
rcs文件里记载了每次更新的日期、作者、还有更新说明(Log)。文件的最新版本内容放在Log之后,再后面是历次版本与其后一版本的差别,按check in的时间做倒序排列。这么做的原因是因为新版本的check out机会大些,倒序排列可优化check out时间。
ci _ check in,保存新版本
此命令把指定文件添加到rcs历史文件中,同时把该文件删除。如果当前目录下有个RCS目录,ci会把历史文件存在此处,否则放在当前目录下。
[hahalee@builder]$ mkdir RCS
[hahalee@builder]$ ci wood.txt
RCS/wood.txt,v <-- wood.txt
enter description, terminated with single '.' or end of file:
NOTE: This is NOT the log message!
>> initial checkin #NOTE: 这里是给本次checkin做的说明
>> .
initial revision: 1.1
done
[hahalee@builder]$ ls -l RCS/
总共 4
-r--r--r-- 1 hahalee hahalee 451 Apr 7 07:27 wood.txt,v
ci也有丰富的命令行选项,比如,可以指定check in的版本号,甚至可以用字符串来做版本号,请查阅ci的manpage。
co _ check out,取出当前(或任意)版本
常用命令行选项:
-r[rev] 指定版本的checkout -l[rev] 指定版本,加锁的checkout
如不加可选的版本号,缺省是最近的版本。如果只需要一份只读的拷贝,用-r(特殊情况,如需要一份只读的当前拷贝,可以不要任何选项)。如需要对checkout的文件进行修改,请用-l选项。常见的操作流程是:
ci xxx.c; co _l xxx.c; 编辑,测试; ci xxx.c …………
在每次checkin的时候,版本号会自动在最低位上加1。为了在文件中反映版本控制信息,rcs提供了几个特殊的关键字,这里介绍$Id$和$Log$,其它的请参考info cvs。
$Id$代表文件的版本标识,由文件名/版本号/最后一次checkin时间/最后一次checkin的用户这几项组成,比如:
$Id: wood.txt,v 1.3 2000/04/07 00:06:52 hahalee Exp $
如果需要更详细的信息,可以用$Log$,$Log$被扩展为该文件的所有修改日期和备注,例:
/* $Log: wood.txt,v $
* Revision 1.2 2000/04/07 00:29:12 hahalee
* This is my second checkin
*
* Revision 1.1 2000/04/07 00:28:39 hahalee
* Initial revision
* /
顺便介绍一下ident命令。它的功能比较简单,就是从文件中搜索出RCS标示符并打印出来。可以用ident /usr/sbin/sendmail 来看看。不用说,如果想在最终的binary文件里找到$Id$串,得要把它声明到一个字符串里去。很多程序里这么写:
#ifndef lint //这里是为了避免lint报告“变量未使用”
static const char rcsid[] =
"$Id: bin/sh.c,v 1.15 1999/08/27 23:13:43 wp Exp $"; //这是从 $Id$ 扩展 //出来的
#endif
rcsdiff _ 比较revision之间的差异.运行diff命令,生成patch文件
命令行格式:rcsdiff [选项] [-r版本[-r版本]] [diff选项] 文件名
说明:如果没给出版本号,把上次checkin的内容同当前工作文件比较;如给出了一个版本号,就把那个版本的内容同当前工作文件比较;若给出了两个版本号,则用第一个来跟第二个比较。由于rcsdiff调用diff命令,所有的diff选项都可用。它的输出也是加了额外信息的diff格式内容,可以给patch使用。
rcs里面还有rcs,rcsclean,rlog,merge,rcsmerge我们没有提到,有的特别简单有的特别繁琐且用得少。其中rcs命令可以用来对rcs文件进行各种精细的维护,最为复杂。