### 自動版本化交互性
在這個小節,我們會描述最普通的原始WebDAV客戶端(寫作的時刻),和它們是如何與使用`SVNAutoversioning`指示的mod_dav_svn服務器的運作。RFC 2518是一個有點大,并且有一點太靈活。每個WebDAV客戶端的行為都有些許區別,并且產生許多不同的小問題。
### Win32網絡文件夾
Windows 98、2000和XP有一個集成的WebDAV客戶端叫做“網絡文件夾”,在Windows 98,這個特性需要明確安裝;如果提供,一個“網絡文件夾”就會出現在我的電腦,在Windows 2000和XP,只需要簡單得打開我的網絡位置,運行添加網絡位置圖標。當出現提示,輸入一個WebDAV的URL,我的網絡位置中就會出現一個共享文件夾。
大多數寫操作對于自動版本化的mod_dav_svn服務器工作正常,但是有一些問題:
-
如果一個Windows XP電腦是一個NT域的成員,它看起來不能連接到WebDAV共享,重復提示要輸入用戶名和密碼,即使Apache服務器沒有要求進行認證!如果這個機器不是NT域的一部分,這個共享可以成功裝載。
這個問題源于Windows XP創建網絡文件夾快捷方式(`.lnk`文件)的方法的bug。它有時候會使用“UNC” (Universal Naming Convention) 路徑來代替WebDAV共享URL,這導致資源管理器嘗試使用SMB而不是HTTP來進行連接。
這個問題的解決方法是在Windows 2000創建`.lnk`快捷方式,然后拷貝到Windows XP電腦,如果有人可以逆轉`.lnk`文件的格式,也可以使用十六進制編輯器來“修正”快捷方式。
-
一個文件不可以直接在共享中打開編輯;它可能一直是只讀的。mod_dav_lock技術也無能為力,因為網絡文件夾根本不使用`LOCK`方法,前面提到的“拷貝、編輯和再拷貝”根本不工作。在共享中的文件可以成功的被本地修改的拷貝覆蓋。
### Mac OS X
Apple的OS X操作系統也集成了WebDAV客戶端,從Finder選擇Go菜單的“Connect to Server”,輸入一個WebDAV的URL,它會作為一個磁盤在桌面出現,就像任何文件服務器。
很不幸,客戶端拒絕與一個自動版本化的mod_dav_svn工作,因為它缺乏`LOCK`支持,Mac OS X在初始化HTTP的`OPTIONS`特性交換時會發現缺失了`LOCK`能力,因而決定以只讀方式裝配Subversion版本庫,之后,不可以進行寫操作。為了將版本庫按照讀寫方式裝配,你*必須*使用前面討論的mod_dav_lock技巧。一旦鎖定看起來工作了,共享會運作良好:文件可以直接以讀/寫模式打開,盡管每次存儲操作會導致客戶端對臨時位置執行一個`PUT`,對原文件的`DELETE`操作和把臨時資源`MOVE`到原文件。每次存盤會產生三個新的Subversion修訂版本!
還要警告一點:OS X的WebDAV客戶端可以對HTTP重定向完全敏感,如果你不能裝配版本庫,你可以在`httpd.conf`開啟`BrowserMatch`指示:
~~~
BrowserMatch "^WebDAVFS/1.[012]" redirect-carefully
~~~
### Unix: Nautilus 2
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文件系統修訂版本,而不是一個。
-
當刪除了一個集合,它對每個獨立的孩子而不是集合本身發出HTTP的`DELETE`操作,這會創建一系列新的修訂版本。
### Linux davfs2
Linux davfs2是一個Linux內核的文件系統模塊,它的開發位于`http://dav.sourceforge.net/`。一旦安裝,一個WebDAV網絡共享可以使用普通的Linux的**mount**命令裝配。
一個公開的秘密就是DAV客戶端不會與mod_dav_svn的自動版本化完全工作正常,即使一個單獨對服務器的寫嘗試需要`LOCK`請求作為前提,而這是mod_dav_svn不支持的。此時,還沒有數據表明是否可以使用mod_dav_lock解決這個問題。
Unix用戶也可以運行**mount -t webdav URL /mountpoint**。
- 第1章介紹
- Subversion的歷史
- Subversion的特性
- Subversion的架構
- 安裝Subversion
- Subversion的組件
- 快速入門
- 第2章基本概念
- 版本模型
- Subversion實戰
- 摘要
- 第3章指導教程
- 導入
- 修訂版本: 號碼、關鍵字和日期,噢,我的!
- 初始化的Checkout
- 基本的工作周期
- 檢驗歷史
- 其他有用的命令
- 摘要
- 第4章分支與合并
- 使用分支
- 在分支間拷貝修改
- 常見用例
- 轉換工作拷貝
- 標簽
- 分支維護
- 摘要
- 第5章版本庫管理
- 版本庫的創建和配置
- 版本庫維護
- 添加項目
- 摘要
- 第6章配置服務器
- 網絡模型
- svnserve,一個自定義的服務器
- httpd,Apache的HTTP服務器
- 支持多種版本庫訪問方法
- 第7章高級主題
- 屬性
- Peg和實施修訂版本
- 外部定義
- 賣主分支
- 本地化
- Subversion版本庫URL
- 第8章開發者信息
- 使用API
- 進入工作拷貝的管理區
- WebDAV
- 使用內存池編程
- 為Subversion做貢獻
- 第9章Subversion完全參考
- svn add
- svn blame
- svn cat
- svn checkout
- svn cleanup
- svn commit
- svn copy
- svn delete
- svn diff
- svn export
- svn help
- svn import
- svn info
- svn list
- svn log
- svn merge
- svn mkdir
- svn move
- svn propdel
- svn propedit
- svn propget
- svn proplist
- svn propset
- svn resolved
- svn revert
- svn status
- svn switch
- svn update
- svnadmin
- svnadmin create
- svnadmin deltify
- svnadmin dump
- svnadmin help
- svnadmin hotcopy
- svnadmin list-dblogs
- svnadmin list-unused-dblogs
- svnadmin load
- svnadmin lstxns
- svnadmin recover
- svnadmin rmtxns
- svnadmin setlog
- svnadmin verify
- svnlook
- svnlook author
- svnlook cat
- svnlook changed
- svnlook date
- svnlook diff
- svnlook dirs-changed
- svnlook help
- svnlook history
- svnlook info
- svnlook log
- svnlook propget
- svnlook proplist
- svnlook tree
- svnlook uuid
- svnlook youngest
- svnserve
- svnversion
- mod_dav_svn Configuration Directives
- 附錄A.Subversion對于CVS用戶
- 目錄的版本
- 更多離線操作
- 區分狀態和更新
- 分支和標簽
- 元數據屬性
- 沖突解決
- 二進制文件和轉化
- 版本化的模塊
- 認證
- 轉化CVS版本庫到Subversion
- 附錄C.WebDAV和自動版本化
- 自動版本化交互性
- Subversion和DeltaV
- 術語表