用subversion(SVN)進行版本管理

老是給別人講svn,花時間太多,近來無事,就寫了subversion的版本管理技巧,基本的沒多講,只撿重要的寫了一下,以便一勞永逸,希望有用。

好難編輯,終於搞完了...

版本管理約定

程序員編寫程序的過程中,每個程序都會有很多不同的版本,這就需要程序員很好的管理代碼,在需要的時間可以取出需要的版本,並且每個版本都有一個完整的說明。

我們使用Sub Version(簡稱SVN)作爲版本管理工具。這裏着重介紹SVN作爲跨平臺的多人協作使用方法。在多個程序員管理同一段代碼的過程中,版本的管理顯得尤爲重要,使用SVN可以方便的進行分支、合併,記錄下所有的版本。

SVN基本配置
在開始某項軟件、文檔的開發與撰寫時,首先由配置管理負責人建立SVN倉庫、用戶名及其權限,並通知相關人員SVN倉庫地址、SVN倉庫負責人。

配置強制註釋
SVN倉庫的負責人把工程的tsvn:logminisize設置爲1,以便強制註釋。設置方法:在你的工程文件夾右鍵->屬性中,進入 Subversion標籤,選中tsvn: logminisize,確保複選框recursive選中,然後點擊Set按鈕把它的值設爲1,其意思是指提交的註釋最短長度爲一個字。如圖:



SVN軟件配置

1.忽略文件
在SVN 的[Setting]的[General]中,設置需要忽略的文件以便忽略掉一些臨時的、無用的文件,常被忽略的文件有*.opt *.ncb *.suo *.plg *.pch *.idb *.pdb *.scc *.obj Debug Release *.o *.bin *.out *.ilk *.aps debug release *.clw *.bak。每個程序員可以根據自己的需要進行修改忽略文件,上面只是使用VC++與Tornado編程時常用的一些忽略文件。



2.合併比較工具
在Merge Tool中可以選擇用來合併的工具,強烈推薦用Araxis Merge。在[Setting]->[Diff]中填入"C:/Program Files/Araxis/Araxis Merge v6.5/Merge.exe";在[Setting]->[Merge]的選項中,填入"C:/Program Files/Araxis/Araxis Merge v6.5/Merge.exe" %theirs %mine %merged ;其中"C:/Program Files/Araxis/Araxis Merge v6.5/Merge.exe"是指合併工具的路徑,%theirs %mine %merged分別指..將要合併到主幹的分支,主幹,及合併後的結果。



SVN倉庫目錄結構
SVN倉庫的負責人規劃好倉庫的目錄結構。推薦的目錄結構如下圖所示。

倉庫的一級目錄只有兩個,分別爲code和doc。其中,doc主要用來放置先期的文檔,code主要用來放置工程的代碼,也可以包含後期的文檔。

倉庫的二級目錄只可以是branch與trunk兩個目錄,分別存放主幹與分支。trunk目錄下直接存放工程文件。branch目錄下包括一些子目錄分別對應各個分支。



本地目錄結構
從SVN倉庫中取出代碼時,一定不要把整個倉庫取出來,而應該只取出trunk目錄,或只取出branch下的某個分支目錄(比如上圖中的svn://code/branch/xw_051206)。


合作開發方法

合作開發基本流程
一個項目會有多個人共同合作開發完成。基本流程是:
  • 各開發成員建立自己的分支,並在此分支上開發
  • 各開發成員把分支合併到主幹上並形成較爲穩定
  • 各個成員重新從主幹上建立新的分支,在此分支上開發(即回到第一步)
  • 循環往復,直到工程結束。

下面我用一個例子來說明合作開發的基本流程。
現在xb與lzj兩個開發人員要共同開發一個工程onlytest,其這個工程的主幹的SVN倉庫地址如下圖。
 
分支的建立
xb與lzj分別在onlytest這個工程中建立兩個分支,分別爲xb _051115和lz_051115。

在這裏分支命名要採用[姓名縮寫_6個數的日期_後綴(可選)]的形式,比如xb_051208_1,xb_051212之類的。創建完分支後我們可以看到這個工程的目錄結構如下圖所示:


建完之後, xb和lzj分別在本地取出對應的分支進行開發。

分支的合併
當程序到達一個比較穩定的階段,就需要把分支合併到主幹上,下面講述一下合併的流程。

在本節中繼續使用上一節中所示的工程與SVN倉庫講解。

1.xb與lzj分別修改自己分支上的代碼
現在,主幹上的test_SVN.txt是空文檔。

由xb與lzj修改提交後,兩個分支中test_SVN.txt分別如下兩圖所示:





2.xb將xb_051129分支合併到主幹
xb先把主幹check out到本地。然後在主幹的目錄上右鍵選擇svn->merge,彈出如下窗口:



此對話框的含義是把From指定的分支版本到To指定的分支版本之間的差異合併到主幹上。

在這裏分支選的是xb_051129。版本號的選定方法是點擊From中的Show Log,在Log窗口中按住Ctrl鍵,點擊選擇”made a copy”之上的那個版本,以及最頂上的那個版本,如圖 2.11所示。然後點擊確定回到上圖中的對話框,會自動填寫From與To中的Revision號。
 
然後直接點擊merge進行合併,你也可以通過dry run來看是不是兩者之間有差異。由於沒有其它人修改主幹,所以合併的很順利,下圖是xb_051115與主幹合併後的結果。合併完畢之後,由xb對主幹進行提交。



3.lzj將lzj_051129分支合併到主幹,解決衝突
xb合併完畢之後,lzj要將他的分支合併到主幹上去,方法同上。但是由於xb已經修改過主幹,所以產生了衝突,會彈出一個衝突對話框。雙擊對話框中的產生衝突的文件名,就可以調出工具對此文件進行合併,下圖是我們用merge工具顯示的界面。


  • 首先比較第一個窗口與第二個窗口,把結果修改合併到第二個窗口。
  • 然後確保光標處於第二個窗口時,點擊上圖中紅色圈圈所示的按鈕。這樣會把第二個窗口的內容全部複製到第三個容口。之後保存,退出。
  • 然後在工程目錄上點右鍵,進行SVN->Resolved。這樣會刪除無用的臨時文件。
  • 最後提交所作的修改,並添加詳細的註釋。

其它注意事項
SVN中的標籤
與CVS不同,使用SVN時不用專門爲目錄添加標籤,因爲SVN也對目錄進行版本管理。

我們在提交時寫好註釋(比如重要的版本提交時使用051201之類的日期作爲開頭),就可以通過註釋來查找比較重要的目錄版本號,相當於CVS或VSS中的標籤。

另外,每個工程都會有一個版本說明文件,通過此文件可以查找關鍵版本。

文件的刪除、移動與重命名
你可以重命名、移動或刪除你的文件或文件夾,但請使用SVN進行這些操作,否則之前的版本信息會丟失。

使用SVN刪除、移動與重命名文件夾的方法是在文件/文件夾上點右鍵進行SVN操作,或直接在資源瀏覽器中使用右鍵拖放(會彈出SVN選項)。

文件的刪除、移動與重命名之前,必須保證工作目錄是最新的版本;進行這些操作之後,需要進行提交。

版本的回退
在代碼的編寫過程中,難免會有不盡人意的地方,你也許需要回退到某一個版本,但是在這個過程中可能有一些文件你想保留,也有一些文件你不想保留,這就牽扯到很複雜的版本管理過程,在這裏給大家推薦幾種方法。

1. 若是你編輯了工程,在沒有提交的前提下,你想放棄這些修改,你可以直接選擇revert就可以更新到工程的最新的版本。

2. 若是你想退回到某一個版本,你就可以直接選擇update to reversion如圖,這樣我們就可以把我們的版本回退到你選中的版本去,這種情況下SVN並沒有顯示出有什麼衝突,並且新建立的文件也還在,但是在這種情況下你並不能直接在你回退後的版本上進行編輯,因爲SVN的版本控制還是在最新的主幹上。我們需要 update並解決衝突。

3. 你可以直接選擇revert changes from this revision如圖,這樣的話你可以直接解決衝突並提交。不過這種方法的不足是,你新建的文件都沒有了,整個工程都回退到之前的版本了。

4. 我推薦的一種方法是,直接export一個你需要的版本,然後用你export的版本覆蓋你的最新的版本,這樣你就可以不丟失你新建的文件,同時獲得head的SVN控制文件。




提交的時機
每個工程會有很多個小模塊,當某個模塊達到穩定的時候,你就需要提交一次,以免寫下個模塊代碼的時候出現不可恢復的錯誤。

每一次提交需要前,需要通過pclint檢查,保證是一個編譯沒有錯誤的版本。當提交比較穩定的版本的時候,同時要修改你的版本號。

提交的時候要添加註釋,若多人共同修改同一段代碼我們就需要爲註釋添加上更加詳細的說明

版本說明文件
版本說明文件爲xml表格,可用excel編輯,它會記錄下關鍵的版本信息。

版本說明文件內容如下表。發佈版本是指用戶對外公佈的版本號,後文中有詳細描述;Revision是SVN內部的工程文件夾的版本號。一個發佈版本可能對應多個Revision:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章