前幾天聽到一個同學在趕 project ,結果他 code 修得亂七八糟,然後改到後來發現想要把 code 恢復成曾經寫過的某個版本,但有的地方是忘記怎麼寫,有的地方則是改起來十分麻煩等等,我想如果他有做好版本控制的話,也許就不會這麼囧了…
有鑑於此,我教了幾個朋友簡單使用 subversion 來作版本控制,也許你會問我為什麼不教 CVS 或 Visual Source Safe 等等,很簡單,「因為我只會 subversion !」當然我本身會的也沒有很多,所以只能稍微簡介一下而已 :p
簡單來說,一般版本控制軟體的架構大致是會有一個貯藏庫(Repository,而不是 database),它用來儲存你每次對整個 project 增加、修改及刪除等等動作,每當你將 project 修改至某一個程度(你可以說是某個版本),就可以利用版本控制軟體把你修改的動作送交(commit)到貯藏庫,把這次的修改定為一次修訂版(revision)。正因為這個貯藏庫記錄了每一次修訂版,所以當你想要從貯藏庫取回(checkout)project 時,可以指定任何一次修訂版本,版本控制軟體會幫你處理好從最初版開始的一切動作,當然,如果你本來就存有 project 的 code ,也可以用版本控制軟體作更新(update)的動作來將你所存的 project 更新到最新的修訂版本。
上述的簡介大致提到了在用版本控制軟體時的基本操作,而我這篇文章主要是要介紹 subversion 這個版本控制系統,關於這個系統我就不多作介紹了,我只會提及在各個平臺要怎麼把上面的動作作出來而已。既然作版本控制需要一個 repository ,這裡介紹兩個在網路上可以找到的 subversion 服務:OpenSVN 及 Google Code 上的 Project Hosting 。這兩個網站你都可以隨意(似乎是如此)建立新的 repository 放你的 project (惟 Google Code 一個 project 的 repository 限制磁碟空間最多只能使用 100 MB),之後的例子會以 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 的時候會需要用到。
版本控制總需要一個 client-side 的軟體,在 Unix 系的環境裡你安裝好 subversion 相關套件後,就可以在終端機下使用 svn 這個指令來作版本控制,而在 Windows 上,你可以使用一個有圖形化介面的 subversion 軟體:TortoiseSVN,安裝這個軟體後,它就會在你檔案總管的右鍵選單中加入 subversion 的相關指令,相當方便易用。
安裝好 TortoiseSVN 之後,你可以選擇你要存放 project 的位址,然後在該處按右鍵選 SVN Checkout…,再填入你 project repository 的網址及要儲存的資料夾,輸入完帳號及密碼後, repository 上的檔案就會下載下來了。注意你 repository 下會事先建立好三個目錄:branch、trunk及tags,如果你還不是很熟悉版本控制的話,就先把你的 code 放在 trunk 目錄下就好了,所以在 checkout 的時候網址應該輸入:https://<你project名稱>.googlecode.com/svn/trunk/,然後本地端再輸入你 project 的名稱就好,這樣一來你就有一份本地端的 repository 了。
接著,你就可以在這個目錄下放你 project 的資料了,當你決定要 commit 到伺服器上的 repository 時,只要在 project 的目前上按右鍵,選擇 SVN Commit...,這時就會跳出一個對話盒問你要加入或修改哪些檔案,然後也可以讓你填入 log 好記錄這次的修訂版本做了什麼修改,方便日後你要取出某個修定版本時作參考。
如果你在不同的地方都有放一份 repository ,那你每次要修改 project 內容時,都應該先利用 SVN Update 的功能,讓你把 repository 更新到最新的狀態(當然,你也可以選擇要更新到第幾次修訂版 TortoiseSVN -> Update to revision...),這樣當你在作 commit 動作時,才不會出現有不同步的狀況,因而發生 conflict ,那就要再仔細檢查應該如何修改 code 消除 conflict 了。
(待續…)




ㄟ…這有一個重點不要忘了說…
就是不要把密碼上傳到Google Code內,
整組程式碼都放上去,包含那個有寫密碼的設定檔也上去的話…
後果不堪設想ㄛ
有人會把密碼也上傳上去嗎? XD
這樣就太天了~
好像有人稱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
我點了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.com\svn\trunk’
到底要怎麽做才是正確?
30km: 如果你只是要 co 別人 project 的話,用 HTTP 就可以了!這樣不需要帳號及密碼驗證。
唔,因爲公司proxy不支持非標準HTTP method,所以只能用https哦~ HTTPS只用到CONNECT。
既然要支持HTTP的話,爲何不完全做成tunnel?還要用非標準的method……
Ericsk前輩謝啦~
您這篇介紹引導效果不錯,
由您此篇另外搜尋到這篇↓
Subversion 最佳實務:http://blog.yam.com/keithmin/article/8360958
是由 Keithmin 前輩翻譯的,感覺也蠻有幫助的^_^
總之,謝啦~
謝謝這位國二的長輩的教學文 :p
谢谢你提供的资料。
Great thx
請問一下,如果我想要把已在控版的版本,直接發佈放到download裡面供人下載,可以嗎??
@nio,
當然可以囉,這點並沒有限制