本文档旨在描述 Apache™ Subversion® 的 1.7.x 系列。如果您运行的是不同版本的 Subversion,强烈建议您访问 https://svnbook.subversion.org.cn/ 并查阅适合您 Subversion 版本的文档。

客户端互操作性

所有 WebDAV 客户端都属于以下三种类别之一:独立应用程序、文件浏览器扩展或文件系统实现。这些类别广泛地定义了用户可用的 WebDAV 功能类型。 表 C.1,“常用 WebDAV 客户端” 给出了我们的分类以及对一些常用 WebDAV 软件的简要描述。您可以在以下部分找到有关这些软件产品的更多详细信息,以及它们的一般类别。

表 C.1. 常用 WebDAV 客户端

软件 类型 Windows Mac Linux 描述
Adobe Photoshop 独立 WebDAV 应用程序 X     图像编辑软件,允许直接从 WebDAV URL 打开和写入。
cadaver 独立 WebDAV 应用程序   X X 支持文件传输、树和锁定操作的命令行 WebDAV 客户端
DAV Explorer 独立 WebDAV 应用程序 X X X 用于浏览 WebDAV 共享的 Java GUI 工具
Adobe Dreamweaver 独立 WebDAV 应用程序 X     能够直接从 WebDAV URL 读取和写入的 Web 制作软件
Microsoft Office 独立 WebDAV 应用程序 X     办公生产力套件,其中包含多个组件,能够直接从 WebDAV URL 读取和写入。
Microsoft Web Folders 文件浏览器 WebDAV 扩展 X     能够对 WebDAV 共享执行树操作的 GUI 文件浏览器程序
GNOME Nautilus 文件浏览器 WebDAV 扩展     X 能够对 WebDAV 共享执行树操作的 GUI 文件浏览器
KDE Konqueror 文件浏览器 WebDAV 扩展     X 能够对 WebDAV 共享执行树操作的 GUI 文件浏览器
Mac OS X WebDAV 文件系统实现   X   内置支持挂载 WebDAV 共享的操作系统。
Novell NetDrive WebDAV 文件系统实现 X     用于将 Windows 驱动器盘符分配给已挂载的远程 WebDAV 共享的驱动器映射程序
SRT WebDrive WebDAV 文件系统实现 X     文件传输软件,除其他功能外,还允许将 Windows 驱动器盘符分配给已挂载的远程 WebDAV 共享。
davfs2 WebDAV 文件系统实现     X 允许您挂载 WebDAV 共享的 Linux 文件系统驱动程序

独立 WebDAV 应用程序

WebDAV 应用程序是指能够与 WebDAV 服务器进行 WebDAV 协议通信的程序。我们将介绍一些最流行的具有这种 WebDAV 支持的程序。

Microsoft Office、Dreamweaver、Photoshop

在 Windows 上,一些知名的应用程序集成了 WebDAV 客户端功能,例如微软的 Office[77]、Adobe 的 Photoshop 和 Dreamweaver 程序。它们能够直接打开和保存到 URL,并且在编辑文件时倾向于大量使用 WebDAV 锁。

请注意,虽然这些程序中的许多也存在于 Mac OS X 上,但它们似乎不支持该平台上的 WebDAV。实际上,在 Mac OS X 上,文件→打开 对话框根本不允许用户输入路径或 URL。WebDAV 功能很可能被故意从这些程序的 Macintosh 版本中删除,因为 OS X 已经为 WebDAV 提供了如此出色的低级文件系统支持。

cadaver、DAV Explorer

cadaver 是一个简单的 Unix 命令行程序,用于浏览和更改 WebDAV 共享。与 Subversion 客户端一样,它使用 neon HTTP 库——这并不奇怪,因为 neon 和 cadaver 都是由同一个作者编写的。cadaver 是自由软件(GPL 许可证),可在 https://notroj.github.io/cadaver/ 获取。

使用 cadaver 类似于使用命令行 FTP 程序,因此它对于基本的 WebDAV 调试非常有用。它可以用来在紧急情况下上传或下载文件,检查属性,以及复制、移动、锁定或解锁文件。

$ cadaver http://host/repos
dav:/repos/> ls
Listing collection `/repos/': succeeded.
Coll: > foobar                                 0  May 10 16:19
      > playwright.el                       2864  May  4 16:18
      > proofbypoem.txt                     1461  May  5 15:09
      > westcoast.jpg                      66737  May  5 15:09

dav:/repos/> put README
Uploading README to `/repos/README':
Progress: [=============================>] 100.0% of 357 bytes succeeded.

dav:/repos/> get proofbypoem.txt
Downloading `/repos/proofbypoem.txt' to proofbypoem.txt:
Progress: [=============================>] 100.0% of 1461 bytes succeeded.

DAV Explorer 是另一个独立的 WebDAV 客户端,用 Java 编写。它使用类似 Apache 的自由许可证,可在 http://www.ics.uci.edu/~webdav/ 获取。它可以执行 cadaver 的所有操作,但具有可移植性和更友好的 GUI 应用程序的优势。它也是首批支持新的 WebDAV 访问控制协议 (RFC 3744) 的客户端之一。

当然,DAV Explorer 的 ACL 支持在这种情况下毫无用处,因为 mod_dav_svn 不支持它。cadaver 和 DAV Explorer 都支持一些有限的 DeltaV 命令这一事实也不是特别有用,因为它们不允许 MKACTIVITY 请求。但无论如何这并不重要;我们假设所有这些客户端都在针对自动版本控制存储库进行操作。

文件资源管理器 WebDAV 扩展

一些流行的文件资源管理器 GUI 程序支持 WebDAV 扩展,允许用户浏览 DAV 共享,就好像它只是本地计算机上的另一个目录一样,并对该共享中的项目执行基本的树编辑操作。例如,Windows 资源管理器能够将 WebDAV 服务器浏览为 网络位置。 用户可以将文件拖放到桌面,或者以通常的方式重命名、复制或删除文件。但由于它只是文件资源管理器的功能,因此 DAV 共享对普通应用程序不可见。所有 DAV 交互都必须通过资源管理器界面进行。

微软 Web 文件夹

微软是 WebDAV 规范的最初支持者之一,并在 Windows 98 中首次发布了名为 Web 文件夹的客户端。该客户端也包含在 Windows NT 4.0 和 Windows 2000 中。

最初的 Web 文件夹客户端是资源管理器(用于浏览文件系统的主要 GUI 程序)的扩展。它工作得很好。在 Windows 98 中,如果 Web 文件夹在“我的电脑”中不可见,则可能需要显式安装该功能。在 Windows 2000 中,只需添加一个新的 网络位置, 输入 URL,WebDAV 共享将弹出以供浏览。

随着 Windows XP 的发布,微软开始发布 Web 文件夹的新实现,称为 WebDAV 迷你重定向器。新实现是文件系统级别的客户端,允许将 WebDAV 共享挂载为驱动器号。不幸的是,此实现存在大量错误。该客户端通常尝试将 HTTP URL (http://host/repos) 转换为 UNC 共享表示法 (\\host\repos);它还经常尝试使用 Windows 域身份验证来响应基本身份验证 HTTP 挑战,将用户名发送为 HOST\username。这些互操作性问题非常严重,并且在网络上的许多地方都有记录,令许多用户感到沮丧。即使是 Apache WebDAV 模块的最初作者 Greg Stein 也直言不讳地说,XP Web 文件夹根本无法在 Apache 服务器上运行。

Windows Vista 的初始 Web 文件夹实现似乎与 XP 的几乎相同,因此存在相同的问题。幸运的是,微软将在 Vista Service Pack 中解决这些问题。

但是,似乎有一些针对 XP 和 Vista 的解决方法,可以让 Web 文件夹在 Apache 上运行。用户大多报告这些技术取得了成功,因此我们将在此处转述。

在 Windows XP 上,您有两个选择。首先,在微软网站上搜索更新 KB907306,即“Web 文件夹软件更新”。这可能会解决所有问题。如果不行,似乎原始的 XP 之前的 Web 文件夹实现仍然埋藏在系统中。您可以通过进入“网络位置”并添加一个新的网络位置来将其挖掘出来。当系统提示时,输入存储库的 URL,但请在 URL 中包含端口号。例如,您应该将 http://host/repos 输入为 http://host:80/repos。对任何身份验证提示使用您的 Subversion 凭据进行响应。

在 Windows Vista 上,相同的 KB907306 更新可能会解决所有问题。但可能仍然存在其他问题。一些用户报告说,Vista 将所有 http:// 连接视为不安全,因此将始终无法通过 Apache 完成任何身份验证挑战,除非连接通过 https:// 进行。如果您无法通过 SSL 连接到 Subversion 存储库,您可以调整系统注册表以关闭此行为。只需将 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters\BasicAuthLevel 键的值从 1 更改为 2。最后警告:确保将 Web 文件夹设置为指向存储库的根目录 (/),而不是某个子目录,例如 /trunk。Vista Web 文件夹似乎只针对存储库根目录起作用。

总的来说,虽然这些解决方法可能对您有效,但您可能会使用第三方 WebDAV 客户端(如 WebDrive 或 NetDrive)获得更好的整体体验。

Nautilus,Konqueror

Nautilus 是 GNOME 桌面 (http://www.gnome.org) 的官方文件管理器/浏览器,而 Konqueror 是 KDE 桌面 (http://www.kde.org) 的管理器/浏览器。这两个应用程序都内置了资源管理器级别的 WebDAV 客户端,并且它们可以很好地针对自动版本控制存储库运行。

在 GNOME 的 Nautilus 中,选择 文件→打开位置 菜单项,并在出现的对话框中输入 URL。然后,存储库将像任何其他文件系统一样显示。

在 KDE 的 Konqueror 中,您需要在地址栏中输入 URL 时使用 webdav:// 方案。如果您输入 http:// URL,Konqueror 将像普通网页浏览器一样运行。您可能会看到由 mod_dav_svn 生成的通用 HTML 目录列表。当您输入 webdav://host/repos 而不是 http://host/repos 时,Konqueror 将成为 WebDAV 客户端并显示存储库作为文件系统。

WebDAV 文件系统实现

WebDAV 文件系统实现可以说是最好的 WebDAV 客户端类型。它被实现为一个低级文件系统模块,通常位于操作系统的内核中。这意味着 DAV 共享像任何其他网络文件系统一样被挂载,类似于在 Unix 上挂载 NFS 共享或在 Windows 中将 SMB 共享作为驱动器字母附加。因此,这种类型的客户端为所有程序提供了完全透明的读写 WebDAV 访问。应用程序甚至不知道 WebDAV 请求正在发生。

WebDrive、NetDrive

WebDrive 和 NetDrive 都是优秀的商业产品,允许将 WebDAV 共享作为驱动器字母附加到 Windows。因此,您可以像操作真实本地硬盘一样轻松地操作这些 WebDAV 支持的伪驱动器的内容,并且以相同的方式操作。您可以从 South River Technologies 购买 WebDrive (https://webdrive.com/)。Novell 的 NetDrive 可在网上免费获得,但要求用户拥有 NetWare 许可证。

Mac OS X

Apple 的 OS X 操作系统集成了一个文件系统级别的 WebDAV 客户端。在 Finder 中,选择 转到→连接到服务器 菜单项。输入 WebDAV URL,它将显示为桌面上的磁盘,就像任何其他已挂载的卷一样。您还可以使用 webdav 文件系统类型和 mount 命令从 Darwin 终端挂载 WebDAV 共享。

$ mount -t webdav http://svn.example.com/repos/project /some/mountpoint
$

请注意,如果您的 mod_dav_svn 版本低于 1.2,OS X 将拒绝将共享挂载为读写;它将显示为只读。这是因为 OS X 坚持要求对读写共享进行锁定支持,而锁定文件的功能最早出现在 Subversion 1.2 中。

此外,OS X 的 WebDAV 客户端有时可能对 HTTP 重定向过于敏感。如果 OS X 根本无法挂载存储库,您可能需要在 Apache 服务器的 httpd.conf 中启用 BrowserMatch 指令。

BrowserMatch "^WebDAVFS/1.[012]" redirect-carefully

Linux davfs2

Linux davfs2 是 Linux 内核的一个文件系统模块,其开发工作由 http://dav.sourceforge.net/ 组织。安装 davfs2 后,您可以使用常见的 Linux mount 命令挂载 WebDAV 网络共享。

$ mount.davfs http://host/repos /mnt/dav


[77] 出于某种原因,Microsoft Access 中移除了 WebDAV 支持,但它在 Office 套件的其他程序中仍然存在。

TortoiseSVN 官方中文版 1.14.7 发布