2009年11月17日 星期二

SVN


SVN 的基本指令介紹, 主要參考自下述:
主要 SubTrain 的 PPT 前面頁數看一看, 基礎就大概都知道了, 後面頁數太進階了, 目前用不到, 以後再看. XD
PS: 如果不知道 SVN 是什麼, 可見此文: 淺談版本控制系統, 裡面連結檔案看完, 應該就很清楚了 :)
先來看 SVN Trunk/Tags/Branches 目錄 的 架構 和 用途:(英文說明轉載自 SubTrain PPT)
  • trunk: Main line of development(主幹, 主要開發都由在 trunk)
  • tags: Releases (想要 Release 的時後, 就標個 Tag, 以後可以依 Tag 來找回之前版本的資料)
  • branches: Preparation of release, bug fixing(分支, 可以將某些功能切出來, 或者 bug fix 等切成分支, 等做完後再用 Merge 合併回來)
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: 此檔案有被更新過
再來是比較進階一點點, 下述範例轉載自 SubTrain 的教學 PPT:
建立一個 branch
  • svn copy http://svnserver/calc/trunk http://svnserver/calc/branches/my-calc-branch -m 'create a branch' 
建立 Release Tags:
  • svn copy http://svnserver/calc/trunk http://svnserver/calc/tags/Release-1.0.0 -m 'create Release tags for Release 1.0.0'
合併兩個版本的檔案 # 參考自: 用 Subversion 的 Merge 來 Undo
  • svn merge -r REV1:REV2 {path/to/workingcopy}
  •  (UNDO) svn merge -r 1234:1233 ...
  •  (MERGE)svn merge -r 1233:1234 ...
  • svn merge --dry-run -r 343:344 http://svn.example.com/repos/calc/trunk
有 "C" 狀態處理完後, 用 resolved  將自動產生的檔案刪除, 才能正常 commit:
  • svn resolved filename # 這樣子下就會把自動產生 diff 等的檔案刪除
找版本間有什麼不同 diff:
  • svn diff # 自動以現在檔案跟 SVN 內最新版做 diff
  • svn diff -r9237:9238
Info: 列出現在路徑, 版本編號, 最後一次修改日期 ... 等資訊
  • svn info
Log: 如果沒輸入參數, 預設會把所有 commit log 都列出來
  • svn log
  • svn log -l 10 # 顯示 10 筆(最新 10筆 Log)
  • svn log -c 100 # 顯示 revision 100 的 Log
  • svn log -v -c 100 # 顯示  revision 100 的詳細 Log
Propset (propset, pset, ps): 版本控制都有些特殊 Keyword 設定, 如 Id 就是最常用的, 設定方法如下:
  1. 在檔案內找地方加入 $Id$
  2. 設定此檔案要能吃 Id 的 Keyword: svn ps svn:keywords 'Id' filename (只需設一次即可, 之後就不用再設)
  3. svn ci 後, $Id$ 會自動代換成 $Id:filename 編號 年月日時分秒 username $ 的資訊
  4. svn help ps 可以看到有哪些 Keyword 可以用, 即 Keyword 的說明.(ex: URL, Author, Date, Rev, Id 等.)
其它 SVN Client:
SVK 相關介紹:其它相關網頁

OpenGL 相關

為何使用 OpenGL
   OpenGL的架構非常簡單明確,很容易讓初學者接受,它除了具有強大的繪圖功能之外,最讓人稱道的就是與硬體無關的開放架構,讓它能在許多圖形介面平台上執行,除了微軟的Windows之外,還有Linux、FreeBSD、OS/2、Macintosh OS及BeOS等作業系統,如果你要將開發的程式轉移到其它作業系統,只要重新編譯便可以執行。
  DirectX的相容性很差,就以DirectX 8.0與DirectX 9.0而言就有很大的差異(連DirectX 9.0 b與9.0 c的函式使用上都有些不同),對於初學者而言,學完DirectX 8.0如果要使用DirectX 9.0可能要重新再學習。我建議3D的初學者能先以OpenGL著手,能瞭解3D背後所使用的數學原理,以後若有需要使用DirectX,我相信你也能得心應手。


OpenGL 函式介紹
  微軟在Windows NT 3.51及Windows95 OEM Services Release2開始支持OpenGL,Windows下主要分為兩種OpenGL的實作版本,分別為硬體及純軟體實作版本。硬體實作版本會透過ICD(Installable-Client Driver,它是硬體驅動程式的介面)來 辨別是否可以透過硬體處理(OpenGL應用程式會連結opengl32.dll,當應用程式呼叫OpenGL函式,便會把工作交給ICD處理),如果沒 有則透過CPU進行運算。純軟體的版本是使用SGI所提供的靜態函式庫,所有的運算都是透過CPU來達成。純軟體的版本SGI在1999年宣佈停止支援, 因為純軟體的版本方便初學者學習時使用(不用考慮硬體設備)所以目前還是有人在使用。

  OpenGL應用程式的架構如下圖。以Windows應用程式為例(圖a),GL在應用程式裡負責3D繪圖的運算,使用者介面、螢幕顯示或視窗管理都必須 由Windows作業系統負責。為了讓Windows與OpenGL能相互配合,Windows提供WGL將OpenGL與本身使用者介面及視窗管理串連 起來。其它的作業系統也有相類似的函式,像Linux提供GLX負責這項工作。
GDI(Graphical Device Interface)Xlib分別為Windows與Linux實際負責圖形輸出入的介面,一般使用OpenGL做為繪圖介面,就不需要使用GDI或Xlib。除非有特殊需要才會使用它,因為使用GDI開發的應用程式只能在Windows下執行,失去跨平台的特性。


   GLU(OpenGL utility library)為 OpenGL的工具函式庫,GLU函式庫是利用OpenGL函式完成的,主要的功能是在處理特殊矩陣運算、曲線和曲面功能,有效使用GLU可更快速達成想要的功能。
除了GL與GLU這兩個函式庫外,還有一個
GLUT(OpenGL utility toolkit)是負責作業系統相關的輔助函式庫,讓初學者不必費心處理作業系統的控制,便可以練習OpenGL程式。



   OpenGL 函式命名的方法都會遵守特定的規則,你可以由函式的名稱得知它是屬於那一個函式庫,以及使用的參數形態和數量,譬如glVertex3fv()函式,字首 gl表示屬於GL函式庫,Vertex表示函式的功能,而3是指有三個參數,f說明資料型態為浮點數,資料型態的視別字請參見下面。最後的v字表示參數以 陣列的方式傳入,如果沒有v這個視別字,參數則以單一變數的方式傳入。


(轉至janusbooks.myweb.hinet.net