本文档描述了 Subversion 的 1.6.x 系列。如果您正在运行不同版本的 Subversion,强烈建议您访问 https://svnbook.subversion.org.cn/,并查阅适合您 Subversion 版本的文档。

二进制文件和翻译

从最广泛的意义上讲,Subversion 处理二进制文件的方式比 CVS 更优雅。由于 CVS 使用 RCS,它只能存储不断变化的二进制文件的连续完整副本。然而,Subversion 使用二进制差异算法来表达文件之间的差异,无论它们包含文本数据还是二进制数据。这意味着所有文件都以差分方式(压缩)存储在存储库中。

CVS 用户必须使用 -kb 标志标记二进制文件,以防止数据被破坏(由于关键字扩展和行结束符转换)。他们有时会忘记这样做。

Subversion 采取了更谨慎的路线。首先,它永远不会执行任何类型的关键字或行结束符转换,除非您明确要求它这样做(有关详细信息,请参阅 名为“关键字替换”的部分名为“行结束符序列”的部分)。默认情况下,Subversion 将所有文件数据视为字面字节字符串,并且文件始终以未经翻译的状态存储在存储库中。

其次,Subversion 保持着关于文件是 文本 还是 二进制 数据的内部概念,但这种概念 存在于工作副本中。在 svn update 期间,Subversion 将对本地修改的文本文件执行上下文合并,但不会尝试对二进制文件执行此操作。

为了确定是否可以进行上下文合并,Subversion 会检查 svn:mime-type 属性。如果文件没有 svn:mime-type 属性,或者具有文本 MIME 类型(例如,text/*),Subversion 将假定它是文本。否则,Subversion 将假定该文件是二进制的。Subversion 还通过在 svn importsvn add 命令中运行二进制检测算法来帮助用户。这些命令将做出良好的猜测,然后(可能)在要添加的文件上设置二进制 svn:mime-type 属性。(如果 Subversion 猜测错误,用户始终可以删除或手动编辑该属性。)