27.4. CVS 简介

如果经常编辑各个文件并且这些文件以 ASCII 文本或程序源代码文本之类的格式储存,则应该使用 CVS 来进行同步。用 CVS 同步其它格式的数据(如 JPEG 文件)固然可行,但这会产生大量数据,因为文件的所有变化都永久储存在 CVS 服务器中。这种情况下将无法利用 CVS 的大多数功能。只有在所有工作站都可以访问同一服务器时,才能使用 CVS 同步文件。

27.4.1. 配置 CVS 服务器

服务器是储存所有有效文件(包括所有文件的最新版本)的主机。任何固定的工作站都可以充当服务器。如果可能,应该对 CVS 储存库的数据进行定期备份。

配置 CVS 服务器时,通过 SSH 授予用户访问服务器的权限是一种不错的方式。如果用户在服务器上的用户名为 tux,并且在服务器和客户机上都安装了 CVS 软件,则必须在客户端设置以下环境变量:


CVS_RSH=ssh CVS_ROOT=tux@server:/serverdir

可使用命令 cvs init 从客户端初始化 CVS 服务器。只需执行一次初始化。

最后,必须给同步指派名称。仅在客户机上选择或创建目录,以包含要使用 CVS 来管理的文件(该目录也可以为空)。目录的名称同时也是同步的名称。在本例中,目录名为 synchome。转到此目录并输入以下命令,将同步名称设置为 synchome


cvs import synchome tux wilber

许多 CVS 命令都需要注释。为此,CVS 会启动一个编辑器(在环境变量 $EDITOR 中定义的编辑器;如果未定义任何编辑器,则使用 vi)。通过提前在命令行中输入注释(如下例所示),可以避免调用编辑器。


cvs import -m 'this is a test' synchome tux wilber

27.4.2. 使用 CVS

现在,在所有主机上都可以使用 cvs co synchome 将该同步储存库签出。该操作将在客户机上创建新的子目录 synchome。要向服务器提交更改,请转到目录 synchome(或其子目录之一),然后输入 cvs commit

默认情况下,所有文件(包括子目录)都要提交给服务器。若仅提交单个文件或目录,请按 cvs commit file1 directory1 中的方式进行指定。在将新文件和目录提交给服务器之前,必须使用 cvs add file1 directory1 之类的命令先将其添加到储存库中。随后再使用 cvs commit file1 directory1 命令提交新添加的文件和目录。

如果转到另一个工作站,则需要签出同步储存库(如果在同一工作站上的较早会话中尚未执行该操作,请参见上文)。

使用 cvs update 开始与服务器同步。如 cvs update file1 directory1 所示更新各个文件或目录。要查看当前文件与服务器上储存的版本的差异,请使用命令 cvs diffcvs diff file1 directory1。使用 cvs -nq update 可以查看哪些文件将受到更新的影响。

以下是更新期间显示的一些状态符号:

U

已更新本地版本。这将影响服务器提供的和本地系统缺少的所有文件。

M

已修改本地版本。若服务器发生更改,可以将差异并入本地副本。

P

已使用服务器上的版本修补本地版本。

C

本地文件与储存库中的当前版本冲突。

?

此文件在 CVS 中不存在。

状态 M 表示本地修改的文件。可以向服务器提交本地副本,也可以在删除本地文件后再次进行更新。更新后将能够从服务器中恢复缺失的文件。如果提交了本地修改的文件但提交的这个文件中的同一行发生了更改,则可能发生冲突(由 C 表示)。

在这种情况下,查看文件中的冲突标记(»> 和 «<),决定要采用哪个版本。由于这是一项令人不快的工作,您可以选择放弃更改,删除本地文件,然后输入 cvs up 从服务器恢复当前版本。

27.4.3. 参见信息

本节仅对 CVS 的多种情况进行了简要介绍。以下 URL 提供了大量的文档:

http://www.cvshome.org/
http://www.gnu.org/manual/