﻿<appendix id="svn.webdav">
<title>WebDAV和自动版本化</title>

  <simplesect>

    <para>WebDAV是HTTP的一个扩展，作为一个文件共享的标准不断发展。当今的操作系统变得极端的web化，许多内置了对装配WebDAV服务器导出的<quote>共享</quote>的支持。
   </para>

    <para>如果你使用Apache/mod_dav_svn作为你的Subversion网络服务器，某种程度上，你也是在运行一个WebDAV服务器。这个附录提供了这种协议一些背景知识，Subversion如何使用它，Subversion如何和认识WebDAV的软件交互工作。
   </para>

  </simplesect>

  <!-- ================================================================= -->
  <!-- ================================================================= -->
  <!-- ================================================================= -->
  <sect1 id="svn.webdav.basic">
    <title>WebDAV基本概念</title> 

    <para>这个小节提供了对WebDAV背后思想的一个非常简短和普通的总体看法，为理解WebDAV在客户端和服务器之间的兼容性问题打下基础。
   </para>

    <!-- =============================================================== -->
    <sect2 id="svn.webdav.basic.original">
      <title>最初的WebDAV</title>

      <para>RFC 2518为HTTP 1.1定义了一组概念和附加扩展方法来把web变成一个更加普遍的读/写媒体，基本思想是一个WebDAV兼容的web服务器可以像普通的文件服务器一样工作；客户端可以装配类似于NFS或SMB的WebDAV共享文件夹。
      </para>
      
      <para>悲惨的是，WebDAV规范RFC 2518并<emphasis>没有</emphasis>提供任何版本控制模型，尽管DAV中有<quote>V</quote>。基本的DAV客户端和服务器只是假定每个文件或目录只有一个版本存在，可以重复的覆盖。<footnote><para>因为这个原因，一些人开玩笑说WebDAV的客户端是<quote>WebDA</quote>客户端！
        </para></footnote></para>
  
      <para>这是基本的WebDAV引入的概念和术语：
      </para>

      <variablelist>

        <varlistentry>
          <term>资源</term>
          <listitem>
            <para>WebDAV方言里将服务器端的对象（可以用URI描述）称为<firstterm>资源</firstterm>。
            </para>
          </listitem>
        </varlistentry>

        <varlistentry>
          <term>新的写方法</term>
          <listitem>
            <para>超出了标准HTTP的<literal>PUT</literal>方法（用来创建和覆盖web资源），WebDAV定义了新的<literal>COPY</literal>和<literal>MOVE</literal>方法用来复制或重新组织资源。
           </para>
          </listitem>
        </varlistentry>
                
        <varlistentry>
          <term>集合</term>
          <listitem>
            <para><firstterm>collection</firstterm>是一个简单的WebDAV术语用来表示一组资源，在大多数情况下可以看作一个目录，文件资源可以使用<literal>PUT</literal>方法写或创建，而集合资源使用<literal>MKCOL</literal>方法创建。
           </para>
          </listitem>
        </varlistentry>

        <varlistentry>
          <term>属性</term>
          <listitem>
            <para>这与Subversion中是同一个思想&mdash;附加在文件和集合上的元数据，一个客户端可以使用新方法<literal>PROPFIND</literal>列出或检索附加在一个资源上的属性，也可以使用<literal>PROPPATCH</literal>方法修改这些属性。一些属性是完全由用户控制的（例如，一个<quote>color</quote>属性），还有一些是WebDAV服务器创建和控制的（例如，一个保存文件最后修改时间的属性）。前一种叫做<quote>dead属性</quote>，后一种叫做<quote>live属性</quote>。
           </para>
          </listitem>
        </varlistentry>
        
        <varlistentry>
          <term>锁定</term>
          <listitem>
            <para>WebDAV服务器可以决定为客户端提供一个锁定特性&mdash;这部分的规范是可选的，尽管大多数WebDAV服务器提供了这个特性。如果提供这个特性，客户端可以使用新的<literal>LOCK</literal>和<literal>UNLOCK</literal>方法来调节访问资源的过程，在大多数情况下是使用独占写锁（在<xref linkend="svn.basic.vsn-models.lock-unlock"/>讨论的），尽管在一些服务器实现里共享写锁也是可以的。
           </para>
          </listitem>
        </varlistentry>

        <varlistentry>
          <term>访问控制</term>
          <listitem>             
            <para>一个更近的规范（RFC 3744）定义了一个WebDAV资源访问控制列表的系统，一些客户端和服务器正在实现这个特性。
            </para>
          </listitem>
        </varlistentry>

      </variablelist>

    </sect2>

    <!-- =============================================================== -->
    <sect2 id="svn.webdav.basic.deltav">
      <title>DeltaV扩展</title>
  
      <para>因为RFC 2518漏下了版本概念，另一个委员会留下来负责撰写RFC 3253来添加WebDAV的版本化，也就是<quote>DeltaV</quote>。WebDAV/DeltaV客户端和服务器经常叫做<quote>DeltaV</quote>客户端和服务器，因为DeltaV暗含了基本的WebDAV。
      </para>

      <para>DeltaV引入了完全的新的首字母缩写，但并不是被逼迫的，想法相当的直接：
     </para>

      <variablelist>

        <varlistentry>
          <term>每资源的版本化</term>
          <listitem>
            <para>像CVS和其他版本控制系统，DeltaV假定每个资源有一个潜在的无穷的状态，一个客户端可以使用<literal>VERSION-CONTROL</literal>放置一个版本控制之下的资源。
           </para>
          </listitem>
        </varlistentry>

        <varlistentry>
          <term>服务器端的工作拷贝模型</term>
          <listitem>
            <para>一些DeltaV服务器支持在服务器创建虚拟工作区，所有的工作在这里执行。客户端使用<literal>MKWORKSPACE</literal>方法来创建私有区域，然后他们说明修改特定的资源，<quote>把它们检出到</quote>工作区，编辑，然后再次<quote>检入</quote>。在HTTP术语里，方法的顺序可能是<literal>CHECKOUT</literal>、<literal>PUT</literal>、<literal>CHECKIN</literal>。
           </para>
          </listitem>
        </varlistentry>

        <varlistentry>
          <term>客户端工作拷贝模型</term>
          <listitem>
            <para>一些DeltaV服务器也支持客户端可以有完全特定私有工作拷贝的思想，当客户端希望提交修改到服务器，它通过使用<literal>MKACTIVITY</literal>方法创建一个临时服务器事务（叫做一个<firstterm>活动</firstterm>）开始。然后客户端在每个希望修改和发送<literal>PUT</literal>请求的资源上执行一个<literal>CHECKOUT</literal>操作，最后，客户端对每个工作资源执行一个<literal>CHECKIN</literal>，在每个VCR创建了一个VR，并且整个活动会被删除。
           </para>
          </listitem>
        </varlistentry>

        <varlistentry>
          <term>配置</term>
          <listitem>
            <para>DeltaV允许你定义叫做<quote>配置</quote>的灵活的资源集合，不需要对应特定的目录。一个配置可以指向特定的文件的版本，然后可以做<quote>基线</quote>快照，这很像标签。
           </para>
          </listitem>
        </varlistentry>

        <varlistentry>
          <term>扩展性</term>
          <listitem>
            <para>DeltaV定义了新方法<literal>REPORT</literal>，允许客户端和服务器执行自定义的数据交换。尽管DeltaV定义了一系列客户端可以请求的标准历史报告，服务器也可以自由定义报告。客户端发送一个带有包含自定义数据的完全标记的XML主体的<literal>REPORT</literal>请求；假定服务器理解特定的报告类型，它使用一个等同的XML主体来响应，这个技术与XML-RPC很类似。
           </para>
          </listitem>
        </varlistentry>
       
      </variablelist>
      
    </sect2>

  </sect1>

  <!-- ================================================================= -->
  <!-- ================================================================= -->
  <!-- ================================================================= -->
  <sect1 id="svn.webdav.svn-and-deltav">
    <title>Subversion和DeltaV</title> 
    
    
    <para>最初的WebDAV标准得到了广泛的成功，所有的现代操作系统拥有内置的（后面有详细资料）对普通WebDAV的支持，许多流行的应用程序也可以使用WebDAV&mdash;Microsoft
   Office，Dreamweaver和Photoshop。在服务器方面，Apache从1998年就开始支持WebDAV，并被认为是一个事实上的开源标准，也有许多商业的WebDAV服务器，例如Microsoft的IIS。
   </para>

    <para>不幸的是，DeltaV没有这样的成功，很难寻找到任何DeltaV客户端和服务器。只有一些不太出名的商业产品，因此很难测试交互性，不清楚为什么DeltaV还这样停滞，一些人说规范太复杂了，还有些人认为尽管DeltaV的特性有很大的吸引力（即使最新的技术用户也喜欢使用网络文件共享），版本控制特性对大多数用户还不是这样有趣和必须。最后，有些人认为DeltaV还这样不流行主要是因为一直没有开源的服务器产品实现它。
   </para>
   
    <para>当Subversion还在设计阶段时，使用Apache的httpd作为主要网络服务器就是一个很好的想法，已经有了支持WebDAV服务的模块。DeltaV有一个很新的规范，希望就是Subversion服务器模块最终能够成为一个开源的DeltaV参考实现，但非常不幸，DeltaV得版本模型过于详细，与Subversion的模型并不匹配，虽然有些概念可以对应起来，但有些则不能。
   </para>

    <para>结果就是</para>

    <orderedlist>

      <listitem>
        <para>Subversion客户端不是一个完全实现的DeltaV客户端。</para>
        
        <para>客户端需要从服务器得到DeltaV不能提供的东西，因此非常依赖于只有mod_dav_svn理解的Subversion特定的<literal>REPORT</literal>请求。
       </para>
      </listitem>

      <listitem>
        <para>mod_dav_svn也不是一个完全实现的DeltaV服务器。</para>

        <para>许多与Subversion不相关的DeltaV规范还没有实现。
        </para>
      </listitem>
      
    </orderedlist>

    <para>在开发者社区一直有这样的讨论，是否值得弥补这种形势。改变Subversion的设计来匹配DeltaV看起来并不值得，所以可能没有办法让客户端从普通的DeltaV服务器上得到所有的东西。另一方面，mod_dav_svn<emphasis>可以</emphasis>继续开发来实现所有的DeltaV，但缺乏这样做的动力&mdash;几乎没有能与之交户的DeltaV客户端。
   </para>

  </sect1>

  <!-- ================================================================= -->
  <!-- ================================================================= -->
  <!-- ================================================================= -->
  <sect1 id="svn.webdav.autoversioning">
    <title>自动版本化</title>

    <para>因为Subversion客户端不是完整的DeltaV客户端，Subversion服务器也不是完整的DeltaV服务器，但仍有值得高兴的交互特性：叫做自动版本化。
   </para>

    <para>自动版本化是DeltaV标准中的可选特性，一个典型的DeltaV服务器会拒绝一个对版本控制之下文件的<literal>PUT</literal>操作，为了修改一个版本控制下的文件，服务器只会接受一系列正确的版本请求：例如<literal>MKACTIVITY</literal>、<literal>CHECKOUT</literal>、<literal>PUT</literal>和<literal>CHECKIN</literal>。但是如果DeltaV服务器支持自动版本化，服务器可以在后台假装客户端执行了一些列正确的版本请求，也就是说，DeltaV服务器可以与一个对版本化一无所知的普通WebDAV客户端交互。
   </para>

    <para>因为有许多操作系统已经集成了WebDAV客户端，这个特性的用例可能是这样的：假设一个办公室有许多使用Microsoft Windows或Mac OS的普通用户，每个用户<quote>装载</quote>了一个Subversion版本库，看起来就是普通的网络共享文件夹。他们像普通目录一样的操作这个目录：打开文件、编辑它们，保存它们。同时，服务器自动的版本化所有的东西，任何管理员（或有知识的用户）可以一直使用Subversion客户端来查询历史来检索旧版本的数据。
   </para>

    <para>这个场景不是小说：对于Subversion 1.2来说，是真实的和有效的。为了激活mod_dav_svn的自动版本化，需要使用<filename>httpd.conf</filename>中Location区块的<literal>SVNAutoversioning</literal>指示，例如：</para>

    <screen>
&lt;Location /repos&gt;
  DAV svn
  SVNPath /path/to/repository
  SVNAutoversioning on
&lt;/Location&gt;
</screen>

    <para>当激活了SVNAutoversioning，来自WebDAV的客户端请求会导致自动提交，每个修订版本会自动附加一个原始的日志信息。
   </para>

    <para>然而，在激活这个特性之前，需要理解你做的事情。WebDAV会做许多写请求，导致了产生数量绝大的自动提交修订版本。例如，当保存数据，许多客户端会使用一个<literal>PUT</literal>一个0字节的文件，然后紧跟一个<literal>PUT</literal>真实的文件数据。一个单独的文件写操作产生了两个不同的提交。考虑到许多应用程序隔几分钟的自动保存，会产生更多的提交。
   </para>

    <para>如果你有发送邮件的post-commit钩子程序，例如，你会根据是否有价值来开启和关闭邮件通知，另外，一个聪明的post-commit钩子也应该能够区分自动版本化和<command>svn
      commit</command>产生的事务。技巧就是检查修订版本的<literal>svn:autoversioned</literal>属性，如果有，则提交来自一个原始的WebDAV客户端。
     </para>

<para>另一个作为<literal>SVNAutoversioning</literal>特性补充的特性来自Apache的<literal>mod_mime</literal>模块，如果一个原始的WebDAV客户端在版本库添加了一个新文件，用户就没有机会设置<literal>svn:mime-type</literal>属性，这会导致使用WebDAV共享目录查看时会看到原始的图标，而没有关联到任何应用。一个补救办法就是让系统管理员（或其他理解Subversion）的人检出一份工作拷贝，然后为需要的文件手动设置<literal>svn:mime-type</literal>属性，但是这个整理工作永远不会结束，作为替代，你可以在你的Subversion<literal>&lt;Location&gt;</literal>区使用<literal>ModMimeUsePathInfo</literal>指示：
</para>
 
    <screen>
&lt;Location /repos&gt;
  DAV svn
  SVNPath /path/to/repository
  SVNAutoversioning on

  ModMimeUsePathInfo on

&lt;/Location&gt;
</screen>

    <para>这个指示允许<literal>mod_mime</literal>在使用自动版本化添加新文件时尝试自动检测新文件的mime-type，这个模块查看文件的扩展名，有可能的话还包括检查内容；如果文件符合某个常用模式，就会自动设置文件的<literal>svn;mime-type</literal>。
    </para>
  </sect1>

  <!-- ================================================================= -->
  <!-- ================================================================= -->
  <!-- ================================================================= -->
  <sect1 id="svn.webdav.clients">
    <title>客户端交互性</title> 

    <para>所有的WebDAV客户端分为三类&mdash;独立应用程序，文件浏览器扩展或文件系统实现，这些分类定义了WebDAV用户可用的功能性。<xref linkend="svn.webdav.clients.tbl-1"/>给WebDAV常见软件进行了分类，并提供了的简短描述。
   </para>

    <table id="svn.webdav.clients.tbl-1">
      <title>Common WebDAV Clients</title>
      <tgroup cols="3">
        <thead>
          <row>
            <entry>软件</entry>
            <entry>分类</entry>
            <entry>描述</entry>
          </row>
        </thead>
        <tbody>
          <row>
            <entry>Adobe Photoshop</entry>
            <entry>独立WebDAV应用程序</entry>
            <entry>图像编辑软件，允许直接从WebDAV的URL打开文件和修改。
            </entry>
          </row>
          <row>
            <entry>Cadaver</entry>
            <entry>独立WebDAV应用程序</entry>
            <entry>命令行的WebDAV客户端，支持文件传输，目录树显示和锁定操作</entry>
          </row>
          <row>
            <entry>DAV Explorer</entry>
            <entry>独立WebDAV应用程序</entry>
            <entry>浏览WebDAV共享的GUI工具</entry>
          </row>
          <row>
            <entry>davfs2</entry>
            <entry>WebDAV文件系统实现</entry>
            <entry>Linux文件系统驱动允许加载WebDAV共享</entry>
          </row>
          <row>
            <entry>GNOME Nautilus</entry>
            <entry>文件浏览器WebDAV扩展</entry>
            <entry>GUI文件浏览器，可以对WebDAV共享执行目录树操作</entry>
          </row>
          <row>
            <entry>KDE Konqueror</entry>
            <entry>文件浏览器WebDAV扩展</entry>
            <entry>GUI文件浏览器，可以对WebDAV共享执行目录树操作</entry>
          </row>
          <row>
            <entry>Mac OS X</entry>
            <entry>WebDAV文件系统实现</entry>
            <entry>内置可以加载WebDAV到本地功能的操作系统</entry>
          </row>
          <row>
            <entry>Macromedia Dreamweaver</entry>
            <entry>独立WebDAV应用程序</entry>
            <entry>Web制作软件，可以直接读写WebDAV的URL</entry>
          </row>
          <row>
            <entry>Microsoft Office</entry>
            <entry>独立WebDAV应用程序</entry>
            <entry>Office上产套件，可以直接读写WebDAV的URL</entry>
          </row>
          <row>
            <entry>Microsoft Webfolders</entry>
            <entry>文件浏览器WebDAV扩展</entry>
            <entry>GUI文件浏览器，可以对WebDAV共享执行目录树操作</entry>
          </row>
          <row>
            <entry>Novell NetDrive</entry>
            <entry>WebDAV文件系统实现</entry>
            <entry>驱动器映射程序，可以将Windows驱动器加载为远程的WebDAV共享</entry>
          </row>
          <row>
            <entry>SRT WebDrive</entry>
            <entry>WebDAV文件系统实现</entry>
            <entry>文件传输软件，可以将Windows驱动器加载为远程的WebDAV共享</entry>
          </row>
          
        </tbody>
      </tgroup>      
    </table>

    <!-- =============================================================== -->
    <sect2 id="svn.webdav.clients.standalone">
      <title>独立WebDAV应用程序</title>

      <para>一个WebDAV应用就是一个内置WebDAV协议的程序，我们会覆盖大多数支持WebDAV的流行程序。</para>

      <sect3 id="svn.webdav.clients.standalone.windows">
        <title>Microsoft Office，Dreamweaver，Photoshop</title> 
  
        <para>在Windows下，有一些有名的集成WebDAV客户端功能的软件，例如Microsoft's Office、<footnote>
            <para>WebDAV支持因为一些原因从Microsoft Access里删除了。</para>
          </footnote>Adobe的Photoshop和Macromedia的Dreamweaver。它们都可以直接打开和保存URL，也可以在编辑时大量的使用WebDAV的锁定。</para>
  
        <para>请注意，尽管这些程序都有Mac OS X版本，但在这个平台并不直接支持。事实上，在Mac OS X上，不允许<guimenu>File-&gt;Open</guimenu>对话框中出现URL路径。也有可能WebDAV特性是被故意漏掉，因为OS X已经提供了完美的WebDAV文件系统支持。</para>
  
      </sect3>

      <sect3 id="svn.webdav.clients.standalone.free">
        <title>Cadaver，DAV Explorer</title>
  
        <para>Cadaver是一个用来浏览和修改WebDAV共享的Unix命令行程序，就像Subversion客户端，它使用了neon的HTTP库&mdash;不需要惊讶，neon和cadaver的作者是同一个人。Cadaver是自由软件（GPL许可证），在<ulink
          url="http://www.webdav.org/cadaver/"/>上。
          </para>
  
        <para>使用cadaver就像使用命令行的FTP程序，因此它很适合基本的WebDAV调试。它可以以压缩方式上传和下载文件，也会检验属性、拷贝、移动、锁定和解锁文件：
       </para>
        
        <screen>
$ cadaver http://host/repos
dav:/repos/&gt; ls
Listing collection `/repos/': succeeded.
Coll: &gt; foobar                                 0  May 10 16:19
      &gt; playwright.el                       2864  May  4 16:18
      &gt; proofbypoem.txt                     1461  May  5 15:09
      &gt; westcoast.jpg                      66737  May  5 15:09

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

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

        <para>DAV Explorer是另一个独立运行的WebDAV客户端，使用Java编写，有一个类Apache的许可证，网站是<ulink url="http://www.ics.uci.edu/~webdav/"/>。DAV Explorer与cadaver功能差不多，优点可移植，并有一个用户友好的GUI程序。它也是最早的支持WebDAV访问控制协议（RFC 3744）的客户端。
        </para>
  
        <para>当然，DAV Explorer浏览器的ACL支持在这种情况下是没用的，因为mod_dav_svn并不支持。事实上，Cadaver 和DAV Explorer支持的DeltaV限制命令也没什么用出，因为他们不允许<literal>MKACTIVITY</literal>请求。但没有关系，我们只是假定这些客户端都是在操作自动版本化的版本库。
        </para>
  
      </sect3>
    </sect2>

    <!-- =============================================================== -->
    <sect2 id="svn.webdav.clients.file-explorer-extensions">
      <title>文件浏览器WebDAV扩展</title>

      <para>一些流行的文件浏览器程序支持WebDAV扩展，允许用户浏览DAV共享如同访问本机，并允许基本的目录树操作。例如，Windows的资源管理器可以把WebDAV服务器看作一个<quote>网络位置</quote>，用户可以从桌面托拽文件到这个目录，或者是重命名、拷贝或者删除文件。但是这只是文件浏览器的特性，DAV共享对于普通的应用不可见，所有的DAV操作需要通过浏览器界面完成。
     </para>

      <sect3 id="svn.webdav.clients.file-explorer-extensions.windows">
        <title>Microsoft网络文件夹</title> 
  
        <para>Microsoft是WebDAV规范最早的支持者，最早在Windows
          98配置客户端，被称作<quote>网络文件夹</quote>，这个客户端在Windows NT4和2000上也存在。
          </para>
  
        <para>最早的Webfolders客户端是浏览器的扩展，主要的浏览文件系统的GUI程序，工作良好。在Windows 98，如果<quote>我的电脑</quote>里没有网络文件夹，这个特性需要明确安装。在Windows 2000，只需要添加一个新的<quote>网络位置</quote>，输入URL，WebDAV共享就会弹出让你浏览。
        </para>
  
        <para>伴随着Windows XP，Microsoft开始了另一种网络文件夹的实现，叫做<quote>WebDAV
          mini-redirector</quote>，这个新的实现是文件系统级的客户端，允许WebDAV转载到驱动器盘符上。不幸的是，这个实现充满难以相信的bug。客户端经常会尝试把http的URL（<literal>http://host/repos</literal>）转化为UNC共享符号（<literal>\\host\repos</literal>），它也经常使用Windows域认证来回应基本的HTTP认证，按照<literal>HOST\username</literal>发送用户名。这类互动性问题在网络上大量传播，使大量用户受挫。即使是ApacheWebDAV的作者Greg Stein也建议不要对Apaache服务器使用XP的网络文件夹。
          </para>
  
        <para>结果是原始的网络文件夹并没有在XP中死掉，只是要被埋葬了。还是有办法适用这个技术：</para>
  
        <orderedlist>
  
          <listitem>
            <para>到网络位置。</para>
          </listitem>
  
          <listitem>
            <para>添加一个新的网络位置。</para>
          </listitem>
  
          <listitem>
            <para>当要求输入，输入版本库的URL，但URL中<emphasis>要包含端口号</emphasis>。例如<literal>http://host/repos</literal>的输入是<literal>http://host:80/repos</literal>。
            </para>
          </listitem>
  
          <listitem>
            <para>回应所有的认证请求。</para>
          </listitem>
  
        </orderedlist>
  
        <para>有各种解决问题的方法，但好像没有一种能够在各版本和各级别的Windows XP中有效。在我们的测试里，只有上面这种策略在各种系统中有效。WebDAV社区一致认为避免使用新的网络文件夹实现，而使用旧的，如果你希望在Windows XP使用真实的文件系统级的客户端，请使用第三方的程序，例如WebDrive或NetDrive。
        </para>

       <para>最后一个提示：如果你尝试使用XP的网络文件夹，确定你有Microsoft最新的版本，Microsoft在2005年1月发布了一个问题修正，在<ulink 
      url="http://support.microsoft.com/?kbid=892211"/>，特别的，这个发布是用来修正在访问DAV时发生无限递归的问题。
      </para>
      </sect3>

      <sect3 id="svn.webdav.clients.file-explorer-extensions.linux-de">
        <title>Nautilus，Konqueror</title> 
  
        <para>Nautilus是GNOME桌面（<ulink url="http://www.gnome.org"/>）官方的文件管理/浏览器，KDE桌面（<ulink
          url="http://www.kde.org"/>）的则是Konqueror。两个应用程序都是浏览器级别的WebDAV客户端，对自动版本化的版本库工作良好。
         </para>
  
        <para>GNOME的Nautilus里，从<guimenu>File
          menu</guimenu>选择<guimenuitem>Open
          location</guimenuitem>，并且输入URL。版本库就会显示出来，就像其他文件系统。
          </para>
  
        <para>KDE的Konqueror里你需要在地址栏使用<literal>webdav://</literal>模式来输入URL，如果你输入<literal>http://</literal>的URL，Konqueror会像普通的web浏览器。你会看到mod_dav_svn输出的普通HTML目录列表。通过输入<literal>webdav://host/repos</literal>代替<literal>http://host/repos</literal>，Konqueror就成为了一个WebDAV客户端，并且按照文件系统的方式显示版本库。
       </para>
  
      </sect3>
    </sect2>

    <sect2 id="svn.webdav.clients.fs-impl">
      <title>WebDAV文件系统实现</title>

      <para>WebDAV文件系统实现被认为是最佳的WebDAV客户端，它通过低级的文件系统模块实现，通常在操作系统的核心。这意味着DAV共享像网络的其他文件系统一样装载，就像在Unix下面装载NFS，或者是在Windows下装载一个SMB共享。结果就是这种客户端为所有程序提供了对WebDAV得透明访问。
     </para>

      <sect3 id="svn.webdav.clients.fs-impl.windows">
        <title>WebDrive，NetDrive</title> 
  
        <para>WebDrive和NetDrive都是完美的商业产品，允许将WebDAV绑定到Windows的盘符，当我们写作的时候，WebDrive可以从South River Technologies（<ulink
          url="http://www.southrivertech.com"/>）购买。NetDrive由Netware装运，通过查找<quote>netdrive.exe</quote>就会找到。尽管它可以自由得到，用户还是需要一个Netware许可证。（如果着听起来有点奇怪，你并不孤单，看Novell网站的这个页面：<ulink
          url="http://www.novell.com/coolsolutions/qna/999.html"/>）</para>
  
      </sect3>

      <sect3 id="svn.webdav.clients.fs-impl.macosx">
        <title>Mac OS X</title> 

        <para>Apple的OS X操作系统是集成的文件系统级的客户端，通过Finder，选择<guimenu>Go menu</guimenu>的<guimenuitem>Connect to Server</guimenuitem>条目，输入WebDAV的URL，会在桌面显示一个磁盘，就像其他装载的卷。<footnote><para>在Darwin终端，你可以运行<literal>mount -t webdav URL
          /mountpoint</literal></para></footnote>。</para>
  
        <para>注意如果mod_dav_svn是1.2之前的版本，OS X不能按照可读写装载，而是会成为只读。这是因为，OS X坚持要读些共享支持锁定，而锁定文件出现在Subversion 1.2。
        </para>
  
        <para>警告一句话：OS X的WebDAV客户端有时候对HTTP重定向很敏感，如果OS X不能装载版本库，你或许需要开启Apache服务器<filename>httpd.conf</filename>的BrowserMatch指示：
        </para>
  
        <screen>
BrowserMatch "^WebDAVFS/1.[012]" redirect-carefully
</screen>
  
      </sect3>

      <sect3 id="svn.webdav.clients.fs-impl.linux">
        <title>Linux davfs2</title> 
  
        <para>Linux davfs2是一个Linux核心的文件系统模块，开发坐落在<ulink
          url="http://dav.sourceforge.net/"/>。一旦安装，一个WebDAV网络共享可以使用mount命令装载：
          </para>
  
        <screen>
$ mount.davfs http://host/repos /mnt/dav
</screen>
  
      </sect3>
    </sect2>
  </sect1>

</appendix>

<!--
local variables: 
sgml-parent-document: ("book.xml" "appendix")
end:
-->

