六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 521|回复: 0

RCS:版本控制系统

[复制链接]
 楼主| 发表于 2014-11-17 12:07:29 | 显示全部楼层 |阅读模式
11.5.3  RCS:版本控制系统
RCS(版本控制系统,Revision Control System)是现存的最古老的UNIX应用程序之一。它实际上是一种相当简单的系统。它在单个文件的层面上执行操作,并且把每个文件的版本信息保存在独立的隐蔽文件中。这个隐蔽文件的名字和原来的文件名一样,但是在原名后面加了.v两个字符。例如,如果您把文件/etc/syslog.conf置于RCS的控制之下,那么RCS会将它的各个版本保存在/etc/syslog. conf.v里。
为了减少混乱,RCS在和原来文件相同的目录下寻找一个叫做RCS的目录。如果有这个目录,RCS就把.v文件放到那个目录里面,而不是把它们留在原来文件的目录里。这样一来,列出的目录内容就会变得清楚多了,因为许多文件都可以共享RCS目录。这是一种很棒的功能,而且也是我们极力推荐的一种做法。
RCS的基本概念就是,您“检出(check out)”您想要修改的文件,而“检入(check in)”您所做的改动,把它们保存起来。相应地,您确实需要知道的RCS命令只有几个:ci用于检入、co用于检出,而rcs执行各种维护工作。如果您使用的编辑器是emacs,那么就要完全不必使用命令行工具了,因为emacs内置了对RCS的支持。
要让一个文件开始处于RCS的跟踪之下,可以像下面这样在这个文件上运行ci:[tr][/tr]

-u标志让ci立即以一种未上锁(不可编辑)的状态检出syslog.conf文件。如果您省略了这个标记,那么ci就会检入这个文件,然后删除原来的副本,这或许并不是您想要的做法。
您每次想要改变一个受RCS控制的文件时,都必须检出它,并用co -l命令对它上锁:
   # co -l syslog.conf
RCS/syslog.conf,v --> syslog.conf revision 1.2 (locked)
done

这一操作告诉RCS,您打算修改这个文件了,RCS不会让其他任何人检出这个文件,直到您再把它检入为止。
RCS在未上锁的文件上取消了写权限,提醒用户在正确检出它们之前,不要编辑它们。一种常见的错误是,把一个文件载入您的编辑器,进行修改,但直到编辑器拒绝保存所做的修改,才意识到需要把文件检出。要纠正这样的错误,只要暂停编辑器,或者启动另一个shell窗口,运行适当的co -l命令,然后再试着保存就可以了。您只要用chmod命令就能把文件改为可写,但这样做会破坏和弄乱RCS。
从理论上说,RCS上锁避免了两个不同的人同时修改文件的情况出现。在实际中,您必须是root才能修改系统文件,因此一旦某个系统文件以root权限被检出以后,有sudo权利的任何人都能修改它。不过,如果第二个系统管理员试图再用命令co -l的时候,RCS会提示说已经有一个可写版本了。系统管理员应该形成习惯,在他们想要修改由RCS控制的文件时都必须尝试先检出它。文件可写意味着“住手!有别人已经检出这个文件了。”
您可能偶尔会发现有其他人已经改动了一个文件,并且让它留在了上锁状态,甚至更糟糕,这个人没管RCS,没对文件上锁就做了修改。您可以用rcsdiff复查犯错误的人所做的修改,这条命令是一个能懂RCS的diff版本。例如:[tr][/tr]

最后一招是您可以用命令rcs -u filename打破上锁。这条命令提示您输入对所采取的措施给予的解释,并且发邮件给前面对文件上锁的用户(遗憾的是,同时就是root)。
一旦您对检出文件所做的修改感到满意以后,就可以用ci -u命令把它检入。RCS会要求您提供一条注释,说明您刚才做的是什么。虽然人们倾向于跳过这步,或者写些诸如“做了一次修改”这样的无用信息,但是应该坚持加注释这个习惯。在两年以后,当您要弄清楚为什么您要做改动的原因时,有帮助的注释会救您一命的。
[tr][/tr]
您可以用rlog命令查看一个文件的版本历史信息:[tr][/tr]
[tr][/tr]
  
[tr][/tr]
如果您想要看看文件在换到新日志主机之前的样子,可以用co的-r选项检出这个文件的1.2版:
    # co -r1.2 syslog.conf
RCS/syslog.conf,v --> syslog.conf
revision 1.2
done
这条命令用老版本替换了当前的syslog.conf文件,所以要确保在您做完以后执行一次正常的co命令,否则您(和syslogd)都可能会被搞糊涂!另一种做法是co -r1.2 -p syslog.conf,它把所需版本的内容发送到标准输出。遗憾的是,没有办法把文件检出到一个不同的文件名里。决不要检出老版本的上锁副本(用co -l命令),因为这一操作会在版本树中创建分支。版本分支偶尔会在源代码上使用,但是对系统管理员的工作来说几乎没有用处,只需略过RCS文档中所有涉及它们的地方,让您的生活更简单些即可。
有关RCS的更多知识可以在下面的地址找到:http://www.cs.purdue.edu/homes/trinkle/RCS/
该会员没有填写今日想说内容.
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表