Google Prettify

2015-03-17

我平常如何使用SVN?

身為一個軟體開發者,你一定要知道如何使用SVN。 我稍微介紹一下,我平日如何使用Tortoise SVN…

什麼是SVN

Subversion是一個開放原始碼的版本控管系統,簡稱SVN。 目前由Apache維護。 基本上SVN作者是打算令SVN可以取代CVS(也是另一套版本控管系統),所以在許多地方SVN與CVS是很相像的。 你可以直接在令命列模式下,下指令操作SVN,也有一些現成的GUI(Graphical User Interface,使用者圖形介面)來操作。 比較有名的是 TortoiseSVN(本篇重點);搭配Eclipse Plugin,你可以服用 Subclise。

Tortoise SVN
Subclipse

SVN除了可以當檔案改壞時,將檔案回復到之前的樣子,也可以對相同產品、不同版本間的程式碼,進行管理。

不過如果你只需要進行不同幾器間檔案的同步的話,SVN並不是一個建議的選項。 我會建議使用其他的檔案同步軟體,例如FreeFileSync,或是AllaySync

那麼一天下來,我如何使用SVN?

每天第一件事就是更新

每天早上第一件是就是進行update的動作。 先更新別人的檔案,然後才可以在別人已經修改過後的檔案上再增加自己想要修改的部份;不然merge的動作,其實是很累人的。 如果是小檔,或者別人改的幅度不太大的話就還好,但如果是在5000行中的檔案,加上了200行的程式碼,要找出這200行可就累人了。

搭配lock 機制,檔案大家輪流改

版本控管理論裡,解決沖突的方式有Copy-Modify-MergeLock-Modify-Unlock 2種方式。Copy-Modify-Merge就是先取得檔案來修改,如果有沖突的再進行merge。 Loic-Modify-Unlock 是先鎖定要改的檔案(鎖定後其他人都不能再進行修改),進行修改;等一個人改完這個檔案後,再輪到下一個人改。 原則上我會採用第2種機制,做為團隊共同編輯的解決方案。 基於小團隊, 偶爾會偷雞採用一下第一種機制

使用Lock-Modify-Unlock的 產程如下:

  1. 不論要做什麼修改,都需要進行鎖定的動作。於是第一個要改檔案的人可以先鎖定檔案一個沒有被銷定的檔案來進行修改。
  2. 修改完後,將檔案儲存起來,並解除鎖定,讓檔案可以給下一個人進行更改。於是下一個人就又可以進行更改了。

Harry先Lock了檔案,並將檔案由A改為A`。 Sally等到Hrry unlock後才可以再lock檔案。 圖檔取自SVN 文件

依照產品維運需求,使用branch

我平常的工作,是針對一套已經上線的產品進行維護。 基於這樣的需求,會使用大量的branch。 那麼我是如何設計我工作環境的branch呢?

一開始建立的branch。

一開始,我會有3個branch:masterdeveloperfeaturesMaster是目前已上線的版本,developer 算是beta版,features則是針對每個需求異動所衍生出來的版本集合。 Features底下會有更多的branch,原則上每個branch會對應到一個需求異動。我習慣使用日期編號來當作每個需求異動的版本;當然這並不是一個絕對的作法。另外一種建議是使用有義意的名稱,而首當其衝的第一個問題就是SVN對中文branch名稱的支援程度。

實務上建立的branch


你可能會想知道如何建立Branch。這點Google上已經有不少範例, 有空我也會再多做些補充。

Switch

建立完branch後,會將work區域 switch到該branch,然後進行修改。

修改 & Commit

接下來,就是依照團隊合作的方式,是否採用lock機制,然後按照需求進行檔案的修改,最後將修改的檔案commit回SVN server。

重頭戲:Merge

依照上線的狀況會再將branch的程式碼,merge回develop。 等到上線一陣子,上線也都沒問題了,就將這需求所異動的程式碼再merge 到master。

如何取得異動清單

有時候,我必需針對這一個異動需求,取得相關的異動清單。 不過一個需求異動,可能前前後後改了好幾次,也commit了好幾次。 Tortoise提供了很快速的方法,可以一口氣取得多次commit的異動清單:

  1. 針對work點選右鍵。
  2. 選擇show log
  3. 選擇該需求相關commit的紀錄。
  4. 在log 上點選右鍵,選擇compare revision


由於是使用版本比較的功能,所以必需再多選上一個變動前的版本,這樣才可以進行比較。 比方說我上一個需求,最後一個版本是320;這個需求commit了2個版本(321、323),所以在compare revision時需要選擇包含320這個版本(320、321、323)。

偶爾有需要,使用暫存的儲存庫

由於工作場所的限制,某些協同工作並沒有版本控管的機制。 為了確保在修改檔案的可回復性,所以我會在自己的本機建立一個SVN repository。 建立SVN repository的方法很簡單,使用Totoise SVN,找一個空的資料夾,點右鍵,選擇create repository就可以建立了。

建立完儲存庫後,我會將每個要改動的檔案,移到另一個資料夾,並提交(commit)到儲存庫上去。 這樣我即使改壞,也有一個備份機制。即使多次基於不同的需求,異動相同的檔案,也可以隨時更新回去到上一個版本,或是與更早之前的版本進行比對。

最後

版本控管是我日常工作中很重要的一個工具。 我覺得SVN最大的特色,並不是在update回上一個版本,或是檔案備份,而是程式碼branch間的控管使用lock-unlock,來進行協同工作間的檔案同步。 不過戲法人人會變,巧妙各有不同; 這裡拋磚引玉地提出一些我平常使用的方式。如果大家有其他的用法,也可提出來分享或討論。

延申閱讀

Subversion on windows安裝

沒有留言 :

您或許對這些有興趣

Related Posts with Thumbnails

最後

謝謝您的閱讀,希望您可以有豐富的收獲。