b.二进制文件和行结束标记转换

Posted on Posted in 附录b

二进制文件和行结束标记转换

在大多数情况下,Subversion比CVS更好的处理二进制文件,因为CVS使用RCS,它只可以存储二进制文件的完整拷贝,但是,Subversion使用二进制区别算法来表示文件的区别,而不管文件是文本文件还是二进制文件。这意味着所有的文件是以微分的(压缩的)形式存放在版本库。

CVS用户需要使用-kb选项来标记二进制文件,防止数据的混淆(因为关键字解释和行结束转化),他们有时候会忘记这样做。

Subversion使用更加异想天开的方法—第一,如果你不明确的告诉它(详情见“关键字替换”一节“行结束字符串”一节)这样做,它不会做任何关键字或行结束转化的操作,缺省情况下Subversion会把所有的数据看作字节串,所有的储存在版本库的文件都处于未转化的状态。

第二,Subversion维护了一个内部的概念来区别一个文件是“文本”还是“二进制”文件,但这个概念在工作拷贝非常重要,在svn update,Subversion会对本地修改的文本文件执行上下文的合并,但是对二进制文件不会。

为了检测一个上下文的合并是可能的,Subversion检测svn:mime-type属性,如果没有svn:mime-type属性,或者这个属性是文本的(例如text/*),Subversion会假定它是文本的,否则Subversion认为它是二进制文件。Subversion也会在svn importsvn add命令时通过运行一个二进制检测算法来帮助用户。这些命令会做出很好的猜测,然后(如果可能)设置添加文件的svn:mime-type属性。(如果Subversion猜测错误,用户可以删除或手工编辑这个属性。)