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

前幾天聽到一個同學在趕 project ,結果他 code 修得亂七八糟,然後改到後來發現想要把 code 恢復成曾經寫過的某個版本,但有的地方是忘記怎麼寫,有的地方則是改起來十分麻煩等等,我想如果他有做好版本控制的話,也許就不會這麼囧了...

有鑑於此,我教了幾個朋友簡單使用 subversion 來作版本控制,也許你會問我為什麼不教 CVSVisual Source Safe 等等,很簡單,「因為我只會 subversion !」當然我本身會的也沒有很多,所以只能稍微簡介一下而已 :p

簡單來說,一般版本控制軟體的架構大致是會有一個貯藏庫(Repository,而不是 database),它用來儲存你每次對整個 project 增加、修改及刪除等等動作,每當你將 project 修改至某一個程度(你可以說是某個版本),就可以利用版本控制軟體把你修改的動作送交(commit)到貯藏庫,把這次的修改定為一次修訂版(revision)。正因為這個貯藏庫記錄了每一次修訂版,所以當你想要從貯藏庫取回(checkout)project 時,可以指定任何一次修訂版本,版本控制軟體會幫你處理好從最初版開始的一切動作,當然,如果你本來就存有 project 的 code ,也可以用版本控制軟體作更新(update)的動作來將你所存的 project 更新到最新的修訂版本。

上述的簡介大致提到了在用版本控制軟體時的基本操作,而我這篇文章主要是要介紹 subversion 這個版本控制系統,關於這個系統我就不多作介紹了,我只會提及在各個平臺要怎麼把上面的動作作出來而已。既然作版本控制需要一個 repository ,這裡介紹兩個在網路上可以找到的 subversion 服務:OpenSVNGoogle Code 上的 Project Hosting 。這兩個網站你都可以隨意(似乎是如此)建立新的 repository 放你的 project (惟 Google Code 一個 project 的 repository 限制磁碟空間最多只能使用 100 MB),之後的例子會以 Google Code 的 Project Hosting 當作例子示範。

Google Code Project Hosting

在 Google Code 的左側導覽列中點選 Project Hosting 便會來到上面的網頁,這時再點選 Create a new project 就可以填入你 project 的相關資料,這樣 Google Code 就幫你產生了一個 repository 了。設定好之後你只要先知道你 repository 的位址(到你 Project 首頁的 Sources 裡去看,會是 https://<你project名稱>.googlecode.com/svn/)就可以了,同時你也要知道你在 Google Code 的密碼,到右上角的 My Profile -> Settings 裡就會有 Google Code 產生的密碼,這個也要記住,因為當你在 commit 的時候會需要用到。

Source URL

版本控制總需要一個 client-side 的軟體,在 Unix 系的環境裡你安裝好 subversion 相關套件後,就可以在終端機下使用 svn 這個指令來作版本控制,而在 Windows 上,你可以使用一個有圖形化介面的 subversion 軟體:TortoiseSVN,安裝這個軟體後,它就會在你檔案總管的右鍵選單中加入 subversion 的相關指令,相當方便易用。

SVN Checkout安裝好 TortoiseSVN 之後,你可以選擇你要存放 project 的位址,然後在該處按右鍵選 SVN Checkout...,再填入你 project repository 的網址及要儲存的資料夾,輸入完帳號及密碼後, repository 上的檔案就會下載下來了。注意你 repository 下會事先建立好三個目錄:branchtrunktags,如果你還不是很熟悉版本控制的話,就先把你的 code 放在 trunk 目錄下就好了,所以在 checkout 的時候網址應該輸入:https://<你project名稱>.googlecode.com/svn/trunk/,然後本地端再輸入你 project 的名稱就好,這樣一來你就有一份本地端的 repository 了。

SVN Checkout...

SVN Commit... 接著,你就可以在這個目錄下放你 project 的資料了,當你決定要 commit 到伺服器上的 repository 時,只要在 project 的目前上按右鍵,選擇 SVN Commit...,這時就會跳出一個對話盒問你要加入或修改哪些檔案,然後也可以讓你填入 log 好記錄這次的修訂版本做了什麼修改,方便日後你要取出某個修定版本時作參考。

如果你在不同的地方都有放一份 repository ,那你每次要修改 project 內容時,都應該先利用 SVN Update 的功能,讓你把 repository 更新到最新的狀態(當然,你也可以選擇要更新到第幾次修訂版 TortoiseSVN -> Update to revision...),這樣當你在作 commit 動作時,才不會出現有不同步的狀況,因而發生 conflict ,那就要再仔細檢查應該如何修改 code 消除 conflict 了。

(待續...)

  • ㄟ…這有一個重點不要忘了說…
    就是不要把密碼上傳到Google Code內,
    整組程式碼都放上去,包含那個有寫密碼的設定檔也上去的話…
    後果不堪設想ㄛ

  • 有人會把密碼也上傳上去嗎? XD
    這樣就太天了~

  • doomleika

    好像有人稱Visual Source Safe為Visual Source Destruction…..
    http://www.highprogrammer.com/alan/windev/sourcesafe.html

  • 哈!這個有趣。

  • 呵呵呵…多了ㄛ
    隨便找就一堆了
    你看我在Google Code Search用 pwd= 做關鍵字搜尋…
    http://www.google.com/codesearch?hl=en&lr=&q=pwd%3D&btnG=Search

  • 30km

    我點了MyProfile,結果去到http://code.google.com/u/我的賬號/,然後說該url不存在,請問是怎麽囘事呢?

  • 30km: 會不會是還沒開啟帳號呀..XD

  • 要怎麽開啓呢?我已經用的是gmail的帳號哦。

  • 30km: 咦?你有 create 一個 project 了嗎?因為我沒有碰過你的問題耶 @@
    如果你已經 create a new project ,而還是沒有東西的話,建議你寫信到 google 的客服中心(用中文也沒關係 :P)

  • 我沒有創建自己的project,但我想下代碼:
    http://code.google.com/p/ticpp/source

    這裡說可以checkout anonymously的,但公司proxy不支持非標準HTTP命令,用https連上去的話就提示要帳號密碼,難道我還要先建個project得到帳號密碼??

    我也有試過update,但整個目錄skip掉了-_-
    Skipped ‘https:\ticpp.googlecode.comsvntrunk’

    到底要怎麽做才是正確?

  • 30km: 如果你只是要 co 別人 project 的話,用 HTTP 就可以了!這樣不需要帳號及密碼驗證。

  • 唔,因爲公司proxy不支持非標準HTTP method,所以只能用https哦~ HTTPS只用到CONNECT。
    既然要支持HTTP的話,爲何不完全做成tunnel?還要用非標準的method……

  • Pingback: iccyx » Blog Archive » Google Code SVN使用初探()

  • Rusalka

    Ericsk前輩謝啦~
    您這篇介紹引導效果不錯,
    由您此篇另外搜尋到這篇↓
    Subversion 最佳實務:http://blog.yam.com/keithmin/article/8360958
    是由 Keithmin 前輩翻譯的,感覺也蠻有幫助的^_^
    總之,謝啦~

  • 謝謝這位國二的長輩的教學文 :p

  • 谢谢你提供的资料。

  • Great thx

  • nio

    請問一下,如果我想要把已在控版的版本,直接發佈放到download裡面供人下載,可以嗎??

  • @nio,
    當然可以囉,這點並沒有限制

  • 谢谢.
    🙂

  • arc

    看了很多google code的說明,但是關於create project 都只是『點選 Create a new project ,填入 project 的相關資料』就可以了。

    呃…有這麼難嗎?為什麼我都搞不懂。

    ok,說明一下我的狀況。

    點選create new project 後,的確進入了填寫的畫面。

    然後會有要填寫Project name、summary、選擇Version control system……等表單內容。

    最下面有一個create project的方形,那個應該是按鈕吧?可是我的那個按鈕怎
    麼樣都沒辦法動作。

    是有什麼表單內容一定要填寫我沒填?還是怎麼了?

    實在是弄不清楚耶

  • Pingback: Use subversion and Google code « Wireless80211's Blog()

  • Yourmau

    想請問!如果我使用svn checkout後我的folder裡面都是空的
    這是怎麼一回事呢?
    我要怎麼修復它?