本手册旨在描述 Apache™ Subversion® 的 1.7.x 系列。如果您运行的是其他版本的 Subversion,我们强烈建议您访问 https://svnbook.subversion.org.cn/ 并查阅适合您 Subversion 版本的文档。
虽然 Subversion 客户端不是完整的 DeltaV 客户端,Subversion 服务器也不是完整的 DeltaV 服务器,但仍然存在着 WebDAV 互操作性的希望:自动版本控制。
自动版本控制是 DeltaV 标准中定义的一个可选功能。典型的 DeltaV 服务器会拒绝无知的 WebDAV 客户端尝试对版本控制下的文件执行 PUT
操作。要更改版本控制的文件,服务器需要一系列正确的版本控制请求:例如 MKACTIVITY
、CHECKOUT
、PUT
、CHECKIN
。但如果 DeltaV 服务器支持自动版本控制,则会接受来自基本 WebDAV 客户端的写入请求。服务器的行为就像客户端已经发出了正确的版本控制请求系列一样,在后台执行提交操作。换句话说,它允许 DeltaV 服务器与不理解版本控制的普通 WebDAV 客户端进行互操作。
由于许多操作系统已经集成了 WebDAV 客户端,因此此功能的用例对于处理非技术用户的管理员来说非常有吸引力。想象一下,一个办公室里都是使用 Microsoft Windows 或 Mac OS 的普通用户。每个用户“挂载” Subversion 存储库,它看起来就像一个普通的网络文件夹。他们像往常一样使用共享文件夹:打开文件、编辑文件并保存文件。同时,服务器会自动对所有内容进行版本控制。任何管理员(或有经验的用户)仍然可以使用 Subversion 客户端来搜索历史记录并检索数据的旧版本。
这种情况并非虚构——它是真实存在的,而且有效。要在 mod_dav_svn 中激活自动版本控制,请在 httpd.conf
的 Location
块中使用 SVNAutoversioning
指令,如下所示
<Location /repos> DAV svn SVNPath /var/svn/repository SVNAutoversioning on </Location>
当 Subversion 自动版本控制处于活动状态时,来自 WebDAV 客户端的写入请求会导致自动提交。一个通用的日志消息会自动生成并附加到每个修订版。
在启用此功能之前,请先了解其潜在影响。WebDAV 客户端往往会执行大量写操作,导致产生大量自动提交的版本。例如,在保存数据时,许多客户端会先执行一个PUT
操作,将一个 0 字节的文件写入(作为保留名称的方式),然后执行另一个PUT
操作,写入实际的文件数据。单个文件写入操作会导致两次单独的提交。此外,许多应用程序每隔几分钟就会自动保存一次,从而导致更多提交。
如果您有一个发送电子邮件的 post-commit 钩子程序,您可能需要完全禁用电子邮件生成,或者在存储库的某些部分禁用电子邮件生成;这取决于您是否认为大量电子邮件仍然是宝贵的通知。此外,一个智能的 post-commit 钩子程序可以区分通过自动版本控制创建的事务和通过正常 Subversion 提交操作创建的事务。诀窍是查找名为svn:autoversioned
的修订属性。如果存在,则该提交是由通用的 WebDAV 客户端执行的。
另一个可能对 Subversion 的自动版本控制有用的补充功能来自 Apache 的mod_mime 模块。如果 WebDAV 客户端向存储库添加了一个新文件,用户将没有机会设置svn:mime-type
属性。这可能会导致该文件在 WebDAV 共享文件夹中显示为一个通用图标,没有与任何应用程序关联。一种补救措施是让系统管理员(或其他了解 Subversion 的人员)签出一个工作副本,并手动在必要的文件上设置svn:mime-type
属性。但是,这种清理任务可能永无止境。相反,您可以在 Subversion 的<Location>
块中使用ModMimeUsePathInfo
指令。
<Location /repos> DAV svn SVNPath /var/svn/repository SVNAutoversioning on ModMimeUsePathInfo on </Location>
此指令允许mod_mime 尝试自动推断通过自动版本控制进入存储库的新文件的 MIME 类型。该模块会查看文件的扩展名,并可能查看文件内容;如果文件与某些常见模式匹配,文件的svn:mime-type
属性将被自动设置。