作者: Per Cederqvist et al
快捷内容索引
1. 概述.........................................................1
2. 代码仓库.....................................................7
3. 使用CVS开始一个项目..........................................29
4. 主干版本(Revision).........................................33
5. 分支与合并...................................................41
6. Recarsive behavior...........................................49
7. 增加,删除,更名文件和目录...................................51
8. 回顾开发历史.................................................57
9. 放置二进制文件...............................................59
10 多个开发者的同时工作........................................61
11 主干版本管理.............................................71
12 关键字替代................................................73
13 跟踪第三方代码...............................................77
14 你的系统如何同CVS交互........................................81
15 特殊文件.....................................................83
16 附录
1) CVS命令导向..................................................85
2) CVS命令快速参考............................................115
3) 管理文件的参考习册.........................................127
4) 影响CVS的所有环境变量......................................141
5) CVS各版本之间的兼容性......................................143
6) 遇到的问题.................................................145
7) Credits....................................................153
8) 对CVS和这本手册的总是处理..................................155
目录 ...........................................................157
1 概论
这一章为从未用过CVS的人写的,也许以前也从未用过任何版本控制工具。
1.1 什么是CVS?
CVS是个版本控制系统,使用它你可以记录你原代码文件的历史。
例如,当软件修改时有时会产生问题(*bugs这里被译为问题),并且你可能在做这
次修改后很长时间不会发现这些问题。使用CVS,你可以容易地回顾老的代码版本去
发现哪一次的修改导致这些问题。有时候这样会非常有帮助。
你可能会保留你每一次的代码版本,这可能会浪费你很多的代码空间。CVS使用一
种聪明的办法保存你的多个版本在一个文件中。它仅仅保留版本间的不同内容。如果
你是一个项目中的一组成员之一,CVS也能够帮助你。除非你特别仔细,你很容易覆盖其
他人的工 作。一些编辑器,例如GNUEmacs,试图去判定一个文件是否被两人同时修改。
不幸的是,如果一个人使用其它的编辑器时,这个安全方式将不再有效。CVS使用让不同
开发者独立工作的方式解决了这个问题。每一个开发者的工作都在他自己的目录内,并且
CVS将 在每个开发者的工作完成后进行合并工作。
CVS是由Dick Grune作为Shell脚本的一个分支而创建的,1986年10月,在它的第6个发行卷
时,它被投递到新闻组comp.soures.unix。然而现在的CVS冲突算法中没有任何代码是从这
些脚本中来的。
在1989年3月,Brian Berlinor设计并编写了CVS的代码。Jett.Polk在以后帮助 Brian 完成了CVS
模型的设计和商业版本支持。
你可以通过不同的方式得到CVS,包括在Internet上自由的下载。如果你想下载CVS和其它CVS
文章以得到更多的信息,请看:
http://www.cyxlic.com
http://www.loria.fr/~molli/cvs-index.html.
有一个叫 info-cvs 的邮件列表是有关CVS的内容。订阅或取消订阅这个列表请发邮件到
info-cvs-request@gnu.org
如果你更喜欢Usenet新闻组,CVS的讨论组为
Comp.software.confg.mgmt.
在将来也许会建一个
Comp.software.confg.mgmt.cvs
的新闻组,
但也许这会是Comp.software.confg.mgmt在有太多讨论之后的事情吧。
你也许想订阅bug-cvs的邮件列表,这在附录H[BUGS]中有更多的信息。订阅它请发Email到
bug-cvs-reqnest@gnu.org.
1.2 CVS不能做的事
(未译)
2
3 使用CVS开始一个项目
因为更改文件名并且把它们移动到另一个目录中不是经常发生的,因此你在开始一个新项
目时要做的第一件事是考虑你的文件组织。更改文件名或移动文件并非不可能,但增加了
理解上潜在的费解,并且CVS在更改名字的目录上特别的敏感。请参见7.4节[移动文件]。
(* 译者注: 在Unix中改名和移动是相同的)。
下一步做的事取决于手中的情况。
3.1 建立文件
第一步是在仓库中建立文件。这可以使用多种不同的方法来完成。
3.1.1 建立一个目录树
当你开始使用CVS时,你可能已经有几个项目可以使用CVS进行管理了。在这种情况下,
最容易的方法就是使用: "import"命令。一个例子是最容易解释如何使用它的。假定你现
在有一些你想放到CVS中的文件在"wdir"中,并且你想让它们放在数据仓库中的如下目录:
"$CVSROOT/yoyodyne/rdir"
你可以使用如下命令:
$cd wdir
$cvs inport -m "Inported Sources" yoyodyne/rdir yoyo start
如果你没有使用"-m"参数记录一个日志信息,CVS将调用一个编辑器(*译者注:通常是vi)
并且提示输入信息。"yoyo"字符串是开发者标笺,"start"是发行标笺。他们没有什么特别
的意义,仅仅是因为CVS的需要才放在这里。
请参见第13章[跟踪代码],得到更多的这方面信息。
你现在可以检查一下它是否有效了,然后可以删除你原来的代码目录。
$cd
$mv dir dir.orig
$cvs checkout yoyodyne/dir
$diff -r dir.orig yoyodyne/dir
$rm -r dir.orig.
为了避免偶然进入到你原来的目录中去编辑文件,删除原来的代码是个好主意。当然,在
你删除之前保留一份备份到其它地方也是明智之举。
"checkout"命令能使用模块名作为参数(正如前面所有例子)或是一个相对于$CVSROOT的路
径,如同上面的例子。你应当检查CVS目录中的权限情况是否合适,应当使它们属于某一个
特定的组。请参见2.2.2.节[文件权限]。
如果你想"import"的一些文件是二进制代码,你可以使用一些特殊的方法表明这些文件是否
是二进制文件。请参见C.2节[Wrappers]。
3.1.2 从其它版本控制系统建立文件
如果你有一个其它版本控制系统维护的项目,例如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中去。下面提到的"sccsarcs"脚本就是一个很好的例子。
从SCCS:
有一个"sccsarcs"的脚本文件可以做把SCCS的文件转化成RCS文件,这个文件放在CVS原代码
目录的"contrib"目录中。注意:
你必须在一台同时安装了RCS和SCCS的机器上运行它。并且,正如其它在"contrib."目录中的
其它脚本一样。(你的方法也许是变化多端的)
(*译者注:我并未查看过CVS的contrib目录:-(,因此不知道这下面都有些什么)。
从PVCS:
在"contrb"中有一个叫"pves-to-rcs"的脚本可以转换PVCS到RCS文件。你必须在一台同时有
PVCS和RCS的机器上运行它。
请看脚本中的注释以得到更多细节。
3.1