1 RCS: 版本控制系统
RCS (Revision Control System) 是现存的最古老的 UNIX 应用程序之一。如果您把文件 /etc/rsyslog.conf 置于 RCS 的控制之下,那么 RCS 会将它的各个版本保存在 /etc/rsyslog.conf,v 里。
为了减少混乱,RCS 在和原来文件相同的目录下寻找一个叫做 RCS 的目录。如果有这个目录,RCS 就把 ,v 文件放在那个目录里,这样一来,列出的目录内容就会变得清楚多了,因为许多文件都可以共享 RCS 目录。这是一种很棒的功能,而且也是我们极力推荐的一种做法。您确实需要知道的 RCS 命令只有几个: ci 用于检入, co 用于检出,而 rcs 执行各种维护工作。如果您使用的编辑器是 emacs, 那么就完全不必使用命令行工具了,因为 emacs 内置了对 RCS 的支持。
要让一个文件开始处于 RCS 的跟踪之下,可以像下面这样在这个文件上运行 ci:
RCS/filename,v <-- filename enter description, terminated with single '.' or end of file: NOTE: This is NOT the log message! >> This is the orgmode file.-u 标志让 ci 立即以一种未上锁(不可编辑)的状态检出 filename 文件。如果您省略了这个标记,那么 ci 就会梌这个文件,然后删除原来的副本,这或许并不是您想要的做法。
您每次想要改变一个受 RCS 控制的文件时,都必须检出它,并用 co -l 命令对它上锁:
如果您使用 emacs, 那么就更方便了,只需打开受 RCS 控制的文件,然后 C-x v v
就可以实现文件检出和上锁。当你对所做的修改感到满意时就可以使用 ci -u 命令将它签入,这时 RCS 会要求你提供一条注释,说明您刚才做的是什么。虽然人们倾向于路过这步,或者写些诸如“做了一次修改”这样的无用信息,但是应该坚持加注释这个习惯。在两年以后,当您要弄清楚为什么要做改动的时候,有帮助的注释会救您一命。在 emacs 里面,当您写完注释后就可以使用 C-c C-c
将 frame 关掉同时签入 RCS。
RCS/filename,v <-- filename new revision: 1.2; previous revision: 1.2 enter log message, terminated with single '.' or end of file: >> Started describe what I gonna do in this week >> . done当您需要比较两个版本之间的差别的时候, rcsdiff 是一个非常好的帮手,它是一个能懂 RCS 的 diff 版本。
您可能还需要用 rlog 命令查看一下文件的版本历史信息:
2 CVS: 并发版本系统
CVS (Concurrent Version System, 并发版本系统) 是目前在 UNIX 和 Linux 系统上使用最为广泛的版本控制系统。
CVS 背后的主要思想之一是项目文件(及其历史版本)都保存在一个中心位置。和在 RCS 系统中一样,您要签出要开始在上面工作的文件,然后做完修改之后把这些文件再次签入到代码库里。CVS 的优势在于,它没有“上锁”和“解锁”检出的概念,基于人可以同时检出并修改文件(“并发”由此得名)。
下面从用户的角度快速列举一下最重要的 CVS 命令。修改一个项目的第一步是登录到服务器,检出想要改动的模块。我们在这里要修改的模块叫做 sort:
CVS password: <password>
现在可以进行 sort 目录在本地的副本,开始编辑文件。当您准备把文件再次签入 CVS 库的时候,不需要使用 -d 选项,因为 CVS 在子目录 sort/CVS 里留下了一份所有必须的本地信息。
3 Subversion: 做得好的 CVS
虽然 CVS 是当前占据主导的版本控制系统,但是我们建议系统管理员从 RCS 直接跳到 Subversion。这个软件包的官方网址是 http://subversion.tigris.org/,不过现在已经在使用新的网址 http://subversion.apache.org/ 了。因为 Subversion 所使用的 License 就是 Apache License。
接下来我将要在我的 ubuntu 12.04 系统上安装并配置 subversion,虽然我所选用的发行版本是 ubuntu 但是我相信其中的绝大部分内容和操作都应该同样适用于其他的发行版本,甚至同样是 ubuntu 的其他时期的发行版。
首先,安装所需要的软件包:
$ sudo apt-get install libapache2-svn
$ cd /home/svn
$ sudo svnadmin create softplayer
$ sudo chown -R www-data:www-data softplayer
接下来,创建 /etc/subversion/passwd 文件,该文件包含了能够使用 Subversion 文件仓库的用户的授权信息。
david
或者
john
等用户.
-c 选项表示创建新的
/etc/subversion/passwd 文件,所以
user_name 所指的用户将是文件中唯一的用户。如果要添加其他用户,则去掉
-c 选项即可,比如像下面的命令一样:
mode | access |
---|---|
file:// | 直接访问本地硬盘上文件仓库 |
http:// | 通过 WebDAV 协议访问支持 Subversion 的 Apache2 Web 服务器 |
https:// | 类似 http:// 支持 SSL 加密 |
svn:// | 通过自带协议访问 svnserve 服务器 |
svn+ssh:// | 类似 svn:// 支持通过 SSH 通道 |
要通过 WebDAV 协议访问 SVN 文件仓库,还必须配置一下 Apache2 Web 服务器。在 /etc/apache2/mods-available/dav_svn.conf 文件中写入以下代码:
<Location /svn> DAV svn SVNParentPath /home/svn AuthType Basic AuthName "subversion repository" AuthUserFile /etc/subversion/passwd #<LimitExcept GET PROPFIND OPTIONS REPORT> Require valid-user #</LimitExcept> </Location>如果需要用户每次登录时都进行用户密码验证,请将 <LimitExcept GET PROPFIND OPTIONS REPORT> 与 </LimitExcept> 两行注释掉。
当您添加了上面的内容,您必须重新起动 Apache 2 Web 服务器,请输入下面的命令:
接着就是将数据 import 到 Subversion 仓库啦:
接下来的工作就是将 Subversion 仓库中的文件 checkout
出来,修改或删除,再 commit
回去:
david
用户名
checkout softplayer 到 SoftPlayerBeta 文件夹中,此时会提示输入密码。如果遇到
Password for ‘(null)’ GNOME keyring: 问题的时候可以直接
这时进入 SoftPlayerBeta 文件夹中,修改其中的文件,比如说 foo.c 文件,成功修改后,直接
但是说实在话,直接通过命令来操作 svn 的情况还是比较少见的,更多时候,是通过集成到开发环境中的版本控制管理插件来对文件的版本进行操作,如果您使用 emacs 那么在 Tools
菜单中就已经提供了 Version Control
的菜单项,方便对受版本控制器管理的文件进行操作;如果是使用 eclipse 来进行开发,那么在 eclipse 世界里就已经有非常方便实用的 subclipse 插件来对操作 Subverion,并且还是 GUI 界面的,非常地棒!
更多关于 Subversion 的信息可以参考以下的网址: