Subversion(SVN)
YehYeh\'s Notepad yehyeh@gmail.com 

Subversion(SVN) - 檔案庫

檔案庫(Repository)

  • 檔案庫(Repository)
    • 集中儲存資料的地方
    • 以目錄和檔案的結構儲存
    • 位在Server上
    • Server和Client可以是同一台電腦
    Subversion(SVN)檔案庫
  • 檔案庫存取的URL
    Schema 說明
    file:/// 直接存取檔案庫(檔案庫位於本地端硬碟上)
    $ svn checkout file://localhost/path/to/repos
    $ svn checkout file:///path/to/repos --省略localhost/
    C:\> svn checkout file:///X:/path/to/repos
    C:\> svn checkout "file:///X|/path/to/repos"
    http:// 經WebDAV通訊協定, 連接到已知的SVN的Apache伺服器
    https:// 與 http://相同,但是有SSL加密
    svn:// 經自訂通訊協定的未授權TCP/IP連線,連接到svnserve伺服器
    svn+ssh:// 經自訂通訊協定的已認證加密TCP/IP連線,連接到svnserve伺服器
  • 那些檔案應該放到檔案庫?
    • 應該放到檔案庫
      • 程式、組態檔、makefile、測試資料
      • 專案相關文件、會議記錄、FAQ、....
    • 不應該放到檔案庫
      • 衍生的檔案
        • 如.o、.obj、可以用工具快速產生的檔案
      • 理由:
        1. 隨時可以產生
        2. 不是建置軟體的必要因素
        3. 重複的資訊、容易造成檔案不一致
Δ 回到最上方

檔案庫的建議架構

  • 檔案庫的建議架構
    Subversion(SVN)檔案庫結構
  • 主線(trunk)
    • 存放專案主要開發版本
    • 程式主要功能的維護與開發
  • 標籤(tags)
    • 存放專案的重要版本、里程碑
    • 正式版V1, XX功能完成版, 正式版V2
  • 分支(branches)
    • 存放進行測試、除錯、開發中的版本、修正版
    • 修正版, 開發中的新功能
  • Trunk、Tags、Branches的修訂版本號碼是共用的
Δ 回到最上方

分支(Branch)

  • 分支的功用
    • 多人同時開發:各自開發一個分支,再整合回主線
    • 多團隊開發:各自開發一個分支,再整合回主線
    • 新功能開發:以新分支開發,避免影響主線
    • 新版本開發:以新分支開發,避免影響主線
    • 修正版:產品有Bug時,先在分支上開發暫時修正版,主線上開發完整解法
  • 分支應時時和主線(Trunk)保持同步 避免整合回主線時發現出乎意料的衝突
    • 假設A在分支上開發,B在主線上開發
    • 每當B在主線上開發一個段落(例如完成一個功能)
    • A應該將主線上的異動整合到分支
    • 避免分支和主線漸行漸遠,等分支開發完成時難以整合
  • 廉價複製(Cheap Copy)
    • 並未真的複製檔案,而是用內部鏈結指向某一版本樹
    • SVN中使用Cheap Copy建立Branch和Tag
  • 分支的建立方式
    • Basically Stable
      • 所有開發、錯誤修正、QA(Quality Assurance)都在Branch上進行
      • 測試無誤後才放到Trunk
    • Basically Unstable
      • 所有開發、錯誤修正、QA(Quality Assurance)都在Trunk上進行
      • Release時才建立Branch進行測試

標籤 V.S. 分支

  • 標籤(Tags)
    • 靜態 - 不會隨著專案發展而變化
    • 用途:標示重要版本
    • Don’t commit to tags
    • V1.0、V2.0、 XX_Function、 OO_Function
  • 分支(Branches)
    • 動態 – 開發新功能或新版本可以建立分支
    • 用途:多人同時開發、新功能開發、新版本開發、修正版
    • 通常會再與主線(Trunk)合併(Merge)
    • XX_Beta1、OO_Beta3
SVN(Subversion) 主線(Trunk)、分支(Branch)、標籤(Tag)
Δ 回到最上方