### 附录C.WebDAV和自动版本化
**目录**
WebDAV是HTTP的一个扩展,作为一个文件共享的标准不断发展。当今的操作系统变得极端的web化,许多内置了对装配WebDAV服务器导出的“共享”的支持。
如果你使用Apache/mod_dav_svn作为你的Subversion网络服务器,某种程度上,你也是在运行一个WebDAV服务器。这个附录提供了这种协议一些背景知识,Subversion如何使用它,Subversion如何和认识WebDAV的软件交互工作。
### WebDAV基本概念
这个小节提供了对WebDAV背后思想的一个非常简短和普通的总体看法,为理解WebDAV在客户端和服务器之间的兼容性问题打下基础。
### 仅是平常的WebDAV
RFC 2518为HTTP 1.1定义了一组概念和附加扩展方法来把web变成一个更加普遍的读/写媒体,基本思想是一个WebDAV兼容的web服务器可以像普通的文件服务器一样工作;客户端可以装配类似于NFS或SMB的WebDAV“共享”。
然而,必须注意到RFC 2518并*没有*提供任何版本控制模型,尽管DAV中有“V”。基本的DAV客户端和服务器只是假定每个文件或目录只有一个版本存在,可以重复的覆盖。
这是基本的WebDAV引入的新概念和方法:
新的写方法
超出了标准HTTP的`PUT`方法(用来创建和覆盖web资源),WebDAV定义了新的`COPY`和`MOVE`方法用来复制或重新组织资源。
集合
这是一个简单的WebDAV术语用来表示一组资源(URI),在大多数情况下,你可以说以“/”结尾的东西是一个集合,文件资源可以使用`PUT`方法写或创建,而集合资源使用`MKCOL`方法创建。
属性
这与Subversion中是同一个思想―附加在文件和集合上的元数据,一个客户端可以使用新方法`PROPFIND`列出或检索附加在一个资源上的属性,也可以使用`PROPPATCH`方法修改这些属性。一些属性是完全由用户控制的(例如,一个“color”属性),还有一些是WebDAV服务器创建和控制的(例如,一个保存文件最后修改时间的属性)。前一种叫做“dead”属性,后一种叫做“live”属性。
锁定
WebDAV服务器可以决定为客户端提供一个锁定特性―这部分的规范是可选的,尽管大多数WebDAV服务器提供了这个特性。如果提供这个特性,客户端可以使用新的`LOCK`和`UNLOCK`方法来调节访问资源的过程,在大多数情况下是使用独占写锁(在[“锁定-修改-解锁 方案”一节]讨论的),尽管共享写锁也是可以的。
### DeltaV扩展
因为RFC 2518漏下了版本概念,另一个小组留下来负责撰写RFC 3253来添加WebDAV的版本化。WebDAV/DeltaV客户端和服务器经常叫做“DeltaV”客户端和服务器,因为DeltaV暗含了基本的WebDAV。
DeltaV引入了完全的新的首字母缩写,但并不是被逼迫的。想法相当的直接,如下是DeltaV引入的新概念和方法:
每资源的版本化
像CVS和其他版本控制系统,DeltaV假定每个资源有一个潜在的无穷的状态,一个客户端可以使用`VERSION-CONTROL`放置一个版本控制之下的资源,这创建了一个新的版本控制资源(VCR),每次你修改VCR(通过`PUT`、`PROPPATCH`等),这个资源的新状态就会创建,叫做一个版本资源(Version Resource,VR)。VCR和VR还是普通的web资源,使用URL定义,特定的VR也会拥有易读的名字。
服务器端的工作拷贝模型
一些DeltaV服务器支持在服务器创建虚拟“工作区”,所有的工作在这里执行。客户端使用`MKWORKSPACE`方法来创建私有区域,然后他们说明修改特定的VCR,“把它们检出到”工作拷贝,编辑,然后再次“检入”。在HTTP术语里,方法的顺序可能是`CHECKOUT`、`PUT`、`CHECKIN`,会创建一个新的VR,每个VCR也有一个“历史”资源用来追踪和排序它的各种VR状态。
客户端工作拷贝模型
一些DeltaV服务器也支持客户端可以有完全特定VR的私有工作拷贝的思想,(这就是CVS和Subversion的工作原理。)当客户端希望提交修改到服务器,它通过使用`MKACTIVITY`方法创建一个临时服务器事务(叫做一个活动)开始。然后客户端在每个希望修改的VR上执行一个`CHECKOUT`操作,这在活动里创建了一些临时“工作资源”,然后可以使用`PUT`和`PROPPATCH`方法修改。最后,客户端对每个工作资源执行一个`CHECKIN`,在每个VCR创建了一个VR,并且整个活动会被删除。
配置
DeltaV允许你定义叫做“配置”的灵活的VCR集合,不需要对应特定的目录,每个VCR的内容可以使用`UPDATE`方法指向特定的VR。一旦配置是理想的,客户端可以创建一个整个配置的“快照”,叫做“基线”。客户端使用`CHECKOUT`和`CHECKIN`方法捕捉特定的配置状态,很像它们使用这些方法创建VCR的特定VR状态。
扩展性
DeltaV定义了新方法`REPORT`,允许客户端和服务器执行自定义的数据交换。客户端发送一个带有包含自定义数据的完全标记的XML主体的`REPORT`请求;假定服务器理解特定的报告类型,它使用一个等同的XML主体来响应,这个技术与XML-RPC很类似。
自动版本化
对大多数,这是DeltaV的“杀手”特性,如果DeltaV服务器支持这个特性,然后基本的WebDAV客户端(例如,那些不知道版本化的客户端)仍然可以对服务器进行写操作,服务器可以悄无声息的执行版本操作。在最简单的例子里,一个从基本的WebDAV客户端发送的无知的`PUT`可能会被服务器转化为`CHECKOUT`、`PUT`、`CHECKIN`。
因为这个原因,一些人开玩笑说WebDAV的客户端是“WebDA”客户端!
- 第1章介绍
- Subversion的历史
- Subversion的特性
- Subversion的架构
- 安装Subversion
- Subversion的组件
- 快速入门
- 第2章基本概念
- 版本模型
- Subversion实战
- 摘要
- 第3章指导教程
- 导入
- 修订版本: 号码、关键字和日期,噢,我的!
- 初始化的Checkout
- 基本的工作周期
- 检验历史
- 其他有用的命令
- 摘要
- 第4章分支与合并
- 使用分支
- 在分支间拷贝修改
- 常见用例
- 转换工作拷贝
- 标签
- 分支维护
- 摘要
- 第5章版本库管理
- 版本库的创建和配置
- 版本库维护
- 添加项目
- 摘要
- 第6章配置服务器
- 网络模型
- svnserve,一个自定义的服务器
- httpd,Apache的HTTP服务器
- 支持多种版本库访问方法
- 第7章高级主题
- 属性
- Peg和实施修订版本
- 外部定义
- 卖主分支
- 本地化
- Subversion版本库URL
- 第8章开发者信息
- 使用API
- 进入工作拷贝的管理区
- WebDAV
- 使用内存池编程
- 为Subversion做贡献
- 第9章Subversion完全参考
- svn add
- svn blame
- svn cat
- svn checkout
- svn cleanup
- svn commit
- svn copy
- svn delete
- svn diff
- svn export
- svn help
- svn import
- svn info
- svn list
- svn log
- svn merge
- svn mkdir
- svn move
- svn propdel
- svn propedit
- svn propget
- svn proplist
- svn propset
- svn resolved
- svn revert
- svn status
- svn switch
- svn update
- svnadmin
- svnadmin create
- svnadmin deltify
- svnadmin dump
- svnadmin help
- svnadmin hotcopy
- svnadmin list-dblogs
- svnadmin list-unused-dblogs
- svnadmin load
- svnadmin lstxns
- svnadmin recover
- svnadmin rmtxns
- svnadmin setlog
- svnadmin verify
- svnlook
- svnlook author
- svnlook cat
- svnlook changed
- svnlook date
- svnlook diff
- svnlook dirs-changed
- svnlook help
- svnlook history
- svnlook info
- svnlook log
- svnlook propget
- svnlook proplist
- svnlook tree
- svnlook uuid
- svnlook youngest
- svnserve
- svnversion
- mod_dav_svn Configuration Directives
- 附录A.Subversion对于CVS用户
- 目录的版本
- 更多离线操作
- 区分状态和更新
- 分支和标签
- 元数据属性
- 冲突解决
- 二进制文件和转化
- 版本化的模块
- 认证
- 转化CVS版本库到Subversion
- 附录C.WebDAV和自动版本化
- 自动版本化交互性
- Subversion和DeltaV
- 术语表