### 二进制文件和转化 在大多数情况下,Subversion比CVS更好的处理二进制文件,因为CVS使用RCS,它只可以存储二进制文件的完整拷贝,但是,从内部原理上讲,Subversion使用二进制区别算法来表示文件的区别,而不管文件是文本文件还是二进制文件。这意味着所有的文件是以微分的(压缩的)形式存放在版本库,小的区别会通过网络传输。 CVS用户需要使用`-kb`选项来标记二进制文件,防止数据的混淆(因为关键字解释和行结束转化),他们有时候会忘记这样做。 Subversion使用更加异想天开的方法:第一,如果你不明确的告诉它(详情见[“`svn:keywords`”一节](# "svn:keywords")和[“`svn:eol-style`”一节](# "svn:eol-style"))这样做,它不会做任何关键字或行结束转化的操作,缺省情况下Subversion会把所有的数据看作字节串,所有的储存在版本库的文件都处于未转化的状态。 第二,Subversion维护了一个内部的概念来区别一个文件是“文本”还是“二进制”文件,但这个概念*只*在工作拷贝非常重要,在**svn update**,Subversion会对本地修改的文本文件执行上下文的合并,但是对二进制文件不会。 为了检测一个上下文的合并是可能的,Subversion检测`svn:mime-type`属性,如果没有`svn:mime-type`属性,或者这个属性是文本的(例如`text/*`),Subversion会假定它是文本的,否则Subversion认为它是二进制文件。Subversion也会在**svn import**和**svn add**命令时通过运行一个二进制检测算法来帮助用户。这些命令会做出很好的猜测,然后(如果可能)设置添加文件的`svn:mime-type`属性。(如果Subversion猜测错误,用户可以删除或手工编辑这个属性。)