本手册编写是为了描述 Subversion 1.2。如果您运行的是更新版本的 Subversion,我们强烈建议您访问 http://svnbooks.subversion.org.cn/ 并查阅适合您的 Subversion 版本的手册。

自动版本控制

虽然 Subversion 客户端不是完整的 DeltaV 客户端,Subversion 服务器也不是完整的 DeltaV 服务器,但它们之间仍然存在 WebDAV 互操作性的闪光点:这就是自动版本控制。

自动版本控制是 DeltaV 标准中定义的一个可选功能。一个典型的 DeltaV 服务器会拒绝一个无知的 WebDAV 客户端试图对一个受版本控制的文件执行 PUT 操作。为了更改受版本控制的文件,服务器期望一系列适当的版本控制请求:例如 MKACTIVITYCHECKOUTPUTCHECKIN。但如果 DeltaV 服务器支持自动版本控制,那么来自基本 WebDAV 客户端的写请求会被接受。服务器的行为就像客户端发出了适当的版本控制请求序列一样,在后台执行提交操作。换句话说,它允许 DeltaV 服务器与不了解版本控制的普通 WebDAV 客户端进行互操作。

由于许多操作系统已经集成了 WebDAV 客户端,所以此功能的用例几乎是梦幻般的:想象一个运行 Microsoft Windows 或 Mac OS 的普通用户办公室。每个用户“挂载”Subversion 存储库,它看起来像一个普通的网络文件夹。他们像往常一样使用共享文件夹:打开文件、编辑文件、保存文件。与此同时,服务器正在自动对所有内容进行版本控制。任何管理员(或有经验的用户)仍然可以使用 Subversion 客户端搜索历史记录并检索数据的旧版本。

这种情况并非虚构:它是真实的,并且从 Subversion 1.2 及更高版本开始就有效。要在 mod_dav_svn 中激活自动版本控制,请在 httpd.conf 的 Location 块中使用 SVNAutoversioning 指令,如下所示

<Location /repos>
  DAV svn
  SVNPath /path/to/repository
  SVNAutoversioning on
</Location>

当 SVNAutoversioning 处于活动状态时,来自 WebDAV 客户端的写请求会导致自动提交。一个通用的日志消息会自动生成并附加到每个修订版。

但是,在激活此功能之前,请了解您正在使用什么。WebDAV 客户端往往会执行很多写请求,导致大量自动提交的修订版。例如,在保存数据时,许多客户端会执行一个 0 字节文件的 PUT 操作(作为保留名称的一种方式),然后是另一个带有真实文件数据的 PUT 操作。单个文件写入会导致两个单独的提交。还要考虑到许多应用程序每隔几分钟就会自动保存一次,这会导致更多提交。

如果您有一个 post-commit 钩子程序用于发送电子邮件,您可能希望完全禁用电子邮件生成,或者在存储库的某些部分禁用电子邮件生成;这取决于您是否认为电子邮件的涌入仍然是有价值的通知,还是仅仅是一种负担。另外,一个智能的 post-commit 钩子程序可以区分通过自动版本控制创建的事务和通过正常 svn commit 创建的事务。诀窍是寻找一个名为 svn:autoversioned 的修订版属性。如果存在,则提交是由一个通用的 WebDAV 客户端完成的。

另一个可能对 SVNAutoversioning 有用的补充功能来自 Apache 的 mod_mime 模块。如果一个通用的 WebDAV 客户端向存储库添加了一个新文件,用户将没有机会设置 svn:mime-type 属性。这可能会导致该文件在 WebDAV 共享文件夹中以“通用”图标的形式显示,没有与任何应用程序关联。一个补救措施是让系统管理员(或其他了解 Subversion 的人)签出一个工作副本,并手动在必要的文件上设置 svn:mime-type 属性。但这种清理任务可能会无休止。相反,您可以在 Subversion 的 <Location> 块中使用 ModMimeUsePathInfo 指令

<Location /repos>
  DAV svn
  SVNPath /path/to/repository
  SVNAutoversioning on

  ModMimeUsePathInfo on

</Location>

此指令允许 mod_mime 尝试自动推断通过自动版本控制进入存储库的新文件的 MIME 类型。该模块会查看文件的命名扩展名,并可能查看文件内容;如果文件匹配一些常见模式,则文件的 svn;mime-type 属性将自动设置。

TortoiseSVN 官方中文版 1.14.7 发布