### 附錄C.WebDAV和自動版本化
**目錄**
WebDAV是HTTP的一個擴展,作為一個文件共享的標準不斷發展。當今的操作系統變得極端的web化,許多內置了對裝配WebDAV服務器導出的“共享”的支持。
如果你使用Apache/mod_dav_svn作為你的Subversion網絡服務器,某種程度上,你也是在運行一個WebDAV服務器。這個附錄提供了這種協議一些背景知識,Subversion如何使用它,Subversion如何和認識WebDAV的軟件交互工作。
### WebDAV基本概念
這個小節提供了對WebDAV背后思想的一個非常簡短和普通的總體看法,為理解WebDAV在客戶端和服務器之間的兼容性問題打下基礎。
### 僅是平常的WebDAV
RFC 2518為HTTP 1.1定義了一組概念和附加擴展方法來把web變成一個更加普遍的讀/寫媒體,基本思想是一個WebDAV兼容的web服務器可以像普通的文件服務器一樣工作;客戶端可以裝配類似于NFS或SMB的WebDAV“共享”。
然而,必須注意到RFC 2518并*沒有*提供任何版本控制模型,盡管DAV中有“V”。基本的DAV客戶端和服務器只是假定每個文件或目錄只有一個版本存在,可以重復的覆蓋。
這是基本的WebDAV引入的新概念和方法:
新的寫方法
超出了標準HTTP的`PUT`方法(用來創建和覆蓋web資源),WebDAV定義了新的`COPY`和`MOVE`方法用來復制或重新組織資源。
集合
這是一個簡單的WebDAV術語用來表示一組資源(URI),在大多數情況下,你可以說以“/”結尾的東西是一個集合,文件資源可以使用`PUT`方法寫或創建,而集合資源使用`MKCOL`方法創建。
屬性
這與Subversion中是同一個思想―附加在文件和集合上的元數據,一個客戶端可以使用新方法`PROPFIND`列出或檢索附加在一個資源上的屬性,也可以使用`PROPPATCH`方法修改這些屬性。一些屬性是完全由用戶控制的(例如,一個“color”屬性),還有一些是WebDAV服務器創建和控制的(例如,一個保存文件最后修改時間的屬性)。前一種叫做“dead”屬性,后一種叫做“live”屬性。
鎖定
WebDAV服務器可以決定為客戶端提供一個鎖定特性―這部分的規范是可選的,盡管大多數WebDAV服務器提供了這個特性。如果提供這個特性,客戶端可以使用新的`LOCK`和`UNLOCK`方法來調節訪問資源的過程,在大多數情況下是使用獨占寫鎖(在[“鎖定-修改-解鎖 方案”一節]討論的),盡管共享寫鎖也是可以的。
### DeltaV擴展
因為RFC 2518漏下了版本概念,另一個小組留下來負責撰寫RFC 3253來添加WebDAV的版本化。WebDAV/DeltaV客戶端和服務器經常叫做“DeltaV”客戶端和服務器,因為DeltaV暗含了基本的WebDAV。
DeltaV引入了完全的新的首字母縮寫,但并不是被逼迫的。想法相當的直接,如下是DeltaV引入的新概念和方法:
每資源的版本化
像CVS和其他版本控制系統,DeltaV假定每個資源有一個潛在的無窮的狀態,一個客戶端可以使用`VERSION-CONTROL`放置一個版本控制之下的資源,這創建了一個新的版本控制資源(VCR),每次你修改VCR(通過`PUT`、`PROPPATCH`等),這個資源的新狀態就會創建,叫做一個版本資源(Version Resource,VR)。VCR和VR還是普通的web資源,使用URL定義,特定的VR也會擁有易讀的名字。
服務器端的工作拷貝模型
一些DeltaV服務器支持在服務器創建虛擬“工作區”,所有的工作在這里執行。客戶端使用`MKWORKSPACE`方法來創建私有區域,然后他們說明修改特定的VCR,“把它們檢出到”工作拷貝,編輯,然后再次“檢入”。在HTTP術語里,方法的順序可能是`CHECKOUT`、`PUT`、`CHECKIN`,會創建一個新的VR,每個VCR也有一個“歷史”資源用來追蹤和排序它的各種VR狀態。
客戶端工作拷貝模型
一些DeltaV服務器也支持客戶端可以有完全特定VR的私有工作拷貝的思想,(這就是CVS和Subversion的工作原理。)當客戶端希望提交修改到服務器,它通過使用`MKACTIVITY`方法創建一個臨時服務器事務(叫做一個活動)開始。然后客戶端在每個希望修改的VR上執行一個`CHECKOUT`操作,這在活動里創建了一些臨時“工作資源”,然后可以使用`PUT`和`PROPPATCH`方法修改。最后,客戶端對每個工作資源執行一個`CHECKIN`,在每個VCR創建了一個VR,并且整個活動會被刪除。
配置
DeltaV允許你定義叫做“配置”的靈活的VCR集合,不需要對應特定的目錄,每個VCR的內容可以使用`UPDATE`方法指向特定的VR。一旦配置是理想的,客戶端可以創建一個整個配置的“快照”,叫做“基線”。客戶端使用`CHECKOUT`和`CHECKIN`方法捕捉特定的配置狀態,很像它們使用這些方法創建VCR的特定VR狀態。
擴展性
DeltaV定義了新方法`REPORT`,允許客戶端和服務器執行自定義的數據交換。客戶端發送一個帶有包含自定義數據的完全標記的XML主體的`REPORT`請求;假定服務器理解特定的報告類型,它使用一個等同的XML主體來響應,這個技術與XML-RPC很類似。
自動版本化
對大多數,這是DeltaV的“殺手”特性,如果DeltaV服務器支持這個特性,然后基本的WebDAV客戶端(例如,那些不知道版本化的客戶端)仍然可以對服務器進行寫操作,服務器可以悄無聲息的執行版本操作。在最簡單的例子里,一個從基本的WebDAV客戶端發送的無知的`PUT`可能會被服務器轉化為`CHECKOUT`、`PUT`、`CHECKIN`。
因為這個原因,一些人開玩笑說WebDAV的客戶端是“WebDA”客戶端!
- 第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
- 術語表