本手册用于描述 Subversion 1.2。如果您正在运行更新版本的 Subversion,我们强烈建议您访问 https://svnbooks.subversion.org.cn/ 并查阅适合您 Subversion 版本的书籍。
目录
WebDAV 是 HTTP 的扩展,作为文件共享的标准越来越流行。如今的操作系统正在变得越来越 Web 化,许多操作系统现在都内置了支持挂载 WebDAV 服务器导出的“共享”。
如果您使用 Apache/mod_dav_svn 作为 Subversion 网络服务器,那么在某种程度上,您也运行着 WebDAV 服务器。本附录介绍了该协议的本质、Subversion 如何使用它以及 Subversion 与其他 WebDAV 兼容软件的互操作性。
本节简要概述了 WebDAV 背后的理念。它将为理解客户端和服务器之间的 WebDAV 兼容性问题奠定基础。
RFC 2518 定义了一组概念和相应的 HTTP 1.1 扩展方法,这些方法使 Web 成为更加通用的读写媒介。基本理念是 WebDAV 兼容的 Web 服务器可以充当通用的文件服务器;客户端可以挂载共享文件夹,这些文件夹的行为类似于 NFS 或 SMB 文件系统。
然而,悲剧的是,RFC 2518 WebDAV 规范没有提供任何版本控制模型,尽管 DAV 中包含了“V”。基本的 WebDAV 客户端和服务器假定每个文件或目录仅存在一个版本,并且可以重复覆盖。
以下是基本 WebDAV 中介绍的概念和术语:
WebDAV 术语将任何服务器端对象(可以用 URI 描述)称为资源。
除了标准的 HTTP PUT
方法(创建或覆盖 Web 资源)之外,WebDAV 还定义了新的 COPY
和 MOVE
方法,用于复制或重新排列资源。
集合是 WebDAV 术语,用于指代资源的集合。在大多数情况下,它类似于目录。文件资源可以用 PUT
方法写入或创建,而集合资源可以用新的 MKCOL
方法创建。
这与 Subversion 中的概念相同——附加到文件和集合的元数据。客户端可以使用新的 PROPFIND
方法列出或检索附加到资源的属性,并可以使用 PROPPATCH
方法更改它们。某些属性完全由用户创建和控制(例如,名为“color”的属性),而其他属性完全由 WebDAV 服务器创建和控制(例如,包含文件的最后修改时间的属性)。前者称为死属性,后者称为活属性。
WebDAV 服务器可能会决定向客户端提供锁定功能——规范的这部分是可选的,但大多数 WebDAV 服务器都提供了此功能。如果存在,则客户端可以使用新的 LOCK
和 UNLOCK
方法来协调对资源的访问。在大多数情况下,这些方法用于创建独占写锁(如 “锁定-修改-解锁解决方案”部分中所述),但一些服务器实现也允许共享写锁。
更近期的规范 (RFC 3744) 定义了一个系统,用于定义 WebDAV 资源的访问控制列表 (ACL)。一些客户端和服务器已开始实现此功能。
由于 RFC 2518 遗漏了版本控制概念,因此另一个委员会负责编写 RFC 3253,该规范将版本控制添加到 WebDAV,即“DeltaV”。WebDAV/DeltaV 客户端和服务器通常被称为“DeltaV”程序,因为 DeltaV 意味着存在基本的 WebDAV。
DeltaV 引入了一系列新的首字母缩略词,但不要害怕。这些概念非常简单。
与 CVS 和其他版本控制系统一样,DeltaV 假设每个资源都有无限数量的状态。客户端首先使用新的 VERSION-CONTROL
方法将资源置于版本控制之下。
一些 DeltaV 服务器支持在服务器上创建虚拟工作区的功能,所有工作都在该工作区中执行。客户端使用 MKWORKSPACE
方法创建私有区域,然后通过“检出”特定资源到工作区、编辑它们并“检入”它们来指示它们想要更改这些资源。在 HTTP 术语中,方法的顺序将是 CHECKOUT
、PUT
、CHECKIN
。
一些 DeltaV 服务器还支持客户端可能在本地磁盘上拥有私有工作副本的想法。当客户端想要将更改提交到服务器时,它首先使用 MKACTIVITY
方法创建一个临时服务器事务(称为活动)。然后,客户端对要更改的每个资源执行 CHECKOUT
操作,并发送 PUT
请求。最后,客户端执行 CHECKIN
资源,或发送 MERGE
请求以一次检入所有资源。
DeltaV 允许您定义灵活的资源集合,称为“配置”,它们不一定对应于特定目录。配置可以指向文件的特定版本,然后可以创建“基线”快照,类似于标签。
DeltaV 定义了一种新方法 REPORT
,它允许客户端和服务器执行自定义数据交换。虽然 DeltaV 定义了客户端可以请求的许多标准化历史报告,但服务器也可以自由地定义自定义报告。客户端发送一个带有适当标签的 XML 主体的 REPORT
请求,其中包含自定义数据;如果服务器理解特定的报告类型,则它会使用同样自定义的 XML 主体进行响应。此技术非常类似于 XML-RPC。