下一頁 1 2 3 4
作為新一代的開源版本控制工具,Subversion 以其目錄版本化、原子提交、版本化的元數據、更加有效的分支和標簽等優良特性,正逐漸受到開源軟件社區的重視,并有望取代 CVS,成為開源軟件開發中版本控制的首選系統。
在服務器端,Subversion 最大的獨特之處,在于它可以通過一個擴展模塊與 Apache 的 HTTP 服務器相結合,實現很多高級的管理功能和安全特性。與 CVS 相比,Subversion 實現了更加先進和安全的用戶認證功能。在 Apache 的支持下,用戶可以通過 HTTP 協議訪問版本庫,管理員可以對用戶訪問 HTTP 的權限做出具體的設置,同時 Subversion 還可以獲得 SSL 傳輸加密,用戶數據加密,以及目錄級的訪問控制等特性。
本文將在服務器端配置工作的角度,結合作者在實際開發工作當中的配置實例,介紹 Subversion 服務器端的基本配置和管理,以及如何將 Subversion 與 Apache 結合,實現一些高級管理功能。
Subversion 簡介
在開源軟件的開發過程當中,由于開發方式自由和開發人員分散這些特性,版本控制問題一直是關系到項目成敗的重要問題。沒有版本控制系統的支持,開源軟件的開發過程就是混亂和不可控制的。
長期以來,CVS 作為一種普遍采用的開源版本控制工具,在很多的開源軟件項目當中充當了重要的角色。在 Eclipse 當中,更是把 CVS 作為一個默認的插件,與 Ant,JUnit 等工具并列在一起,成為 Eclipse 軟件開發的基本工具。近年來,隨著開源社區的發展,一種功能更加強大的開源版本控制工具逐漸進入了人們的視野,那就是 Subversion,憑借著更為優秀的特性,Subversion 正在逐步取代 CVS,成為新一代的開源版本控制工具。
相比 CVS,Subversion 中的目錄、文件以及改名等元數據都是被版本化的,例如文件的改名、拷貝等等操作;而且,在 Subversion 中,提交操作是不可分割的,修訂版本號是基于每次提交操作而非文件;另外,Subversion 可以獨立運行,有著輕量級的分支(Branching)與標簽(Tagging)操作,版本庫可以采用數據庫(Berkeley DB)或者是使用特定格式的文件進行存儲,對二進制文件進行處理更為有效;最后,Subversion 工具以及相關插件都有著很好的國際化支持,可以支持包括簡體中文在內的多種語言版本,方便全球各地的開發人員。這些優秀的新特性,使得 Subversion 成為開源社區目前的最佳選擇。
對于普通用戶,即應用程序開發者而言,尤其是對 Eclipse 的用戶而言,Subversion 的使用十分的簡單。通過官方提供的 Eclipse 插件 Subclipse,用戶可以在 Eclipse 里面很方便的使用 Subversion 客戶端的各項基本功能。具體的客戶端設置和使用方法,請參考 Subversion 官方網站和 Subclipse 官方網站。簡單說來,在 Eclipse 中使用 Subversion 插件的基本功能,如更新、提交、同步、分支等等,基本上同使用 Eclipse 自帶的 CVS 插件一模一樣,這樣,用戶就可以從 CVS 方便的轉移到 Subversion。
目前,Subversion 已經升級到 1.3.2 版本,相關下載、特性說明和詳細使用手冊可以在 Subversion 主頁上找到。
簡單的版本庫管理
有了簡單易用的客戶端,大部分的用戶都可以輕松使用 Subversion 了,不過,作為服務器端的管理人員,還必須進一步了解服務器端的基本配置管理,才可以充分利用 Subversion 的各項優秀特性。
版本庫創建
Subversion 的版本庫(repository),就是位于服務器端,統一管理和儲存數據的地方。本文中,我們以 Linux 為例,介紹在服務器端配置和管理 Subversion 版本庫的基本方法。
要創建一個版本庫,首先要確定采用哪種數據存儲方式。在 Subversion 中,版本庫的數據存儲有兩種方式,一種是在 Berkeley DB 數據庫中存放數據;另一種是使用普通文件,采用自定義的格式來儲存,稱為 FSFS。
兩種存放方式各有優缺點,讀者可以參考 http://svnbook.org/ 上面的文檔來了解兩者詳細的比較和區別,這里,我們僅引用上述文檔當中的簡單對照表,給出一個簡明的比較。
特性 | Berkeley DB | FSFS |
---|---|---|
對操作中斷的敏感 | 很敏感;系統崩潰或者權限問題會導致數據庫“塞住”,需要定期進行恢復。 | 不敏感 |
可只讀加載 | 不能 | 可以 |
存儲平臺無關 | 不能 | 可以 |
可從網絡文件系統訪問 | 不能 | 可以 |
版本庫大小 | 稍大 | 稍小 |
擴展性:修訂版本樹數量 | 無限制 | 某些本地文件系統在處理單一目錄包含上千個條目時會出現問題。 |
擴展性:文件較多的目錄 | 較慢 | 較慢 |
檢出最新代碼的速度 | 較快 | 可以 |
大量提交的速度 | 較慢,但時間被分配在整個提交操作中 | 較快,但最后較長的延時可能會導致客戶端操作超時 |
組訪問權處理 | 對于用戶的 umask 設置十分敏感,最好只由一個用戶訪問。 | 對 umask 設置不敏感 |
功能成熟時間 | 2001 年 | 2004 年 |
確定了具體的數據存儲類型,只要在命令行當中執行 svnadmin 命令就可以創建一個 Subversion 版本庫,命令如下
# 創建文件夾 $ mkdir /etc/svn/ $ mkdir /etc/svn/repos # 運行創建版本庫的命令,指定數據存儲為 FSFS,如果要指定為 Berkeley DB,則將 fsfs 替換為 bdb $ svnadmin create --fs-type fsfs /etc/svn/repos |
如果一切正常,命令執行后不會有任何反饋信息而迅速返回,這樣,一個新的版本庫就被創建出來了。我們來查看一下生成的版本庫結構:
$ ls -l /etc/svn/repos 總用量 56 drwxrwxr-x 2 robert robert 4096 8月 27 17:27 conf drwxrwxr-x 2 robert robert 4096 8月 27 17:27 dav drwxrwsr-x 5 robert robert 4096 8月 27 17:27 db -r--r--r-- 1 robert robert 2 8月 27 17:27 format drwxrwxr-x 2 robert robert 4096 8月 27 17:27 hooks drwxrwxr-x 2 robert robert 4096 8月 27 17:27 locks -rw-rw-r-- 1 robert robert 229 8月 27 17:27 README.txt |
其中,conf 目錄下存放了版本庫的配置文件,包括用戶訪問控制和權限控制等內容,文件本身的注釋說明十分詳細,讀者可以根據注釋自行配置;dav 目錄是提供給 Apache 相關模塊的目錄,目前為空;db 目錄下存放著 Subversion 所要管理的所有受版本控制的數據,不同的存儲方式(Berkeley DB 或者 FSFS)下有著不同的目錄結構,不過我們一般不用直接修改和查看這個目錄下的內容,Subversion 的命令可以安全的操作這個目錄;另外,hooks 目錄存放著鉤子腳本及其模版(一種版本庫事件觸發程序),locks 目錄存放著 Subversion 版本庫鎖定數據,format 文件記錄了版本庫的布局版本號。
原文轉自:http://www.anti-gravitydesign.com