本手册旨在描述 Subversion 1.2。如果您正在运行更新版本的 Subversion,我们强烈建议您访问 https://svnbooks.subversion.org.cn/ 并查阅适合您 Subversion 版本的书籍。
从最广泛的意义上说,Subversion 比 CVS 更优雅地处理二进制文件。由于 CVS 使用 RCS,它只能存储更改的二进制文件的连续完整副本。然而,Subversion 使用二进制差异算法来表达文件之间的差异,无论它们包含文本数据还是二进制数据。这意味着所有文件都以差异方式(压缩)存储在存储库中。
CVS 用户必须使用 -kb
标志标记二进制文件,以防止数据被破坏(由于关键字扩展和行尾转换)。他们有时会忘记这样做。
Subversion 采取了更偏执的路线——首先,它永远不会执行任何类型的关键字或行尾转换,除非您明确要求它这样做(请参阅 名为“svn:keywords
”的部分 和 名为“svn:eol-style
”的部分 了解更多详细信息)。默认情况下,Subversion 将所有文件数据视为字面字节字符串,并且文件始终以未翻译的状态存储在存储库中。
其次,Subversion 保持对文件是“文本”还是“二进制”数据的内部概念,但这个概念 仅 存在于工作副本中。在 svn update 期间,Subversion 将对本地修改的文本文件执行上下文合并,但不会尝试对二进制文件执行此操作。
为了确定上下文合并是否可行,Subversion 会检查 svn:mime-type
属性。如果文件没有 svn:mime-type
属性,或者具有文本 mime 类型(例如 text/*
),Subversion 假设它是文本。否则,Subversion 假设文件是二进制文件。Subversion 还通过在 svn import 和 svn add 命令中运行二进制检测算法来帮助用户。这些命令将做出一个很好的猜测,然后(可能)在要添加的文件上设置二进制 svn:mime-type
属性。(如果 Subversion 猜错了,用户始终可以删除或手动编辑属性。)