作為新一代的開(kāi)源版本控制工具,Subversion 以其目錄版本化、原子提交、版本化的元數(shù)據(jù)、更加有效的分支和標(biāo)簽等優(yōu)良特性,正逐漸受到開(kāi)源軟件社區(qū)的重視,并有望取代 CVS,成為開(kāi)源軟件開(kāi)發(fā)中版本控制的系統(tǒng)。
在服務(wù)器端,Subversion 大的獨(dú)特之處,在于它可以通過(guò)一個(gè)擴(kuò)展模塊與 Apache 的 HTTP 服務(wù)器相結(jié)合,實(shí)現(xiàn)很多高級(jí)的管理功能和安全特性。與 CVS 相比,Subversion 實(shí)現(xiàn)了更加先進(jìn)和安全的用戶認(rèn)證功能。在 Apache 的支持下,用戶可以通過(guò) HTTP 協(xié)議訪問(wèn)版本庫(kù),管理員可以對(duì)用戶訪問(wèn) HTTP 的權(quán)限做出具體的設(shè)置,同時(shí) Subversion 還可以獲得 SSL 傳輸加密,用戶數(shù)據(jù)加密,以及目錄級(jí)的訪問(wèn)控制等特性。
本文將在服務(wù)器端配置工作的角度,結(jié)合作者在實(shí)際開(kāi)發(fā)工作當(dāng)中的配置實(shí)例,介紹 Subversion 服務(wù)器端的基本配置和管理,以及如何將 Subversion 與 Apache 結(jié)合,實(shí)現(xiàn)一些高級(jí)管理功能。
Subversion 簡(jiǎn)介
在開(kāi)源軟件的開(kāi)發(fā)過(guò)程當(dāng)中,由于開(kāi)發(fā)方式自由和開(kāi)發(fā)人員分散這些特性,版本控制問(wèn)題一直是關(guān)系到項(xiàng)目成敗的重要問(wèn)題。沒(méi)有版本控制系統(tǒng)的支持,開(kāi)源軟件的開(kāi)發(fā)過(guò)程是混亂和不可控制的。
長(zhǎng)期以來(lái),CVS 作為一種普遍采用的開(kāi)源版本控制工具,在很多的開(kāi)源軟件項(xiàng)目當(dāng)中充當(dāng)了重要的角色。在 Eclipse 當(dāng)中,更是把 CVS 作為一個(gè)默認(rèn)的插件,與 Ant,JUnit 等工具并列在一起,成為 Eclipse 軟件開(kāi)發(fā)的基本工具。近年來(lái),隨著開(kāi)源社區(qū)的發(fā)展,一種功能更加強(qiáng)大的開(kāi)源版本控制工具逐漸進(jìn)入了人們的視野,那是 Subversion,憑借著更為的特性,Subversion 正在逐步取代 CVS,成為新一代的開(kāi)源版本控制工具。
相比 CVS,Subversion 中的目錄、文件以及改名等元數(shù)據(jù)都是被版本化的,例如文件的改名、拷貝等等操作;而且,在 Subversion 中,提交操作是不可分割的,修訂版本號(hào)是基于每次提交操作而非文件;另外,Subversion 可以獨(dú)立運(yùn)行,有著輕量級(jí)的分支(Branching)與標(biāo)簽(Tagging)操作,版本庫(kù)可以采用數(shù)據(jù)庫(kù)(Berkeley DB)或者是使用特定格式的文件進(jìn)行存儲(chǔ),對(duì)二進(jìn)制文件進(jìn)行處理更為有效;后,Subversion 工具以及相關(guān)插件都有著很好的國(guó)際化支持,可以支持包括簡(jiǎn)體中文在內(nèi)的多種語(yǔ)言版本,方便全球各地的開(kāi)發(fā)人員。這些的新特性,使得 Subversion 成為開(kāi)源社區(qū)目前的佳選擇。
對(duì)于普通用戶,即應(yīng)用程序開(kāi)發(fā)者而言,尤其是對(duì) Eclipse 的用戶而言,Subversion 的使用十分的簡(jiǎn)單。通過(guò)官方提供的 Eclipse 插件 Subclipse,用戶可以在 Eclipse 里面很方便的使用 Subversion 客戶端的各項(xiàng)基本功能。具體的客戶端設(shè)置和使用方法,請(qǐng)參考 Subversion 官方網(wǎng)站和 Subclipse 官方網(wǎng)站。簡(jiǎn)單說(shuō)來(lái),在 Eclipse 中使用 Subversion 插件的基本功能,如更新、提交、同步、分支等等,基本上同使用 Eclipse 自帶的 CVS 插件一模一樣,這樣,用戶可以從 CVS 方便的轉(zhuǎn)移到 Subversion。
目前,Subversion 已經(jīng)升級(jí)到 1.3.2 版本,相關(guān)下載、特性說(shuō)明和詳細(xì)使用手冊(cè)可以在 Subversion 主頁(yè)上找到。
簡(jiǎn)單的版本庫(kù)管理
有了簡(jiǎn)單易用的客戶端,大部分的用戶都可以輕松使用 Subversion 了,不過(guò),作為服務(wù)器端的管理人員,還必須進(jìn)一步了解服務(wù)器端的基本配置管理,才可以充分利用 Subversion 的各項(xiàng)特性。
版本庫(kù)創(chuàng)建
Subversion 的版本庫(kù)(repository),是位于服務(wù)器端,統(tǒng)一管理和儲(chǔ)存數(shù)據(jù)的地方。本文中,我們以 Linux 為例,介紹在服務(wù)器端配置和管理 Subversion 版本庫(kù)的基本方法。
要?jiǎng)?chuàng)建一個(gè)版本庫(kù),首先要確定采用哪種數(shù)據(jù)存儲(chǔ)方式。在 Subversion 中,版本庫(kù)的數(shù)據(jù)存儲(chǔ)有兩種方式,一種是在 Berkeley DB 數(shù)據(jù)庫(kù)中存放數(shù)據(jù);另一種是使用普通文件,采用自定義的格式來(lái)儲(chǔ)存,稱(chēng)為 FSFS。
兩種存放方式各有優(yōu)缺點(diǎn),讀者可以參考 http://svnbook.org/ 上面的文檔來(lái)了解兩者詳細(xì)的比較和區(qū)別,這里,我們僅引用上述文檔當(dāng)中的簡(jiǎn)單對(duì)照表,給出一個(gè)簡(jiǎn)明的比較。