您可通過命令行使用 Subversion,但若將其與您的 IDE 集成更為便捷。IntelliJ IDEA 5.0 及后續版本均包含對 Subversion 的內置支持。NetBeans 還不支持 Subversion,但相關工作已經在開展,未來版本中將提供支持。對于 Eclipse,您需要安裝 Subclipse 插件。本文使用 Eclipse 作為 IDE。
Subclipse 的安裝與其他 Eclipse 插件類似:
- 在 Eclipse 中,選擇 Help Software Updates | Find and Install...。
- 在向導的第一個面板中,單擊 Search for new features to install 單選按鈕,并單擊 Next。
- 在向導的第二個面板中,單擊 New Remote Site。輸入
Subclipse
作為名稱,輸入http://subclipse.tigris.org/update_1.0.x
作為 URL。然后單擊 Finish。
這將啟動另外一個小的向導。下一個對話框應為您提供一個可安裝的特性 —— Subclipse。選中它并單擊 Next。 - 接受許可協議,完成安裝。
程序包目前未經過數字簽名,但只要您是按照第三步的 URL 下載的,就是安全的。
![]() |
|
安裝程序包后,您必須重新啟動 Eclipse,隨后才能使用 Subversion。完成之后,您就可以與如今使用 CVS 大體相同的方式使用 Subversion 了,只有為數不多的區別。
設置一個新的 Subversion 存儲庫,特別是網絡存儲庫相對來說較為復雜。但若您正在連接一個現有項目,第一次檢出文件就相當輕松。在 File 菜單中選擇 New/Other...。這些步驟將為您打開如 圖 1 所示的對話框:
圖 1. 通過 Subversion 啟動一個新項目

接下來,打開 SVN 文件夾,選擇 Select Checkout Projects from SVN,并單擊 Next 以顯示如圖 2 所示的對話框:
圖 2. Select/Create Location

第一次從存儲庫檢出時,您需要選擇 Create a new repository location 并單擊 Next。這將為您打開如圖 3 所示的對話框:
圖 3. 為存儲庫鍵入 URL

您在這里提供存儲庫的 URL。這只是一個普通的 http URL,如 http://svn.apache.org/repos/asf/xerces/java/。這一次單擊 Next 時,Eclipse 連接到存儲庫,并查找可檢出的文件夾。通常有三個文件夾:branches、tags 和 trunk,如圖 4 所示。Branches 文件夾用于試驗。Tags 通常標識較老的、已發布的軟件版本。而大多數時候,您都希望在主分支上工作(CVS 稱之為 HEAD),因此選擇 trunk 并單擊 Next。
圖 4. 選擇要檢出的修訂版

您現在有兩個選擇:Check out as a Project configured using the New Project Wizard 或 Check out as a project in the workspace,如圖 5 所示。您可按自己的需要任意選擇,您可能希望為項目命名,因為默認名稱為 “trunk”。最后,單擊 Finish。
圖 5. 檢出項目的兩種方法

Eclipse 現在從您選擇的分支、主干或標記中下載所有源文件。如果您選擇的是 Check out as a project in the workspace,則必須完成 Eclipse 的 New Project 向導,以設置編譯器級別、項目布局和其他選項。如果您未使用 New Project 向導,則需要手動設置構建路徑和其他選項,就像您在自己的文件系統的一個目錄中創建了一個項目那樣。確實,您所做的與那極為相似。所有文件都是本地存儲的。對于構建、運行和調試這樣的普通操作,Eclipse 不關心文件是否已為版本控制檢出。
![]() ![]() |
![]()
|
此時,最好進行一次快速、明智的檢查,確保您已正確地設置了構建路徑。如果沒有明顯的問題,并且能夠運行單元測試,那么即可放心地繼續下去了。
如果存在問題,檢查項目屬性,以確保正確地設置了源路徑和類路徑。使之差一非常常見,無論是多一還是少一。因此,最終 Eclipse 會認為您的類的名稱類似于 src.org.apache.xerces.parsers.SAXParser
或 apache.xerces.parsers.SAXParser
,而不是 org.apache.xerces.parsers.SAXParser
。在多文件夾項目中,Eclilpse 也常常會錯誤地將一個數據文件夾標記為源文件夾或遺漏了一個源文件夾。如果發生了以上任何一種小故障,您都必須修復錯誤,然后才能基礎。
![]() |
|
要檢查錯誤,選擇 Project | Properties,然后找到 Java Build Path。您可在 source 選項卡中修訂任何向導做錯的地方。您可能還要添加另外一個項目需要的 JAR 歸檔,Eclpse 在檢出時不會注意到此歸檔。您還可在 library 選項卡的 Java Build Path 中添加此歸檔。
請做好心理準備,您可能要在這里花上一點時間。Eclipse 很少會在第一次就讓一切正確無誤,每個項目組織其文件和庫的方式又總會有所不同。
接下來您就可以照常編輯文件了。作出您希望的任何更改。運行單元測試。優化代碼。更正注釋中的拼寫錯誤。完成部分工作后,使用上下文菜單并選擇 Team/Commit...。您將看到圖 6 所示的對話框,要求您輸入提交注釋:
圖 6. Subclipse 的提交對話框

同樣,若其他人更改了您希望應用于您的副本的存儲庫,只要在 Package Explorer 中選中文件,并從上下文菜單中選擇 Team/Update 即可。這會以主副本替換您的副本。
![]() ![]() |
![]()
|
如果您已進行了更改,其他開發人員也進行了更改,那么您就必須手動合并文件。對于絕大多數簡單更改,Subversion 可推斷出需要進行怎樣的處理,無需人工干預。但對于較大、較為復雜、存在沖突的更改,您可能需要參與進來,手動合并更改。
Subclipse 在這里可提供一些幫助,但實際上我發現,在一個獨立的窗口或選項卡中直接實現一個臨時文件副本,通過存儲庫更新本地副本以覆蓋我的更改,然后通過臨時副本重新輸入更改,這樣做往往更容易。若存儲庫中的更改與我做出的更改相比較少,我就會從存儲庫實現臨時副本,并通過它進行提交,而不是更新。隨后我會重新應用那些更改。這聽上去非常復雜,但事實通常并非如此,它的發生幾率幾乎與您希望的一樣低。即便是您出了錯,忘記重新應用更改或是錯誤地應用了更改,總是可以找到所有更改的完整歷史(包括您覆蓋的那些更改)供您參考。實際上您從未徹底丟失任何東西。
如果您不確定已更改了哪些文件,同步視圖可以為您顯示這些文件。您還可打開標簽修飾(label decoration)來查看上次提交/更新后哪些文件發生過更改。選擇 Help | Preferences,然后再選擇 General/Appearance/Label Decorations。然后選中 SVN 復選框。(實際上該復選框在默認情況下就是選中的。)
![]() ![]() |
![]()
|
如果您不具備正在使用的存儲庫的提交權限,就需要制作一個修補程序,然后將其發送給維護人員。只要選中您希望比較的文件,然后從上下文菜單中選擇 Team/Create Patch... 即可。您可以隨自己的方便將修補程序保存到文件或剪貼板中。隨后可通過電子郵件將其發送給維護人員,或者在 bug 報告中附上該修補程序。修補程序本身采用的格式與 CVS 所使用的 diff 格式相同。
應用他人發送給您的修補程序就沒那么復雜了,只要選中您想修補的文件或項目。從上下文菜單中選擇 Team/Apply Patch... ,然后平臺上慣用的 open file 對話框選擇修補程序文件即可。
![]() ![]() |
![]()
|
如果您已作出了一些更改,并且希望看看您的副本與存儲庫中的版本有怎樣的差別,只需在上下文菜單中選擇 Compare/Latest From Repository 即可。這實際上與 CVS 中比較功能的工作方式完全相同。圖 7 顯示了比較功能的工作情況:
圖 7. 在 Subclipse 中比較兩個文件

![]() ![]() |
![]()
|
刪除文件也很輕松。只要在 Eclipse 的程序包管理器中刪除文件,然后提交父文件夾即可。刪除目錄要略微復雜一點。您可以選擇一個目錄并刪除它。目錄中的所有文件將會立即被刪除。但在您刪除后,目錄本身及其所有子目錄又會立即出現在原來的位置。要真正地刪除一個文件夾,您需要選中 “已刪除” 的文件夾并提交它。同一規則也適用于將一個文件從一個位置移動到另外一個位置的情況。
![]() |
|
在您刪除了一個文件或一個文件夾之后,依然可以通過存儲庫使其還原,即便是已經提交了刪除。一旦您將任何內容放進存儲庫,那么就永遠不會真正、永久地失去它,這有時候會產生問題。例如,假設您發現有人意外的檢入了其整個主目錄,包括其 Quicken 數據文件和所有來自其愛人的情書歸檔。您很希望能夠徹底消除 這些被誤提交的文件,這樣就不會有其他人得到這些文件。盡管這是一個非同尋常的操作(無論如何,版本控制系統的目的就在于永遠地保留每一個文件的每個修訂版),但有時也是必要的。令人沮喪的是,Subversion 漏掉了這個重要的特性。
由于沒有徹底消除的命令,所以我在為外部可見的存儲庫使用 Subversion 時非常不安。CVS 也沒有這樣的命令,但在 CVS 中,您完全有可能在不毀掉存儲庫的情況下手動刪除錯誤提交的文件。
![]() ![]() |
![]()
|
對于內部存儲庫,Subversion 提供了遠超過 CVS 的改進。如果添加了某種類型的徹底消除功能,它也應同樣適于外部存儲庫。盡管像 Eclipse 這樣的工具對 Subversion 的第三方支持還不像 CVS 支持那樣普遍,但形勢正在迅速地發生變化。Subversion 會成為新項目的默認源代碼存儲庫。尚無源代碼控制的現有項目應盡快檢入 Subversion。而已有 CVS 存儲庫的現有項目可能仍在觀望,希望等到他們所依賴的全部工具均全面支持 Subversion 后再進行切換。但這些項目最終也會移植到 Subversion。Subversion 中的改進如此顯著,令人難以忽略。未來必將屬于 Subversion。
![]() ![]() |
![]()
|
學習
- 您可以參閱本文在 developerWorks 全球站點上的 英文原文 。
- “Sharing code with the Eclipse Platform”(Pawel Leszek,developerWorks,2003 年 3 月):簡要介紹了 Eclipse 平臺處理源代碼版本控制的方式。
- “利用 PHP 和 Subversion 從零開始創建一個 blog”(Tyler Anderson,developerWork,2006 年 2 月):一份介紹使用 PHP 和 Subversion 進行 Web 開發的教程。
- “自動進行團隊構建和單元測試過程”(Mark Wilkinson,developerWorks,2005 年 10 月):創建一個自動化系統,以使用 CVS 和 Subversion(及其他工具)構建并測試您的源代碼。
- “Pragmatic Version Control using Subversion, 2nd Edition”(Mike Mason,Pragmatic Programmers,2006 年 5 月):全面的 Subversion 用法介紹。
-
Version Control with Subversion
(Ben Collins-Sussman,Brian W. Fitzpatrick,C. Michael Pilato;O'Reilly Media)關于 Subversion 的免費在線圖書。
-
Sourceforge:為開放源碼項目提供免費的 Subversion 宿主。
- Java 技術專區:數百篇關于 Java 編程各個方面的文章。
獲得產品和技術
-
Subversion:針對不同平臺的開放源碼及二進制版本。
-
Subclipse:Eclipse Subversion 插件。
-
Teepee:NetBeans Subversion 項目。
-
TMate:IntelliJ IDEA Subversion 插件。
討論
-
developerWorks blogs:加入 developerWorks 社區。