使用CVS来存贮二进制文件有两个问题。第一是默认情况下,CVS将会在源码库的规范保存形式(只有换行符)和客户端使用的操作系统合适形式(例如Windows NT中回车符跟在换行符后面)之间进行行尾转换。
第二是一个二进制文件有可能会包含有看起来像关键字[第 12 章]的数据,所以关键字扩展必须关闭。
在一些CVS命令中使用的选项-kb,可以确保CVS不进行行尾转换和关键字扩展。
下面一个例子说明如何使用-kb标志创建一个新的文件:
$ echo '$Id$' > kotest $ cvs add -kb -m"A test file" kotest $ cvs ci -m"First checkin; contains a keyword" kotest |
如果一个文件意外地没有用-kb添加,你可以使用cvs admin命令去恢复。例如:
$ echo '$Id$' > kotest $ cvs add -m"A test file" kotest $ cvs ci -m"First checkin; contains a keyword" kotest $ cvs admin -kb kotest $ cvs update -A kotest # For non-unix systems: # Copy in a good copy of the file from outside CVS $ cvs commit -m "make it binary" kotest |
当你提交kotest文件时,这个文件不使用二进制形式保存,因为你并没有当成二进制文件提交。cvs admin -kb命令默认地为这文件设置关键字替换方法,但它并不改变你拥有的这个文件的工作副本。如果你需要处理行尾(也就是说,你在一个非unix系统中使用CVS),那么你需要提交文件的新副本,如上面cvs commit命令所示。在Unix中可使用cvs update -A命令实现。
虽然如此,在使用cvs admin -k来改变关键字扩展时,记住关键字扩展模式是不会受版本控制的。这就是说,例如,如果你有一个旧版本的文本文件以及一个相同名字的新版本的二进制文件,CVS没办法根据你要取出的版本取出文本模式或是二进制模式的文件。现在还没有很好的办法解决这个问题。
你也可以设置默认值,让cvs add和cvs import根据名字来决定文件是否以二进制模式处理;例如,你可以让文件名以.exe结尾是二进制的。[cvswrappers文件 在 附录 C]。现在没有办法让CVS根据内容检测一个文件是否为二进制。设计这样一个特性的主要困难是,二进制和非二进制文件之间的区别并非明确的,且使用的准则随操作系统而有很大的不同。