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

定义 Subversion 仓库

在深入探讨仓库管理这一更广泛的主题之前,让我们进一步定义什么是仓库。它长什么样?感觉如何?它喜欢喝热茶还是冰茶,加糖还是不加糖,加柠檬吗?作为管理员,您需要从字面上的操作系统级别视角(仓库在非 Subversion 工具中如何显示和运行)以及逻辑视角(处理数据在 内部 仓库中的表示方式)来理解仓库的组成。

通过典型的文件浏览器应用程序(如 Windows 资源管理器)或基于命令行的文件系统导航工具查看,Subversion 仓库只是一个充满各种内容的目录。其中有一些子目录包含人类可读的配置文件,一些子目录包含一些不可读的人类数据文件,等等。与 Subversion 设计的其他领域一样,模块化受到高度重视,分层组织优于杂乱无章。因此,从螺母和螺栓的角度浅层地看一下典型的仓库就足以揭示仓库的基本组成部分。

$ ls repos
conf/  db/  format  hooks/  locks/  README.txt

以下是对您在此目录列表中看到的内容的快速概述。(不要陷入术语的泥潭 - 对这些组件的详细介绍在本节和其他章节中都有)。

conf

包含配置文件的目录

db

所有版本化数据的存储

format

包含一个整数的文件,该整数指示仓库布局的版本号

hooks

一个充满钩子脚本模板的目录(以及您安装了一些钩子脚本后的一些钩子脚本本身)

locks

用于 Subversion 仓库锁文件的目录,用于跟踪仓库的访问者

README.txt

一个文件,其内容仅仅告知其读者他们正在查看一个 Subversion 仓库

[Note] 注意

在 Subversion 1.5 之前,磁盘上的仓库结构还始终包含一个 dav 子目录。 mod_dav_svn 使用此目录存储有关 WebDAV 活动的信息 - 将高级 WebDAV 协议概念映射到 Subversion 提交事务。Subversion 1.5 更改了这种行为,将活动目录的所有权以及配置其位置的能力移入了 mod_dav_svn 本身。现在,新的仓库不一定会有一个 dav 子目录,除非 mod_dav_svn 正在使用,并且尚未配置为将活动数据库存储在其他位置。有关更多信息,请参阅 名为“指令”的部分

当然,通过 Subversion 库访问时,这个原本平淡无奇的文件和目录集合突然变成了一个虚拟版本化文件系统的实现,具有可定制的事件触发器。此文件系统有自己对目录和文件的理解,非常类似于真实文件系统(如 NTFS、FAT32、ext3 等)对这些内容的理解。但这是一种特殊的文件系统 - 它将这些目录和文件从修订版本中挂起,将您对它们进行的所有更改安全地存储起来,并永远可以访问。这就是所有版本化数据存储的地方。