### 自动版本化交互性
在这个小节,我们会描述最普通的原始WebDAV客户端(写作的时刻),和它们是如何与使用`SVNAutoversioning`指示的mod_dav_svn服务器的运作。RFC 2518是一个有点大,并且有一点太灵活。每个WebDAV客户端的行为都有些许区别,并且产生许多不同的小问题。
### Win32网络文件夹
Windows 98、2000和XP有一个集成的WebDAV客户端叫做“网络文件夹”,在Windows 98,这个特性需要明确安装;如果提供,一个“网络文件夹”就会出现在我的电脑,在Windows 2000和XP,只需要简单得打开我的网络位置,运行添加网络位置图标。当出现提示,输入一个WebDAV的URL,我的网络位置中就会出现一个共享文件夹。
大多数写操作对于自动版本化的mod_dav_svn服务器工作正常,但是有一些问题:
-
如果一个Windows XP电脑是一个NT域的成员,它看起来不能连接到WebDAV共享,重复提示要输入用户名和密码,即使Apache服务器没有要求进行认证!如果这个机器不是NT域的一部分,这个共享可以成功装载。
这个问题源于Windows XP创建网络文件夹快捷方式(`.lnk`文件)的方法的bug。它有时候会使用“UNC” (Universal Naming Convention) 路径来代替WebDAV共享URL,这导致资源管理器尝试使用SMB而不是HTTP来进行连接。
这个问题的解决方法是在Windows 2000创建`.lnk`快捷方式,然后拷贝到Windows XP电脑,如果有人可以逆转`.lnk`文件的格式,也可以使用十六进制编辑器来“修正”快捷方式。
-
一个文件不可以直接在共享中打开编辑;它可能一直是只读的。mod_dav_lock技术也无能为力,因为网络文件夹根本不使用`LOCK`方法,前面提到的“拷贝、编辑和再拷贝”根本不工作。在共享中的文件可以成功的被本地修改的拷贝覆盖。
### Mac OS X
Apple的OS X操作系统也集成了WebDAV客户端,从Finder选择Go菜单的“Connect to Server”,输入一个WebDAV的URL,它会作为一个磁盘在桌面出现,就像任何文件服务器。
很不幸,客户端拒绝与一个自动版本化的mod_dav_svn工作,因为它缺乏`LOCK`支持,Mac OS X在初始化HTTP的`OPTIONS`特性交换时会发现缺失了`LOCK`能力,因而决定以只读方式装配Subversion版本库,之后,不可以进行写操作。为了将版本库按照读写方式装配,你*必须*使用前面讨论的mod_dav_lock技巧。一旦锁定看起来工作了,共享会运作良好:文件可以直接以读/写模式打开,尽管每次存储操作会导致客户端对临时位置执行一个`PUT`,对原文件的`DELETE`操作和把临时资源`MOVE`到原文件。每次存盘会产生三个新的Subversion修订版本!
还要警告一点:OS X的WebDAV客户端可以对HTTP重定向完全敏感,如果你不能装配版本库,你可以在`httpd.conf`开启`BrowserMatch`指示:
~~~
BrowserMatch "^WebDAVFS/1.[012]" redirect-carefully
~~~
### Unix: Nautilus 2
Nautilus是GNOME桌面的官方文件管理器/浏览器,它的主页在`http://www.gnome.org/projects/nautilus/`,只需要在Nautilus窗口中输入一个WebDAV的URL,DAV共享就会像本地磁盘一样出现。
通常情况下,Nautilus 2与自动版本化的mod_dav_svn一起工作相当的好,只是有下面一些警告:
-
任何在共享里直接打开的文件是只读的,即使mod_dav_lock的技巧也看起来无效。Nautilus看起来从没有关注过`LOCK`方法,“本地拷贝、编辑和拷贝回去”的技巧还可以工作,但是很不幸,Nautilus的覆盖旧文件是通过首先`DELETE`进行的,这创建了一个额外的修订版本。
-
当覆盖或创建一个文件,Nautilus首先`PUT`一个空文件,然后使用第二个`PUT`覆盖它,这创建了两个Subversion文件系统修订版本,而不是一个。
-
当删除了一个集合,它对每个独立的孩子而不是集合本身发出HTTP的`DELETE`操作,这会创建一系列新的修订版本。
### Linux davfs2
Linux davfs2是一个Linux内核的文件系统模块,它的开发位于`http://dav.sourceforge.net/`。一旦安装,一个WebDAV网络共享可以使用普通的Linux的**mount**命令装配。
一个公开的秘密就是DAV客户端不会与mod_dav_svn的自动版本化完全工作正常,即使一个单独对服务器的写尝试需要`LOCK`请求作为前提,而这是mod_dav_svn不支持的。此时,还没有数据表明是否可以使用mod_dav_lock解决这个问题。
Unix用户也可以运行**mount -t webdav URL /mountpoint**。
- 第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
- 术语表