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

Subversion(SVN) - 工作副本 & 版本號碼

工作副本(Working copy)

  • 將專案由檔案庫,複製一份到本機(Client)
  • 本機上(Client)的複製版本稱為工作副本
  • 使用checkout指令建立工作副本
  • 每個參與開發的人員應自行建立各自的工作副本,對工作副本進行開發
Subversion(SVN)架構
Δ 回到最上方

基準版本(Base Reversion)

  • 基準版本又稱工作版本
    • Checkout時的的版本
    • 最後一次執行update時的版本
  • SVN基準版本工作副本作比較:
    • 已修改 or 未修改
  • SVN基準版本檔案庫的版本作比較:
    • 已過時 or 未過時
  • 利用基準版本可得知工作副本中的檔案狀態為:
    1. 未修改 & 未過時
    2. 已修改 & 末過時
    3. 未修改 & 已過時
    4. 已修改 & 已過時
Δ 回到最上方

修訂版本(Revision)

  • 修訂版本:每次提交(Commit)即為一個修訂版本
  • 每個修訂版本號代表一個樹狀結構
    Subversion(SVN)修訂版本
    • 修訂版本號是全域性的
    • 工作副本隨時可還原任一修訂版本號的檔案和結構
  • 修訂版本是一個由0開始且不重複的循序自然數
    • Rev. 0
    • Rev. 1
    • ...
  • SVNLog很重要,commit時一定要填入對應的修改內容
    • 日後才能用Log找尋特定的修訂版本號碼
Δ 回到最上方

混合修訂版本

  • 工作副本同時含有多個修訂版本
    • 專案複雜時,有時想將工作複本中的一部分維持在舊版本
    • 對舊版的子模組進行測試
  • 原理:
    • commit時,有異動的檔案會更新成最新的版本號
    • commit時,未異動的檔案會保留原來的版本號
  • 限制:
    • 若檔案庫中檔案或資料匣的版本比工作副本新,無法commit對檔案或資料匣刪除的動作
    • 若目錄描述資訊不是最新版的,則無法commit
  • 執行commit後,檔案庫的全部檔案會更新成最新的版本號碼
  • 執行update後,工作副本中的檔案會更新成最新的版本號碼
Subversion(SVN)混合修訂版本
Δ 回到最上方

版本關鍵字

  • 修訂版本號碼很難記
  • 版本關鍵字來取代常用的修訂版本
    • HEAD:最新版
    • BASE:基準版本
      • 最後一次update時工作副本的版本號
      • 工作副本尚未被修改時的版本號
    • COMMITED
      • 最後commit的版本
      • 修訂版本號碼 ≤ BASE
    • PREV
      • 最後commit版本的前一版
      • 修訂版本號碼 = COMMITED - 1
Δ 回到最上方

差異集(Changeset)

  • 每次提交(Commit)即為一個修訂版本
  • 每個修訂版本號N代表一個樹狀結構
  • 差異集為修訂版本號N和N-1之間的變動
  • Subversion(SVN)差異集
Δ 回到最上方

工作副本追蹤原理

  • 工作副本:未修改過的最新版
    • 執行commit 無動作
    • 執行update 無動作
  • 工作副本:已修改過的最新版
    • 執行commit 上傳修改過的檔案
    • 執行update 無動作
  • 工作副本:未修改過的過時版本
    • 執行commit 無動作
    • 執行update 下載最新版本
  • 工作副本:已修改過的過時版本
    • 執行commit 產生out-of-date錯誤 檔案應該先被更新
    • 執行update 試著將最新版檔案與本地更動合併,若subversion無法自動完成,則留給使用者解決
Δ 回到最上方

差異(diff)

  • diff:SVN提供的工具,可以比較
    • 本地修改前後差異
    • 工作副本與其它分支或標籤的差異
    • 工作副本與歷史版本(舊版)的差異
    • 2個歷史版本間的差異
    • 工作副本中,2個檔案之間的差異
    • 追溯訊息,如作者、修訂版本號、日期
Δ 回到最上方