本手册旨在描述 Subversion 1.6.x 系列。如果您运行的是其他版本的 Subversion,我们强烈建议您访问 https://svnbook.subversion.org.cn/,并查阅适合您 Subversion 版本的文档。

工作副本管理区域内部

如前所述,Subversion 工作副本中的每个目录都包含一个名为 .svn 的特殊子目录,其中包含有关该工作副本目录的管理数据。Subversion 使用 .svn 中的信息来跟踪以下内容:

Subversion 工作副本管理区域的布局和内容被认为是实现细节,并非真正面向人类使用。鼓励开发人员使用 Subversion 的公共 API 或 Subversion 提供的工具来访问和操作工作副本数据,而不是直接读取或修改这些文件。工作副本库用于管理数据的文件格式会不时发生变化,而公共 API 很好地将此变化隐藏在普通用户面前。在本节中,我们将展示一些这些实现细节,仅仅是为了满足您强烈的求知欲。

Entries 文件

也许 .svn 目录中最重要的文件是 entries 文件。它包含关于工作副本目录中版本化项的大部分管理信息。此文件跟踪存储库 URL、原始版本、文件校验和、原始文本和属性时间戳、调度和冲突状态信息、最后已知的提交信息(作者、版本、时间戳)、本地副本历史记录,几乎所有 Subversion 客户端都希望了解有关版本化(或要版本化)资源的信息!

熟悉 CVS 管理目录的人会注意到,Subversion 的 .svn/entries 文件起到了 CVS 的 CVS/EntriesCVS/RootCVS/Repository 文件的组合作用。

.svn/entries 文件的格式随着时间的推移发生了变化。最初是一个 XML 文件,现在使用自定义格式,尽管仍然可读。虽然 XML 对于 Subversion 的早期开发者来说是一个很好的选择,他们经常调试文件的内容(以及 Subversion 针对这些内容的行为),但随着 Subversion 的成熟,对轻松开发者调试的需求已经减弱,并被用户对更快性能的需求所取代。请注意,Subversion 的工作副本库会自动将工作副本从一种格式升级到另一种格式,它会读取旧格式并写入新格式,这可以免去您签出新工作副本的麻烦,但也可能使不同版本的 Subversion 尝试使用相同工作副本的情况变得复杂。

原始副本和属性文件

如前所述,.svn 目录还包含文件的原始 text-base 版本。您可以在 .svn/text-base 中找到它们。这些原始副本的好处有很多,比如无网络本地修改检查和差异报告、无网络修改或丢失文件的还原、更有效地将更改传输到服务器,但它们需要在磁盘上至少存储两次每个版本化的文件。如今,对于大多数文件来说,这似乎是一个可以忽略不计的代价。但是,随着版本化文件大小的增加,情况变得更糟。一些人正在关注将 text-base 的存在作为一种选择。具有讽刺意味的是,随着版本化文件大小的增加,text-base 的存在变得更加重要,谁愿意仅仅因为要对一个大型文件进行微小的更改而将它传输到网络上?

text-base 文件类似的是属性文件及其原始 prop-base 副本,分别位于 .svn/props.svn/prop-base 中。由于目录也可以有属性,因此还有 .svn/dir-props.svn/dir-prop-base 文件。