用 Subversion 跟 Google Code 作版本控制 (二)

如果 project 已經發展到某個成熟的版本,但想要開設一個 branch 來加入新功能的時候要怎麼做呢?或者是新的 branch 要與原先成熟的版本整合(merge)的時候又該如何?

假設我現在有一個 project 發展到 revision X ,我認為這個版本已經成熟到一定的程度,而暫時不加新的 features 時,也許我會想要複製一份這個 project 然後來加新功能,這樣的動作就是為你的 project 建立了一個 branch ,如此一來我一樣可以利用版本控制軟體來管理新的 branch ,也可以同樣管理原來的版本。

SVN: Create a branch 回想一下你在 Google Code Hosting 上的 repository ,它不是預先建立了三個目錄?其中一個就是 branches ,如果你要為你的 project 建立一個 branch ,就可以利用 TortoiseSVN -> Branch/Tag...來作,如果你沒有打算使用別的名稱,那在 To URL: 的欄位可以填入 https://<你project的名稱>.googlecode.com/svn/branches/branch-001 ,然後再選擇你要從哪一份 code 來建立 branch 以及寫上 log。而別忘了,當你作好 branch 之後,別忘了在本地端用另一個目錄 checkout project 的 branch 回來,這樣在 commit 的時候才不會搞錯。

SVN: Merge... 而當你的 branch 如果也發展到某一個成熟穩定的版本,想與先前的穩定版本(放在 trunk 裡的)作一個 merge 動作時,可以在 trunk 的 working copy 上使用 TortoiseSVN -> Merge... 來操作,它會問你要哪兩份 branch (或 trunk)要作 merge,當然也可以指定要跟第幾個 revision 來作 merge ,如果你害怕在作 merge 時會有無法預期的錯誤發生,那可以先利用 Diff 來看兩個版本的差別,或是試跑(Dry run)看看有沒有錯誤產生。一旦決定好了,按下 merge 就會把 From: merge 到 To: 了。

在預先建好的三個目錄裡,branches 和 trunk 都提過了,其實 tags 也算是一個 branch ,只是這個目錄主要是讓你放入「特殊的 branch」,比方說 release1.0 之類的名稱,如果有人想要 checkout 你的 project ,當然利用 tags 下就可以快速找到他想要的版本(因為別人不可能知道你 trunk 或 branches 的每個 revision 作了什麼事),所以 TortoiseSVN 才把 branch 跟 tag 的指令放在一起。

如果是在 Linux 或 Mac 下,在安裝該平臺上的 subversion 之後,就可以在終端機下使用 svn 指令來操作 subversion,像這樣:

svn checkout
svn commit
svn update 等等

其它的概念就跟在 Windows 上使用 TortoiseSVN 一樣囉。

一些用 subversion 的基本操作大致上就是這樣,希望這樣簡單的介紹可以讓大家熟悉如何用版本控制軟體管理自己 project ,以免悲劇再度發生 :p

參考書籍:Version Control with Subversion, O'Reilly

  • machette

    merge不是從from到to, 是把from到to的改變merge回working copy

  • [quote comment=””]merge不是從from到to, 是把from到to的改變merge回working copy[/quote]
    感謝 machette, 受教了!

  • You write very well.

  • ddy

    我也覺得很好.比我之前看到的幾篇文章都好.
    臺灣的發展就需要你們這樣的年輕人才啊.

  • 多谢,正在迷惑中。

  • 不知道用 svn 命令行的方式如何操作,直接cp,然后 svn ci 就可以了吗?

  • Pingback: 在Windows下用TortoiseSVN管理Google Code上的项目 « 呀~()