摘要 CVS很酷,但Subversion更酷。然而,若是你在使用Eclipse進行開發,那麼你可能直到近來才能利用Subversion帶來的優勢。隨着 Subclipse的發行,Subversion可能會最終在你的Eclipse IDE環境充分發揮其威力而壓倒CVS。
1、SCM和Subversion簡介
軟件配置管理(SCM)是管理源碼並保持其安全的良好藝術,它能實現源碼與其餘團隊成員之間保持共享,而且可以對之加以保護。良好地利用SCM,你可以容易地跟蹤軟件的發行和新的開發分支;這樣以來,能夠更爲容易地標識和修正發行產品中的錯誤。
其實,有大量的SCM工具可用,既有開源的和也有商業化的,例如StarTeam,Perforce,BitKeeper和ClearCase。在開源 世界裏,事實上的SCM標準是併發版本管理系統(CVS),它被普遍應用於世界範圍內的成百上千的開源和商業工程。然而,CVS也存在下列許多固有的缺 陷,這使得它沒法很是完美地適合於現代工程開發:
· 實質上針對文本文件的設計使得CVS處理二進制文件能力比較差。在每一次提交時,二進制文件被以總體形式傳輸和存儲,這將帶來帶寬和磁盤空間的浪費。
· 在CVS中,你不能移動文件和目錄。你惟一的選擇基本上就是刪除而且從新添加它們,從而失去了整個過程當中的全部的文件歷史信息。
· CVS中沒有實現原子提交的概念。比方說,你要把10個文件提交到服務器,而該提交操做每每在整個過程的中途停了下來。(這極可能會發生,若是某人同時提 交一個文件,或甚至若是你的網絡失敗或你的PC從新啓動的話。)在這種狀況下,服務器將僅記錄下你的修正的一半信息,這可能會使代碼基部分處於一種潛在地 不穩定的狀態。
Subversion是一種比較新的開源SCM工具,其設計目的是力圖從根本上克服原CVS所具備的限制。它是一種良好設計的工具,具備適合於現×××發的許多新特徵:
· 提交是原子化的。提交的文件都可以被正確加入到一個新的修訂當中,不然倉庫不會被更新;而且每個新的修訂僅由一次提交中的變化部分組成。
· Subversion對文本和二進制文件使用一種巧妙的二進制技術,這既優化了網絡流量也優化了倉庫磁盤空間。
· 在Subversion中,每一次修訂都表明了一個特定時間內完整的目錄樹拷貝。文件和目錄能夠不加限制地進行移動。
· Subversion僅存儲兩個版本之間的修改內容,這不只節約了磁盤空間,而且意味着標識一個新版本或建立一種新的子內容幾乎能夠當即實現。
· 你能夠以多種途徑來存取一個Subversion倉庫,具體則依賴於你的須要:使用HTTP或HTTPS(與WebDAV一塊兒使用),使用快速的專利性svn:協議,或直接經由本地文件,等等。
2、Subclipse插件與Eclipse的集成
一種良好的SCM應該與你的工做環境緊密地集成到一塊兒。沒有誰真正喜歡轉到命令行以把文件添加到倉庫。Eclipse很早就實現了CVS集成,可是直到 最近Subversion用戶仍沒有被引發重視。如今,新的Subclipse插件提供了在Eclipse中的一種平滑的Subversion集成。
(一) 安裝Subclipse插件
下面,你以一般的方法從更新站點下安裝Subclipse:
1. 打開"Find and install"窗口("Help>Software Updates>Find and Install")。
2. 選擇"Search for new features to install"選項並點擊Next。
3. 點擊"New Remote Site"而且建立一遠程站點,使用名字Subclipse和URL [url]http://subclipse.tigris.org/update_1.0.x[/url](參考圖1)。
4. 在結果安裝窗口中,把"Subeclipse in the Features"選擇到安裝列表中,而且經過嚮導來開始安裝插件。
5. 完成這些以後,從新啓動Eclipse。如今,你能夠繼續往下進行!
圖1.安裝Subclipse插件
|
(二) 創建Repository定義
如今,既然你已經安裝完插件;那麼,接下來,你須要告訴它你的工程倉庫位於何處。你是在SVN Repository視圖中實現的。打開這個視圖("Windows>Show View>Other>SVN Repository")而且在上下文菜單中選擇"New>Repository Location"以顯示一個如圖2所示的對話框。輸入適當的URL而且點擊"Finish"。
圖2.添加一個倉庫定義
|
(三) 檢出(Check Out)一個工程
一旦創建一個倉庫,你就能夠在SVN Repository視圖中瀏覽全部的內容(見圖3)。咱們後面將會看到,這個視圖是一種與Subversion進行交互的很是方便的方式。
圖3.SVN Repository視圖。
如今,讓咱們把一個工程檢出到你的Eclipse工做區中。這隻需選擇你須要的Subversion倉庫,打開上下文菜單,而且選擇"Checkout"便可。這將打開一個具備兩個選項的嚮導:
· Check out as a Project configured using the New Project Wizard-這個選項打開新工程嚮導,這可讓你使用內建的Eclipse工程類型配置工程。這個選項一般是最好用的,由於它讓你使用相同的工程模板和 配置屏幕,而當你建立一個常規工程時你常用它們。
· Check out as a Project in the Workspace-這個選項簡單地在你的包含檢出源碼的工做區中建立一個Eclipse工程。
在以上兩種狀況下,你仍然須要更新工程的構建路徑,由於在檢出該工程源碼以前,Eclipse不能肯定這些
Java源碼所在的位置。
(四) 把一個新工程導入到倉庫中
若是你只是啓動了一個新的工程,那麼你須要把它導入到Subversion倉庫。Subclipse提供了一種方便的方式來直接從你的IDE內部實現這 一點。爲此,只須要從Package Explorer視圖下選擇你的工程,而且在上下文菜單中選擇"Team>Share Project"。你可使用現有倉庫之一或建立一新的倉庫定義。在你指定倉庫和工程名以後,你能指定你想放到倉庫中的文件和目錄而且提供一個初始註釋 (見圖4)。這種方法特別有用,由於它讓你有選擇地導入僅由Subversion管理的文件,即便該工程還包含其它文件(例如生成的類,臨時文件或其它不 是必需的內容等)。
圖4.把一個工程導入到一個Subversion倉庫中
|
3、在Eclipse中使用Subversion
如今,既然你的支持Subversion的工程已經啓動而且運行起來,那麼大多數必要的Subversion命令就可經由"Team"上下文菜單存取 (參考圖5)。你能夠在Package Explorer中看到你的本地文件的狀態(參考圖6),其中,任何修改了的文件都被標記上一個星號。存儲在倉庫中的文件都顯示一個小黃桶圖標(表明了一 個數據庫);尚未被添加到倉庫中的文件以一個問號顯示。
圖5.大多數Subversion命令能被經由Team菜單存取
圖6.你能夠在Package Explorer中看到本地文件的狀態
|
(一) 與Repository保持同步
從倉庫中更新你的文件而且把你的變化提交到倉庫是至關直接的過程,這可使用"Team>Update and Team>Commit"菜單選項來實現。在提交你的變化以前,你可能想看一下自從你的上次更新以來是否服務器上有任何文件被修改。爲此,你可使 用"Team >Synchronize with Repository"。這個命令讓你看到有哪些內容已經被局部地修改,有哪些內容在服務器上修改,以及這兩種修改之間的任何衝突(參考圖7)。你還能夠 以可視化方式看到衝突的版本,而且在提交你的變化以前糾正任何比較突出的衝突。
圖7.與倉庫保持同步
|
(二) 使用屬性
屬性是Subversion具備創新性的特徵之一。在Subversion中,你能夠把元數據("properties")關聯到任何文件或目錄。你能夠定義任何你喜歡的屬性,可是Subversion也提供了一些有用的內置屬性,例以下面圖8中所提供的這些屬性:
· svn:executable屬性,容許你在支持這種能力的操做系統上設置一個文件的可執行標誌。
· svn:need-lock屬性,能夠用來在文件(例如,對二進制文件很是有用)上強加排斥鎖。一個定義了svn:need-lock屬性的文件一次只能 被一我的修改。當該文件被檢出時,它是隻讀的。若是你想修改該文件,你須要首先使用"Team>Lock"菜單選項。以後,使用"Team> Unlock"釋放該文件,或僅提交你的變化。這一行爲將釋放該鎖而且讓其它的用戶也獲得該文件上的一把鎖。
圖8.把一個Subversion屬性添加到一個文件中
|
三) Tag和Branch
在Subversion中,很容易建立新的tag和branch。你可使用tag來標識一個特定的版本(使用一種可讀的名字,例如"Release 1.0")。;而一個branch用於新的開發工做而不影響主源碼基(稱做trunk)。在一個branch上的開發仍會繼續進行,直到開發者已經爲把變 化集成回主trunk做好準備。
在Subversion中,branch和tag都是經過製做給定修訂的一個虛擬副本(以另外一個名字 和/或另外一個目錄)建立的。在常規狀況下,branch存儲在branches目錄下,tag位於tags目錄下,儘管在實踐中爲了知足你的工程你可使 用本身的任何定製。
從Eclipse中,"Team>Branch/Tag"菜單可以使你建立branch和tag(參考圖9)。其中,Browse按鈕提供了一種方便的方法來查看有哪些branch和tag存在於倉庫中。
當你使用"Team>Switch"建立成功一個新的branch或tag時,你能夠很是容易地在branches之間進行切換。不管什麼時候你切換 到一個不一樣的branch(或返回到trunk),Subversion將僅更新文件(它須要保持你的當前工做的副本與目的branch之間的同步)。
圖9.建立一個新的branch或tag
|
(四) 修訂歷史
象大多數SCM系統同樣,Subversion讓你跟蹤你的源碼的變化。"Team>Show in Resource History"菜單選項可以使你查詢這些變化的列表(包括對一個文件,目錄或甚至整個工程的改變)(見圖10)。
記住,在Subversion中,提交是原子性的-一次提交由一組文件變化和一個全局註釋組成。"SVN Resource History"視圖向你顯示每一次提交的一個簡明視圖,包括修改的文件和相關注釋。
圖10.歷史資源
|
4、結論 Subversion是一種強有力的和很是靈活的SCM工具,也是CVS的一個成功的後繼者。結合Subclipse,Subversion能最終在你的Eclipse IDE環境中獲得全面的發揮。