劉冬 , Java自由人
2005 年 9 月
本文將介紹如何通過 Subversion 來構(gòu)建小組開發(fā)過程中最為重要的版本控制環(huán)境,包括Subversion 環(huán)境的安裝配置以及如何通過各種有效的客戶端工具來提高工作的效率。
一. 首先我們先來認(rèn)識(shí)一下 Subversion
Subversion 項(xiàng)目的初衷是為了替換現(xiàn)在開源社區(qū)最為流行的版本控制軟件 CVS,在 CVS的功能的基礎(chǔ)上有很多的提升同時(shí)也能較好的解決 CVS 系統(tǒng)的一些不足,這些提升主要包括以下的一些方面:
1. 目錄、文件以及改名等元數(shù)據(jù)的版本化 不同于 CVS 只關(guān)心文件的內(nèi)容以及文件是否存在,所有文件、目錄的相關(guān)操作都是被版本化的,例如文件的改名、拷貝等等;
2. 提交操作是真正的原子操作 在 Subversion 中,提交操作是不可分割的,修訂版本號(hào)是基于每次提交操作而非文件。提交日志被附加在每個(gè)修訂版本中,而不是像 CVS 一樣冗余的進(jìn)行存儲(chǔ);
3. 可通過 Apache 服務(wù)器提供基于 WebDAV/DeltaV 協(xié)議的支持 該功能可使 Subversion 通過 Apache Web 服務(wù)器使資源庫更加靈活的在網(wǎng)上進(jìn)行共享,使其在互操作性上大大優(yōu)于 CVS;
4. 可獨(dú)立運(yùn)行 當(dāng)你不想使用 Apache 2.x 時(shí)候,你也可以使用 Subversion,它可以以守護(hù)進(jìn)程或者是Windows 下的服務(wù)方式獨(dú)立運(yùn)行;
5. 分支(Branching)與標(biāo)簽(Tagging)操作是輕量級(jí)的;
6. 客戶服務(wù)器端分層庫結(jié)構(gòu)設(shè)計(jì);
7. 資源庫可以采用數(shù)據(jù)庫(BerkeleyDB)或者是使用特定格式的文件進(jìn)行存儲(chǔ);
8. 更有效的對二進(jìn)制文件進(jìn)行處理。
更多的特性可以參照 Subversion 提供的文檔(http://subversion./)
二. Subversion版本控制環(huán)境在Windows系統(tǒng)下的安裝
在Windows下安裝最為方便的辦法就是下載安裝程序,你可以到下面這個(gè)地址下載最新的二進(jìn)制壓縮版本svn-win32-1.2.3.zip ,地址是: http://subversion./servlets/ProjectDocumentList?folderID=91 把該文件解壓到一個(gè)目錄,假定為 D:\subversion。
接下來新建一個(gè)存放項(xiàng)目的資源庫目錄,例如:D:\repository\project1,執(zhí)行下面命令對這個(gè)項(xiàng)目目錄進(jìn)行初始化: D:\subversion\bin> svnadmin create D:\repository\project1
Subversion會(huì)在D:\repository\project1目錄下生成很多的子目錄以及文件,接下來我們需要設(shè)置該項(xiàng)目的用戶信息以及項(xiàng)目的基本信息,打開D:\repository\project1\conf\passwd文件,去掉[users]的注釋,并添加用戶如下:
### This file is an example password file for svnserve.
### Its format is similar to that of svnserve.conf. As shown in the
### example below it contains one section labelled [users].
### The name and password for each user follow, one account per line.
[users]
admin = admin1234
liudong = liudong123
|
Subversion使用了明碼存儲(chǔ)用戶的口令,這應(yīng)該算是它的一個(gè)不足。
接下來打開conf\svnserve.conf修改如下
[general]
anon-access = read
auth-access = write
password-db = passwd
realm = project1
|
在做完這些基本的設(shè)置后就可以啟動(dòng) Subversion 了,當(dāng)然最好的方式就是讓 Subversion 做為一個(gè)服務(wù)來運(yùn)行,我們可以通過一個(gè)第三方的工具 SVNService 讓 Subversion 以 Windows 服務(wù)的方式運(yùn)行。
到 http://dark./~mbn/svnservice/ 下載SVNService.zip并把它解壓到{Subversion}\bin目錄下,通過運(yùn)行 svnservice -install -d -r D:\repository\project1 ,執(zhí)行的結(jié)果顯示:SVNService installed. 這時(shí)候你可以在服務(wù)控制臺(tái)中看到名為SVNService的服務(wù),啟動(dòng)它就可以了,如果你不想用服務(wù)的方式啟動(dòng)Subversion,你可以運(yùn)行 svnserve -d來啟動(dòng)Subversion。
要卸載SVNService服務(wù),只需要運(yùn)行 SVNService -remove 即可。
至此,Subversion已經(jīng)安裝成功,我們將在接下來的一節(jié)中介紹如何通過各種客戶端對資源庫進(jìn)行操作。
三. Subversion 各種客戶端的使用
一個(gè)版本控制軟件好不好不僅在于服務(wù)器端是否提供足夠強(qiáng)大的功能,同時(shí)有沒有足夠友好的客戶端也是非常重要的。
Subversion 本身提供一個(gè)基于命令行的工具 svn,基本上所有的操作都可以通過這個(gè)工具來完成,但是用戶操作界面不太友好。不過我們可以先使用這個(gè)工具來驗(yàn)證一下我們之前安裝的 Subversion 服務(wù)是否已經(jīng)正常工作。接下來我們先隨便導(dǎo)入一個(gè)項(xiàng)目,并對這個(gè)項(xiàng)目的某些文件進(jìn)行簡單的修改、提交并重新導(dǎo)出項(xiàng)目,通過這些基本的操作先來體驗(yàn)一下 Subversion。(為了操作方便你最好把{subversion}\bin目錄加到系統(tǒng)的PATH環(huán)境變量中)
1. 導(dǎo)入項(xiàng)目
轉(zhuǎn)到你的項(xiàng)目所在的目錄,執(zhí)行下面命令來提交整個(gè)項(xiàng)目 svn import . svn://localhost/project1 -m "initial import" --username liudong --password liudong123 其中[.]表示當(dāng)前目錄,你也可以指定項(xiàng)目的絕對路徑。
2. 檢出項(xiàng)目 為了驗(yàn)證剛才導(dǎo)入的項(xiàng)目,我們轉(zhuǎn)到一個(gè)新的目錄下,執(zhí)行 svn checkout svn://localhost/project1 --username liudong -password liudong123 就可以在當(dāng)前目錄下生成一個(gè)project1的項(xiàng)目目錄,目錄中的內(nèi)容就是我們剛才所提交的所有文件。
3. 提交修改后的文件 修改項(xiàng)目中的任何一個(gè)文件,使用命令來提交所作的修改: svn commit ReadMe.txt -m "modified" --username liudong -password liudong123
4. 獲取最新的版本 當(dāng)項(xiàng)目組的其他成員修改并提交了某個(gè)文件,你可以通過下面命令來獲取到該文件的最新的版本: svn update -r HEAD ReadMe.txt --username liudong -password liudong123
上面四個(gè)是版本控制環(huán)境中最最基本的操作,不過這樣的操作環(huán)境你肯定覺得麻煩,對于使用Eclipse環(huán)境進(jìn)行開發(fā)的朋友來講,接下來我們介紹一個(gè) Eclipse的插件Subclipse,該插件提供對Subversion服務(wù)的操作支持。你可以單獨(dú)下載該插件的壓縮包進(jìn)行本地更新或者通過 Eclipse Update進(jìn)行遠(yuǎn)程安裝,遠(yuǎn)程安裝的URL是 http://subclipse./update ,相信大家對Eclipse Update已經(jīng)了如指掌,這里不再羅嗦。
檢查一下插件有沒有安裝成功吧,打開菜單Windows->Preferences->Team檢查是否有SVN節(jié)點(diǎn),點(diǎn)擊SVN即可看到該插件的設(shè)置界面如下圖所示:
保持默認(rèn)的設(shè)置即可,接下來我們通過該插件將一個(gè)項(xiàng)目導(dǎo)入到Subversion服務(wù)器中,右擊項(xiàng)目名->Team->Share Project…打開項(xiàng)目共享對話框,對話框有兩個(gè)選擇,一是Eclipse內(nèi)置的對CVS的支持,還有另外一個(gè)就是我們剛裝上的SVN。選擇SVN進(jìn)入服務(wù)器設(shè)置界面,入下圖
需要填寫的是服務(wù)器的URL以及用戶名和口令,服務(wù)器的URL不需要填寫項(xiàng)目名稱,點(diǎn)擊下一步按鈕進(jìn)入項(xiàng)目名稱設(shè)置
在這里可以看到Subclipse會(huì)自動(dòng)給URL加上項(xiàng)目的名稱。點(diǎn)擊結(jié)束按鈕將出現(xiàn)提交對話框如下圖
選擇你所需要提交的文件或者目錄點(diǎn)擊OK按鈕即可完成項(xiàng)目的導(dǎo)入。接下來的很多操作跟CVS很類似,但是又比CVS的功能強(qiáng)大得多,隨便右擊一個(gè)文件打開Team的上下文菜單如下:
通過該菜單我們可以看到CVS有的功能在這上面都有,而且還包括可以對文件進(jìn)行加鎖和解鎖操作,同時(shí)還有可以設(shè)置文件的屬性,可以通過SVN Properties視圖查看某個(gè)文件的屬性
與CVS不同的是當(dāng)文件被修改后SVN插件顯示的是一個(gè)星號(hào)的小圖標(biāo)。同樣的,當(dāng)有些文件你并不想添加到資源庫中的時(shí)候,你也可以像CVS一樣把該文件添加到svn:ignore。Subclipse插件還有更多其他的功能這里不一一介紹了,大家可以在使用的過程中去發(fā)掘。
以上介紹的針對使用Eclipse開發(fā)環(huán)境的人員,但是項(xiàng)目組的一些其他成員例如網(wǎng)頁設(shè)計(jì)師,他們怎么來方便的使用Subversion呢?因此接下來我們介紹一個(gè)集成在Windows Shell的客戶端工具TortoiseSVN (http://tortoisesvn./),利用這個(gè)工具也可以非常簡單的進(jìn)行資源庫的操作。TortoiseSVN的安裝非常簡單,直接運(yùn)行安裝程序,按照默認(rèn)方式安裝即可,安裝完畢需要重新啟動(dòng)系統(tǒng)。
如果沒什么意外的話,隨便右擊一個(gè)文件即可看到上下文菜單多了一個(gè)菜單項(xiàng)是TortoiseSVN,如果是文件夾還會(huì)有另外一個(gè)項(xiàng)是SVN Checkout…。在使用之前你可以根據(jù)自己的喜歡對TortoiseSVN進(jìn)行一些設(shè)置,右擊任一文件選擇TortoiseSVN-> Settings即可打開設(shè)置對話框如下:
TortoiseSVN的一個(gè)非常有用的工具就是資源庫瀏覽器,在桌面空白位置單擊鼠標(biāo)右鍵選擇TortoiseSVN->Repo-Browser即可打開資源庫瀏覽器如下圖所示:
通過該瀏覽器你可以瀏覽資源庫中的所有項(xiàng)目以及項(xiàng)目中每一個(gè)文件的信息。但是怎么做一些日常的操作呢,例如提交、更新等等?
首先我們先看如何從資源庫中檢出(CheckOut)一個(gè)已有的項(xiàng)目,在空白處單擊鼠標(biāo)右鍵選擇SVN Checkout…菜單項(xiàng)
輸入存放項(xiàng)目的文件夾以及項(xiàng)目對應(yīng)的SVN的URL地址如上圖,點(diǎn)擊OK按鈕后TortoiseSVN會(huì)顯示詳細(xì)的進(jìn)度信息
轉(zhuǎn)到存放項(xiàng)目的文件夾即可看到整個(gè)項(xiàng)目的所有文件已經(jīng)被檢出,而且圖標(biāo)已經(jīng)被替換成TortoiseSVN的圖標(biāo),如下圖所示:
這個(gè)時(shí)候你就可以隨意的修改文件,并在修改后右擊所修改的文件即可進(jìn)行提交或者更新操作。
以上介紹的三種不同的Subversion客戶端已經(jīng)可以滿足大部分用戶的要求,同時(shí)三者也可以互為補(bǔ)充。另外Subversion也可以與 Apache HTTP服務(wù)器結(jié)合提供基于WebDAV協(xié)議的服務(wù),其在共享方面遠(yuǎn)遠(yuǎn)超過了CVS,有興趣的讀者可以閱讀Subversion的文檔進(jìn)行配置。
對正在使用CVS的用戶來講,也可以通過一個(gè)名為cvs2svn的工具來將已有的項(xiàng)目移植到Subversion中,該工具可以在http://cvs2svn./ 下載。
參考資料
關(guān)于作者
|