2008年9月4日 星期四

程式設計的版本控制 - SVN

[2009.02.17] 更新
產來在判斷是否有新增資料或是修改資料時,會自動略過*.o的檔案,不過,執行檔就不會了略過

[2009.02.05]更新
google code容量變大了很多,由原來的100mb增至2048mb,單個文件也由20mb增至40mb。好high啊!!

當程式越寫越大時,這個時候就需要一個系統來控制你寫的版本~
尤其是當多個人同時在寫一個系統的時候,這個版本控制就顯得格外的重要~
概念可以參考這裡版本控制系統的基礎觀念

今天也不知道為什麼就想到版本控制的東西,這個應該就是李文雄老師說的蘊釀吧~
不過,應該會對我寫程式有很大的幫助~
所以,今天就先來研究如何使用版本控制的系統吧~

1. 先到Google的Project Hosting註冊吧~
2. 並且依用 Subversion 跟 Google Code 作版本控制 (一)建立一個新的project吧~我這裡的示範project是goodmorn,那當然啦~我的帳號是superporter2001,在這一個網址
http://code.google.com/p/XXX/source/checkout
其中XXX的部分就是專案的名稱,目前這一個例子的專案名稱是goodmorn
可以了解google提供的url
3. 在client端安裝svn client吧

[root@host ~]# apt-get install subversion subversion-tools

4. 第一次把server上的目錄下載下來,google在Source-Checkout有提示指令(這裡要注意的是,它要你輸入的密碼不是你google的密碼,而是要去左上角的Setting裡面有一組密碼哩~)

[root@host ~]# svn checkout https://goodmorn.googlecode.com/svn/trunk/ goodmorn --username superporter2001

5. 這一個時候會在目前的目錄下新增一個檔案goodmorn,然後,我們試著在goodmorn下新增一個檔案testfile.txt,並把它加入準備要上傳的schedule中

[root@host ~]# touch goodmorn/testfile.txt
[root@host ~]# svn add goodmorn/testfile.txt

6. 然後,我們準備上傳我們修改好的檔案

[root@host ~]# svn commit goodmorn

7. 噹噹~進入server後,會出現剛剛修改的檔案哩~
8. 今天再繼續研究其它參數吧~反正,有問題就打以下指令

[root@host ~]# svn help

若要查比較詳細的資料可以打以下指令,例如要查svn add

[root@host ~]# svn help add


如果我現在有9個版本,我要取得第二個的話就打以下指令

[root@host ~]# svn checkout -r 2 https://goodmorn.googlecode.com/svn/trunk/ goodmorn --username superporter2001


svn指令索引

SVN 基本功能:

Import: 將整個 project_directory 的資料 import 進 svn 裡面

  • svn import project_directory http://DOMAIN/svn_project
  • svn import project_directory file:///SVN_PATH/svn_project

Checkout: (checkout 可簡寫成 co), 將資料 checkout 回來

  • svn co http://SVN_PATH/svn_project
  • svn co file:///SVN_PATH/svn_project
  • svn co -r 12 file:///var/lib/svn/dev/projects # 出第12版的 projcets code

List: (list 可簡寫成 ls), 看上面有哪些檔案/資料

  • svn ls http://SVN_PATH/svn_project
  • svn ls file:///SVN_PATH/svn_project

Update: (update 可簡寫成 up), 將目前資訊更新成 SVN 線上最新版本.

  • SVN_CHECKOUT_DIR$ svn up
Commit: (commit 可簡寫成 ci), 將目前所做的修改 commit 回 svn
  • SVN_CHECKOUT_DIR$ svn ci
Status: (status 可簡寫成 st), 看目前檔案/結構 跟 SVN 線上的版本有哪些不同
  • SVN_CHECKOUT_DIR$ svn st
Add: 將此 檔案/目錄 新增進 svn
  • SVN_CHECKOUT_DIR$ svn add filename 或 svn add directory
MV: 改檔名, 並且此檔案之前紀錄還要繼續留下
  • SVN_CHECKOUT_DIR$ svn mv filename new_filename
Revert: 還原這次的修改, 回到前一版的檔案狀態(未 commit 前可用)
  • SVN_CHECKOUT_DIR$ svn revert [file | directory]

SVN 檔案狀態資訊:

  • ?: 此檔案不存在 SVN 裡面
  • A: 此次新增的檔案
  • C: 此檔案已經有人改過, 合併不成功, 需要人工介入
  • D: 此次移除的檔案
  • M: 此檔案有修改過
  • U: 此檔案有被更新過


參考資料:
用 Subversion 跟 Google Code 作版本控制 (一)
用 Subversion 跟 Google Code 作版本控制 (二)
維基百科 - 版本控制
O'Reilly - 版本控制
版本控制系統的基礎觀念
版本控制系統(svn) - client版本
SVN基本指令教學
SVN教學

沒有留言: