2007年8月30日

試用 Subversion

最近為了文件/源碼版本控管的需求,裝了 subversion 1.3.2 來用。

感覺

  1. 不知為何,在 Gentoo 2006.1 on Pentium2 266 上的 Subversion 很容易 hang 住。現在重新編譯 subversion 1.3.2 中,將一些支援選項先關掉看看能否正常。
  2. 反過來說,Windows 上的 Subversion 很穩定,這部份可以參考 嘟嘟老窝 的安裝手記將 svnserve 轉成 service 模式。
  3. Subversion 和 CVS 在版本管控認知上有很大的差異:
    1. CVS: 以檔案為主,每個檔案的修改版次各自獨立控管,所以 release 一個版本時很難知道某個檔案的某版號究竟屬於那個 release 版。
    2. Subversion: 以完整系統為主,所有檔案統一歸到一個修改版次上,在 release 一個版本時會有完全一致的修改版號。
  4. 因版本管控認知差異所造成的使用方式改變:
    1. 對於異動次數多的與次數少的,可能不方便放在同一個檔案庫下。
    2. 多個專案必須對應到多個檔案庫中,否則會造成一版次一直遞增,但實際上線的版本即始未曾改動卻差了幾十、幾百版次。

建立多檔案庫的方法:

為免一個小更動造成各專案/文件之版次變動,因此要建立多檔案庫。
  1. 所有檔案庫必須歸到同一主目錄下,如:SVN_ROOT=/home/svn
  2. 在主目錄下可以再建子目錄,作為檔案庫分類之用
    1. mkdir $SVN_ROOT/docs # 儲放文件檔
    2. mkdir $SVN_ROOT/projects # 儲放專案資料
  3. 利用 svnadmin 建立所需檔案庫
    1. svnadmin create $SVN_ROOT/docs/document1 # 第一份文件庫
    2. svnadmin create $SVN_ROOT/docs/document2 # 第二份文件庫
    3. svnadmin create $SVN_ROOT/projects/project1 # 第一份專案庫
    4. svnadmin create $SVN_ROOT/projects/project2 # 第二份專案庫
  4. 將 svnserve 的 --root 參數指向 $SVN_ROOT 上, Gentoo 上是編緝 /etc/conf.d/svnserve 這個檔
    SVNSERVE_OPTS="--root=/home/svn"
  5. 設定 $SVN_ROOT 目錄的擁有者,此例是指派給 svn 用戶
    chown -R svn:svn $SVN_ROOT
  6. 設定一下 svnserve 執行時的身份(配合 $SVN_ROOT 的擁有者身份),同樣編輯 /etc/conf.d/svnserve 檔
    1. SVNSERVE_USER="svn"
    2. SVNSERVE_GROUP="svn"
  7. 啟動 svnserve 吧!
    /etc/init.d/svnserve start
  8. 如果是 Windows 平台的話,那檔案權限設定的部份可以跳過。

Subversion 的權限控制

  1. 請參閱 Subversion的权限控制,先讓所有的檔案庫可以參照到同一份 authz 及 passwd 。在 Windows 上可以 copy 方式統一所有設定檔;在 Linux 上則乾脆用 soft link 比較省事 (這麼做是否有問題還待測試,原因是實際操作時總是發現 svnserve 會 hang 住)
  2. authz 這個檔案的設定是為了賦予各檔案庫不同的權限,以 [name:path] 方式對檔案庫 (name) 的路徑 (path) 進行區分。其中 name 是檔案庫相對於 $SVN_ROOT 的路徑;path 則是相對於檔案庫本身的子目錄。
  3. 以 $SVN_ROOT/docs/document1 這個檔案庫來說,對應的的設定方式就是 [docs/document1:/];若是要設定到檔案庫下的某個子目錄時,就變成 [docs/document1:/rfp] 或 [docs/document1:/proposal] 分別表示 document1 檔案庫下的 rfp 目錄或 proposal 目錄。

Windows 平台補充

2006-11-13 補充

  • 如果在 Linux 平台上操作 svn 時會出現系統 hang 住的情形時,請檢查一下 dev-libs/apr ( Apache Portable Runtime Library ) 是否編入 urandom 支援(Gentoo 預設是不開啟的),若未編入的話請重新編譯並加入此選項。

參考資料:

  1. 嘟嘟老窝:Subversion安装手记
  2. Subversion 中文站:Subversion快速入门教程
  3. Subversion 中文站:Subversion的权限控制,這是建立多重檔案庫的重要參考資訊。