章 3. 使用CVS开始一个项目

目录
建立文件
定义模块

因为更改文件名并且把它们移动到另一个目录中不是经常发生的,因此你在开始一个新项目时要做的第一件事是考虑你的文件组织。更改文件名或移动文件并非不可能,但增加了理解上潜在的费解,并且CVS在更改名字的目录上特别的敏感。请参见[移动和重命名文件 在 第 7 章]。(* 译者注: 在Unix中改名和移动是相同的。)

下一步做的事取决于手中的情况。

建立文件

第一步是在源码库中建立文件。这可以使用多种不同的方法来完成。

建立一个目录树

当你开始使用CVS时,你可能已经有几个项目可以使用CVS进行管理了。在这种情况下,最容易的方法就是使用:导入(import)命令。通过一个例子是最容易解释如何使用它的。假定你现在有一些你想放到CVS中的文件在wdir,中,并且你想让它们放在源码库中的如下目录:$CVSROOT/yoyodyne/rdir,你可以使用如下命令:

$ cd wdir
$ cvs import -m "Imported sources" yoyodyne/rdir yoyo start

如果你没有使用-m参数记录一个日志信息,CVS将调用一个编辑器(*译者注:通常是vi)并且提示输入信息。yoyo字符串是开发者标笺(vendor tag)start发行标笺(release tag)。他们没有什么特别的意义,仅仅是因为CVS的需要才放在这里。请参见[第 13 章],以得到更多的这方面信息。

你现在可以检查一下它是否有效了,然后可以删除你原来的代码目录。

$ cd ..
$ cvs checkout yoyodyne/rdir       # 后面有说明
$ diff -r wdir yoyodyne/rdir
$ rm -r wdir

删除原来的代码目录是个好方法,这样避免偶然编辑这个wdir目录,而不在cvs控制之中。另外,删除之前作个备份也是明智之举。

checkout命令能使用模块名作为参数(正如前面所有例子)或是一个相对于$CVSROOT的路径,如同上面的例子。

你应当检查$CVSROOT目录中的权限情况是否合适,应当使它们属于某一个特定的组。请参见[文件权限 在 第 2 章]。

如果你想导入(import)的一些文件是二进制代码,你可以使用一些特殊的方法表明这些文件是否是二进制文件。请参见[cvswrappers文件 在 附录 C]。

从其它版本控制系统建立文件

如果你有一个其它版本控制系统维护的项目,例如 RCS,你也许希望把这些文件放到CVS中,并且要保留这些文件的历史。

从RCS

如果你使用RCS,找到RCS文件-通常是一个文件名叫foo.c的文件会有RCS/foo.c,v的RCS文件。(但它有可能在其它地方,请看RCS的文档以得到相关信息)。如果文件目录在CVS中不存在,那在CVS中创建它。然后把这些文件拷贝到CVS的源码库目录中(在源码库中的名字必须是带,v的源文件;这些文件直接放在CVS中的这个目录下,而非RCS子目录中)。这是在CVS中一个为数不多的直接进入CVS源码库直接操作的情况,而没使用CVS命令。然后你就可以把它们在新的目录下检出(checkout)了。

当你把RCS文件移动CVS中时,RCS文件应在未被锁定的状态,否则移动操作时CVS将会出现一些问题。

从其它版本控制工具

许多版本控制工具都可以输出"RCS"格式的标准文档。如果你的版本控制工具可以做到这一点,直接输出RCS文件,然后按照上面的例子做就可以了。

如果你的版本工具不能输出RCS文件,那么你必需要写一个脚本文件来,每次取出一个版本然后把它放到CVS中去。下面提到的sccs2rcs脚本就是一个很好的例子。

从SCCS

有一个sccs2rcs的脚本文件可以做把SCCS的文件转化成RCS文件,这个文件放在CVS发行目录的contrib目录中。注意:你必须在一台同时安装了RCS和SCCS的机器上运行它。并且,正如其它在"contrib"目录中的其它脚本一样。(你的情形也许不同)(*译者注:我并未查看过CVS的contrib目录:-(,因此不知道这下面都有些什么)。

从PVCS:

contrib中有一个叫pves-to-rcs的脚本可以转换PVCS到RCS文件。你必须在一台同时有PVCS和RCS的机器上运行它。请看脚本中的注释以得到更多细节。

从无到有建立一个目录树

建立一个新的项目,最容易的方法是建立一个空的目录树,如下所示:

$ mkdir tc
$ mkdir tc/man
$ mkdir tc/testing

在这之后,你可以import这个(空)目录到源码库中去。

$ cd tc
$ cvs import -m "Created directory structure" yoyodyne/dir yoyo start

然后,当新增一个文件时,使用add命令添加文件(或目录)到源码库中。

请检查$CVSROOT中的权限是否正确。