本手册描述了 Subversion 1.1。如果您正在运行更新版本的 Subversion,我们强烈建议您访问 https://svnbooks.subversion.org.cn/ 并查阅适合您 Subversion 版本的书籍版本。
在本节中,我们将描述最常见的通用 WebDAV 客户端(截至撰写本文时),以及它们在使用SVNAutoversioning指令的 mod_dav_svn 服务器上运行的效果。RFC 2518 规模庞大,而且可能过于灵活。每个 WebDAV 客户端的行为略有不同,并会造成略微不同的问题。
Windows 98、2000 和 XP 集成了一个名为“WebFolders”的 WebDAV 客户端。在 Windows 98 上,可能需要显式安装该功能;如果存在,则“WebFolders”目录会直接出现在我的电脑中。在 Windows 2000 和 XP 上,只需打开我的网络位置,然后运行添加网络位置图标即可。出现提示时,输入 WebDAV URL。共享文件夹将出现在我的网络位置中。
大多数写入操作在自动版本控制的 mod_dav_svn 服务器上都能正常工作,但存在一些问题
如果 Windows XP 计算机是 NT 域的成员,则它似乎无法连接到 WebDAV 共享。它会反复要求输入用户名和密码,即使 Apache 服务器没有发出身份验证挑战!如果该机器不是 NT 域的一部分,则该共享会毫无问题地挂载。
此问题似乎源于 Windows XP 创建 WebFolder 快捷方式的方式发生变化(.lnk文件)。它有时会用 Windows“UNC”(通用命名约定)路径替换 WebDAV 共享的 URL。这会导致资源管理器尝试使用 SMB 而不是 HTTP 连接。
解决此问题的方法是在 Windows 2000 计算机上创建.lnk快捷方式,然后将此快捷方式复制到 Windows XP 计算机上。如果逆向工程.lnk文件格式,也可以使用十六进制编辑器“修复”快捷方式。
无法直接从共享中打开文件以进行编辑;它始终以只读方式打开。mod_dav_lock 技术无济于事,因为 WebFolders 根本不使用LOCK方法。但是,前面提到的“复制、编辑、重新复制”方法有效。共享上的文件可以通过本地编辑的副本成功覆盖。
Apple 的 OS X 操作系统集成了一个 WebDAV 客户端。在访达中,从前往菜单中选择“连接到服务器”项。输入 WebDAV URL,它会以磁盘的形式出现在桌面上,就像任何文件服务器一样。[48]
不幸的是,由于缺少LOCK支持,此客户端拒绝在自动版本控制的 mod_dav_svn 上工作。Mac OS X 在初始 HTTPLOCKOPTIONS功能交换期间发现缺少的功能,因此决定将 Subversion 存储库作为只读共享挂载。此后,所有写入操作都无法执行。为了将存储库作为读写共享挂载,您必须使用之前讨论过的 mod_dav_lock 技巧。一旦锁定似乎有效,该共享的行为就非常出色:文件可以直接以读/写模式打开,但每次保存操作都会导致客户端执行PUT到临时位置,DELETE原始文件,以及MOVE临时资源到原始文件名。这相当于每次保存三个新的 Subversion 修订版!
还有一个警告:OS X 的 WebDAV 客户端对 HTTP 重定向过于敏感。如果根本无法挂载存储库,则可能需要启用BrowserMatch指令,在您的httpd.conf:
BrowserMatch "^WebDAVFS/1.[012]" redirect-carefully
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 文件系统修订版,而不是一个。
删除集合时,它会对每个子项(而不是集合本身)发出 HTTPDELETE操作。这会创建很多新的修订版。
Linux davfs2 是 Linux 内核的一个文件系统模块,其开发位于http://dav.sourceforge.net/. 安装后,可以使用通常的 Linux mount 命令挂载 WebDAV 网络共享。
坊间传闻称,此 DAV 客户端在 mod_dav_svn 的自动版本控制中根本无法使用。每次尝试写入服务器之前,都会先进行LOCK请求,而 mod_dav_svn 不支持此请求。目前,没有数据表明使用 mod_dav_lock 是否能解决此问题。