下一个: A sample session, 上一个: What is CVS?, 上层: Overview
cvs 可以为你做很多,但不要指望它能为每一个人做每一件事情。
cvs 不能指导你如何构造什么。 它只是将你所设计的一种树结构文件保存下来以备恢复之用。
cvs 不能决定如何在一个检出工作目录使用磁盘空间。 如果你在每一个目录中都写下 Makefile 或脚本,且必须知道其它一切的相对位置,有时不得不要检出整个仓库。
如果你将你的工作模块化,并且建立了一个共享文件的 build 系统(通过links,mounts,Makefiles
里的 VPATH
等),你就可以随意安排磁盘的使用。
不过你要记住构建和维护这样一个系统是要做许多工作的。 而 cvs 不善此道。
当然了,你应该在 cvs 下放一个工具来支持这样一个构造系统(脚本、Makefile 等等)。
当有些变化发生在 cvs 范围之外时,要想想什么文件需要重建。
一个传统的方法是用 make
来构造,并用一些自动化的工具来产生 make
所用的相关文件。
关于结合cvs进行 build,请参考Builds。
cvs 只是一个用来使你的资源与你的步调一致的工具。但你是风笛手和作曲家。
没有哪种乐器会自己演奏或是作曲。
当在一个文件内或多个文件中同时发生变化时,cvs 并不知道何时它们会在逻辑上发生冲突。
它的冲突(conflict)概念是纯粹文本意义上的,这种冲突会在同一个文件的两种变化十分接近以致于会破坏合并命令(如 diff3
)。
cvs 决不会指出程序逻辑上非文本或分布式的冲突。
例如:假如你改变了在文件 A 中定义的函数 X
的参数。
同时,别人在编辑文件 B,仍用旧参数调用 X
这个函数。
此时产生的冲突 cvs 可就无能为力了。
要养成经常阅读说明书和经常与你的同伴交谈的习惯。
变化控制的另一个方面指跟踪这样的情况,即对好几个文件的改变实际上只是同一个逻辑变动。
如果你在一次 cvs commit
操作中检入几个文件,cvs 会忘掉它们是一起检入的,它们共用一个 LOG 信息的事实只是把它们绑在一起而已。
做一个 gnu 风格的 ChangeLog 可能会有点用。
在一些系统中,变化控制的另一个方面是跟踪每个变化的状态的能力。
一些变化由一个开发者写出,而另一些变化则由另一个开发者来作出评论,等等。
一般来讲,用 cvs 来做,是产生一个 diff(用 cvs diff
或 diff
),并且用电子邮件寄给某人,此人就可以用 patch
来应用它。
这是非常灵活的,但依赖于 cvs 之外的机制以保证事情不会崩溃。
commitinfo
文件测试套件应该是可能的。
不过我没有听说过多少项目试图那样做或那里有微妙的陷阱。