本文档尚在编写中,内容可能会发生很大变化,可能无法准确描述 Apache™ Subversion® 软件的任何已发布版本。将此页面加入书签或将其推荐给他人可能不是一个明智的选择。请访问 https://svnbook.subversion.org.cn/ 以获取本书的稳定版本。

二进制文件和翻译

从最普遍的意义上讲,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 猜错了,用户始终可以删除或手动编辑该属性。)

TortoiseSVN 官方中文版 1.14.7 发布