SVN基本指令

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 等的檔案刪除

    遇到衝突的時候,以下是解決辦法。

    A.(p) postone 延遲解決
    B.(df) diff-full 顯示所有衝突的內容
    C.(e) edit 啓動編輯器解決衝突
    D.(r) resolve 標識衝突已經解決
    E.(mf) mine-full 用我的版本覆蓋他人的修改
    F.(tf) theirs-full 用他人的版本覆蓋我的修改
    G.(l) lanuch 啓動其他工具來解決衝突
    H.(h) help 啓動幫助信息

      雖然SVN提供了比較差異和解決衝突的方法,但避免衝突的最好方法永遠只有一個:明確的分工和良好的溝通,儘量避免多個人同時修改同一份文件。如果不能避免,那麼最好指定一個人在提交前負責合併各人的更新,然後一次性提交。


•    找版本間有什麼不同 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
1.    Propset (propset, pset, ps): 版本控制都有些特殊 Keyword 設定, 如 Id 就是最常用的, 設定方法如下:
2.    在檔案內找地方加入 $Id$
3.    設定此檔案要能吃 Id 的 Keyword: svn ps svn:keywords 'Id' filename (只需設一次即可, 之後就不用再設)
4.    svn ci 後, $Id$ 會自動代換成 $Id:filename 編號 年月日時分秒 username $ 的信息
svn help ps 可以看到有哪些 Keyword 可以用, 即 Keyword 的說明.(ex: URL, Author, Date, Rev, Id 等.)
•    其它 SVN Client:
•    Windows Client: TortoiseSVN
SVK: The SVK version control system
•    SVK 相關介紹:
•    svk 分散式版本控制之道
•    使用 svk 建立開發分支
Version Control with SVK
•    其它相關網頁
•    Subversion 版本控制系統的基礎觀念 - 此篇有講版本系統該如何使用 等等的基本觀念, 建議閱讀.
•    Subversion post-commit 的解說以及注意事項
post-commit 如果沒有這行會無法自動 post-commit - post-commit 前, 建議先跑 export LANG=zh_TW.UTF-8(看系統語系編碼設定)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章