作為新一代的開(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)和安全的用戶(hù)認(rèn)證功能。在 Apache 的支持下,用戶(hù)可以通過(guò) HTTP 協(xié)議訪問(wèn)版本庫(kù),管理員可以對(duì)用戶(hù)訪問(wèn) HTTP 的權(quán)限做出具體的設(shè)置,同時(shí) Subversion 還可以獲得 SSL 傳輸加密,用戶(hù)數(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ì)于普通用戶(hù),即應(yīng)用程序開(kāi)發(fā)者而言,尤其是對(duì) Eclipse 的用戶(hù)而言,Subversion 的使用十分的簡(jiǎn)單。通過(guò)官方提供的 Eclipse 插件 Subclipse,用戶(hù)可以在 Eclipse 里面很方便的使用 Subversion 客戶(hù)端的各項(xiàng)基本功能。具體的客戶(hù)端設(shè)置和使用方法,請(qǐng)參考 Subversion 官方網(wǎng)站和 Subclipse 官方網(wǎng)站。簡(jiǎn)單說(shuō)來(lái),在 Eclipse 中使用 Subversion 插件的基本功能,如更新、提交、同步、分支等等,基本上同使用 Eclipse 自帶的 CVS 插件一模一樣,這樣,用戶(hù)可以從 CVS 方便的轉(zhuǎn)移到 Subversion。
目前,Subversion 已經(jīng)升級(jí)到 1.3.2 版本,相關(guān)下載、特性說(shuō)明和詳細(xì)使用手冊(cè)可以在 Subversion 主頁(yè)上找到。
簡(jiǎn)單的版本庫(kù)管理
有了簡(jiǎn)單易用的客戶(hù)端,大部分的用戶(hù)都可以輕松使用 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)明的比較。