RCS介绍编
◎顾名思义 RCS是一种修订版本的控制系统
◎建立RCS资料夹:
先在您想要保存的档案或程式码下建一个名为RCS的资料夹
◎用ci登入到RCS:
将程式利用ci登入(check in)到RCS
系统会要求您输入一些对此档案的叙述,单独一行的 . 表示结束。
ex: (绿色表示系统自己产生的,filename乃是我自己随手创的档案 内容只有一行)
$ci filename
RCS/filename,v <-- filename
enter description, terminated with single '.' or end of file:
NOTE: This is NOT the log message!
>> 测试 one
>> .
initial revision: 1.1 (最初的版本是1.1)
done
◎RCS资料存放:
这时您会发现 在目前的目录下原有的filename不见了...
却多了一个名为filename,v 的档案。
◎读取RCS资料:
A.唯读开启:
$co -r filename (从RCS中唯读出资料)
RCS/filename,v --> filename
revision 1.1
done
$
vi filename (读取资料)
用vi开启後会出现这些字样
filename: unmodified, readonly: line 1
B.一般开启:$co -l filename (从RCS中读出资料)
RCS/filename,v --> filename
revision 1.1 (locked)
done
$
-l (小写的L)参数 後可加上rev也就是版本 不加表示最新版
vi filename (读取资料)
用vi开启後会出现这些字样 (表示可以修)
filename: unmodified: line 1
C.回存RCS资料:
当您修改过後,可以用ci filename 再次回存资料到RCS
$ci filename
RCS/filename,v <-- filename
new revision: 1.2; previous revision: 1.1 (显示最新版本为1.2 先前版本为1.1)
enter log message, terminated with single '.' or end of file:
>> 测试 two
>> .
done
回存过後,现行目录中又只剩下RCS资料夹原本的filename已经不见。
D.特殊开启:读取某一版本的修改
$co -r[rev] filename (从RCS中读出资料)
rev表示想要读取的版本号 如:1.1 不加表示最新回存後的版本(目前是1.2)
$co -r1.1 filename
◎RCS名词解释:
RCS file : 在RCS资料夹下的档案
working file: 除了RCS file 的其他档案称之。
check in : ci 将档案存入RCS
check out : co 从RCS取出档案
◎比较版本差异:
rcsdiff:
$ rcsdiff filename
用来比较目前修订後和之前check in 的最新修订版本的差异。
< 表示旧的档案资料
--- 表示分隔
> 表示新的档案资料
释:既然是比较 当然您要有一个正在修正中的档案...
也要有个已经ci的档案
◎Lock 的开/关:
一个working file 需要被锁定(lock)才能进行修正或存入,
若只有您一个人在处理这个档案,您可以把Lock 给关闭,
如此即使处在之前co -r filename (唯读)的状态
也能够修改并存入rcs。
$ rcs -U filename 关闭Lock
$ rcs -L filename 开启Lock
◎存入RCS的方式:
A.一般的check in : $ ci filename
B.check in 後继续编辑: $ ci -l filename (小写的L)
C.check in 後唯读开启: $ vi -u filename
释:一般check in 後,原先的filename会不见,加上上面参数後filename不会消失,
-l 可以直接继续用vi编辑之;-u 则filename是处在唯读的状态。
◎指定存入的版本:
A.预设版本: 从1.1、1.2、1.3 ...以此类推
B.指定版本: $ ci -r[rev] filename
举例说明:我要跳到release 2 版开始,之後的版本就是2.2、2.3、2.4 ...
$ ci -r2 filename 或 $ ci -r2.1 filename
◎版本自动识别:
A.$Id$ :以解的方式,加入这一部份 $Id$
如此在check out 察看档案内容时,会显示如下的状态,而且会自动更新
$Id: filename revision date time author state
ex:
$Id: filename,v 2.3 2001/06/11 09:03:40 panda Exp panda $
B.$Log$ :以解的方式,加入这一部份 $Log$
如此在check out 察看档案内容时,会显示出在check in需要的log的讯息。
您可以利用$Log$来维护整个program的历史...。
◎rcs -- change RCS file attributes : 改变RCS档案的属性
◎RCS 档案内容:
A.各版本的文字
B.存取的表列
C.变更历程的log纪录
D.描述版本的文字
E.控制属性的控制项
◎rcs 语法: rcs options file
◎rcs 参数:
-i :创造出最基本的RCS档案,但不产生任何版本。
预设路径是./RCS ,若已有相同的档案,则会显示错误讯息。
$ rcs -i newfile
RCS file: RCS/newfile,v
enter description, terminated with single '.' or end of file:
NOTE: This is NOT the log message!
>> 这是叙述...
>> .
done
RCS file内容为:
head ; --> 最新的版本
access; --> 存取RCS的表列
symbols;
locks; strict; --> 被Lock的档案
comment @# @; --> 系统对档案的描述
desc --> 自己对於档案的叙述
@这是叙述...
@
: access表列所列的是能够使用RCS档案的使用者,若是空白,
则档案的所有者为档案的创造者或是superuser。
-a[logins] :增加login名称到access表列。
ex: rcs -apanda newfile
如此你会在RCS 档案中发现,在access栏位多了一个名为panda的字串。
-e[logins] :从access表列删减login名称。若login name被省略,则是删除全部。
ex: rcs -epanda newfile
如此你会在RCS 档案中发现,原本在access栏位的panda被删除了。
-A[oldfile] :增加login名称到access表列。
新增已有RCS档案的access表列到某一RCS档案。
ex: rcs -Afilename newfile
此时您会在RCS档案中发现原先filename的access表列,
被加到newfile的access表列。
-c[string] : 加上此参数string字串会出现在comment的部分。
ex: rcs -ctesttxt filename
-mrev:msg : 用msg字串取代原本rev的log。
ex: rcs -m1.1:thisismessage filename
-nname:rev : name是别名,rev是版本。若要取消,则把:rev取消就可以。
ex: rcs -nname:1.1 filename
-Nname:rev : 与-n 的作用相同,但可以覆盖过之前的命名。
-orange : 可以利用-o 这个参数,删除过时的版本。
range的参数:
rev --> 表示只删除这一版本。
rev1:rev2 --> 代表的是从rev1到rev2的分支。
rev: --> 从这个版本的分支开始(包含自己)
:rev --> 表示从分支的开始到自己(包含自己)
ex: rcs -o1.1 filename --> 只删除1.1 这个版本
rcs -o1.1:2.1 filename --> 删除1.1 到 2.1的所有版本
rcs -o1.1: filename --> 删除1.1 到版本2之前的所有版本
rcs -o:2.4 filename --> 版本2到2.4的所有版本都删除
-q : 快速的显示,避免显示出运作细节。
ex: rcs -q filename
-sstate:[rev] : 将状态从原先预设的State Exp(实验性的) 变成其他的名称。
从comment或是$Id$ 都可以看到这项改变。
ex: rcs -sRel:1.1 filename
将1.1版本状态从Exp改成Rel ..
常用的有Stab(stable)、Rel(release)。
-t[file] : 从一个档将叙述文字读入,并取代原有的内容。
ex: 先随便建立一个档案,要有内容的...
rcs -tfile filename
如此你会发现RCS档案中的desc的内容被变更为你建立的那个档案的内容了
-t-string : 跟-t[file]类似,不同的是直接用string取代原有的desc。
ex: rcs -t-string filename
-V : 显示出RCS的版本。
ex: rcs -V filename
◎ci -- check in RCS revisions : 登录RCS的修订版本
◎ci语法: ci options file
◎ci简介: ci能将working file储存到相符合的RCS file
ci会先试着在RCS子目录下找相符合的档案,然後才是现行目录。
ci的呼用者(caller)的登录名称必须在存取表列(access list),除非,
存取表列是空的或是该使用者是superuser或是档案的所有者。
若要附加一个新的修订版本到一个已经存在的分支,则分支的尖端需要被呼用者锁定。
否则,只能创造出一个新的分支。
若没有加上 -f 参数的话,ci 会在存入RCS时会去检查和之前的有何不同。
若相同的话,ci会回复到先前的版本(也就是不会有任何改变)。
$ ci filename
RCS/filename,v <-- filename
file is unchanged; reverting to previous revision 1.1
done
每一个修订版本在储存时,ci会产生一个log讯息,这个讯息应该纪录着改变的状态,
并且一定以一个.独自一行为结尾。
若RCS档案不存在,ci会自己创造出来,并且将working file中的内容作为最初的修订版本,
(预设是1.1),此时的存取表列是空白的,ci并会要求输入叙述性的文字。
修订版本的版本号可以是符号性的、数字性的、或是混和性的。用符号性的命名需要
事先定义,可以用-n或-N设定。
◎ci参数:
-r : 将working file存入RCS。
-l[rev] : 与 -r 功能相同,但-l等同於存入後再执行co -l。 (小写的L)
当您还要继续编辑时使用。
ex: ci -l filename 相当於 ci -r filename 及co -l filename 的效用。
-u[rev] : 与 -l 功能相似,不同的是filename未锁定,也就是唯读无法修改的状态。
释:参数 -r 、 -u 及-l 相互排挤,在後出现的参数会将之前的参数覆盖。
ex: 若ci -l -u filename 则结果等同於 ci -u filename
因为 -u 将 -l 覆盖过去了。
-f[rev] : 强制存入RCS ,即使两个版本内容一样。
ex: ci -f filename
-k[rev] : 为档案加上keyword
ex: ci -k1.2 filename
在RCS的log位置会出现类似如下的叙述。
@checked in with -k by panda at 2001/06/14 08:12:46
-q[rev] : 安静模式。不显示输出的讯息。
-i[rev] : 最基本的check in,若已有相对应的RCS档案,会显示错误讯息。
ex: ci -i filename; 错误讯息如: ci: RCS/filename,v: already exists
-d[date/time]: 设定版本修改的时间,若date被省略,则是采用working file最後被修改的时间。
ex: date的格式 年月日 time 的格式 时分秒
将时间设定为2002年7月11日15时23分15秒 $ci -d020711/152315 filename
-n[name]: 与rcs -nname:rev 类似,都是设定符号名称,不过不用指定版本。
ex: ci -nbeta filename 将filename最近的修订版加上一个符号名称为beta。
-N[name]: 与rcs -Nname:rev 类似,都是强制设定版本,不过不用指定版本号。
ex: ci -Nbeta filename 将filename最近的修订版强制加上一个符号名称为beta。
-sstate: 设定check in 版本的状态,预设是EXP(实验性的),与rcs -sstate:[rev] 功能相似。
ex: ci -sStab filename 将版本设为STABLE
-wlogin: 用login的名称取代author後的login名称。
ex: ci -wtestlogin filename
显示的状态为:
date 2001.06.19.09.09.19; author testlogin; state Exp;
-V: 显示RCS系统的版本
ex: ci -V 会显示出如下的状况 RCS version 5.7