0 基本概念了解
0.1 SVN的工作原理:采取客戶端/服務器模式——在服務器的版本庫中保存項目文件的各個版本,所有參與協同開發的程序員在自己本地電腦上保存一個工作副本。SVN支持程序員將本地副本更新到服務器端的最新版本,也支持將本地副本的最新改變更新到服務器端,而且后面的更新不會覆蓋前面的更新,而是作為一個新的版本被保存下來——SVN甚至支持將本地工作副本恢復為服務器端保存的某一個歷史版本。
0.2 SVN基本操作
①檢出(checkout):將一個服務器端創建好的項目整個下載到本地,這是到項目組后參與開發的第一步,只需執行一次。
②更新(update):將本地文件更新為服務器端的最新版本,通常為每天上班時或修改公共文件之前執行一次。
③提交(commit):將本地修改提交到服務器端。通常每天下班前或每實現一個功能、完成一個模塊時執行一次。
1 Eclipse中svn的使用
1.1 Eclipse插件應用市場
在Eclipse中訪問Eclipse Marketplace Client可以搜索Subversion,下載插件,按提示安裝即可。
1.2 使用壓縮包(推薦)
如果不能聯網可以使用下載好的插件壓縮包eclipse_svn_site-xxx.zip,這個壓縮包是從http://subclipse.tigris.org/網站(subclipse是這款Eclipse插件的名稱)上下載的。安裝方法是:
①解壓eclipse_svn_site-xxx.zip中的features和plugins這兩個目錄
②將features和plugins復制到Eclipse安裝目錄/dropins/svn下

③重啟Eclipse
④進入Eclipse依次打開Window→Preferences→Team→SVN,看到如下界面即說明SVN插件安裝成功

1.3 創建資源庫位置
①切換到透視圖SVN資源庫研究
②創建資源庫位置


此時可以查看版本庫中的文件及目錄結構

1.4 檢出
①檢出分兩種情況
<1>從服務器端獲取到的是一些零散的文件,不能作為項目檢出

此時會彈出一個新建項目向導,之所以會這樣是因為我們需要創建一個項目來保存從服務器端取回的文件

<2>從服務器端獲取到的是一個完整的項目,例如

此時必須作為項目檢出


項目從服務器檢出后,會成為一個工作副本,根目錄下會自動創建.svn隱藏目錄
1.5 提交
①新創建文件后,文件圖標上會以“?”標識,表示該文件尚未納入版本控制
②在新創建的文件上點右鍵→Team→添加至版本控制,這樣文件圖標上會顯示“+”,表示當前文件已納入版本控制,但還未提交至服務器。
③在要提交的文件上點右鍵→Team→提交...會提交文件,在彈出的對話框中可以不填寫日志。文件提交后,圖標會變為“金色的圓柱體”表示當前文件的版本和服務器端一致。
④文件修改后圖標會變為“*”,表示當前文件或目錄包含未提交的修改。
1.6 更新
①更新整個項目時可以在項目上點右鍵→Team→更新
②更新某個具體的文件時,可以在文件上點右鍵→Team→更新
1.7 共享項目
①在Eclipse中創建的新項目想要發布到SVN服務器端,可以通過“共享”項目實現
②在項目上點右鍵→Team→Share Project...→選擇一種版本控制工具

選擇一個資源庫位置


切換到Team Synchronizing透視圖,選擇項目中要提交的內容,通常是項目中的全部內容

1.8 回復歷史版本
①在需要回復的文件上點右鍵→Team→顯示資源歷史記錄→得到如下界面

②選擇某一個歷史記錄點右鍵→獲取內容。文件就會恢復到指定版本的狀態,同時圖標變為“*”。
③獲取歷史記錄時,如果出現如下錯誤提示

可以通過將對應版本庫中的svnserve.conf文件中的anon-access設置為none解決。
1.9 解決沖突
①什么情況下會發生沖突

<1>兩個開發人員,Harry和Sally,分別從服務器端下載了文件A。
<2>Harry修改之后,A變成了A’,Sally修改之后,A變成了A’’。
<3>Harry先一步提交,使服務器端文件的版本也變成了A’
<4>Sally本地的文件A’’已經過時了,此時她已無法提交文件,服務器會要求她先進行一次更新操作。
<5>此時Sally的更新操作有兩種可能
(1)Sally所做的修改與Harry不是同一個位置,更新操作嘗試合並文件成功。
(2)Sally所做的修改與Harry恰好是同一個位置,更新操作嘗試合並文件失敗,發生沖突。
<6>發生沖突后,本地工作副本會發生如下變化
(1)文件A中的內容發生如下改變

其中,從<<<<<<< .mine到=======之間是發生沖突時本地副本的內容。從=======到>>>>>>> .r14是發生沖突時服務器端的最新內容。注意這里r后面的數字是發生沖突時服務器端的版本號,有可能是任何整數值,r14只是一個例子。
同時文件圖標變成一個“黃色的!”。
(2)與沖突文件同目錄下新增文件,擴展名為.mine,其內容是發生沖突時本地副本的文件內容。
(3)與沖突文件同目錄下新增文件,擴展名為.r小版本號,例如MyCRM.java.r13,其內容是沖突發生之前,服務器端的文件內容,可以作為解決沖突的參照。
(4)與沖突文件同目錄下新增文件,擴展名為.r大版本號,例如MyCRM.java.r14,其內容是沖突發生時,服務器端的文件內容。
②解決沖突
(1)在沖突文件上點右鍵→Team→編輯沖突...→出現如下界面

以對比的方式將本地內容與沖突內容顯示出來,其中左側為本地內容,右側為沖突內容。其中本地內容是可以修改的。
(2)根據需要和實際情況將本地內容更正——這個過程很可能需要牽涉沖突的兩位開發人員進行必要的溝通——機器與程序目前還不能完全取代人工智能。更正后文件圖標會變成一個“四角形”,同時沖突文件內的<<<<<<< .mine、=======以及>>>>>>> .r14等標記都會被去掉。
(3)在沖突文件上點右鍵→Team→標記為解決

此時.mine文件和.r版本號文件都會被自動刪除,沖突文件的圖標變為“*”,表示可以提交。
(4)提交文件,文件圖標變為“金色圓柱體”。
