本文將介紹如何在Linux環境下(以Redhat9為例) 通過Subversion 來構建小組開發過程中最為重要的版本控制環境,包括Subversion 環境的安裝配置,以及用戶端的配置和使用。(某些操作,如make install需要root許可權,簡便起見,在沒有特殊說明的情況下,下面的工作均使用root賬戶完成。)
1. 安裝Apache HTTP Server
httpd是web伺服器,httpd和subversion 配合,可用來通過web訪問subversion,得到httpd-2.2.4.tar.bz2檔案後,通過以下命令解壓:
tar -jxvf httpd-2.2.4.tar.bz2
進入解壓後的目錄後,執行
./configure --enable-dav --enable-so --enable-nonportable-atomics
其中,--enable-dav允許Apache提供DAV協議支援;--enable-so允許運行時載入DSO模組 ;--enable-nonportable-atomics可以在486以上的CPU上啟用更加高效的基於互斥執行的原子操作。前兩個參數是必須要加的,你還可以根據您的需要添加其他的參數。httpd預設安裝目錄為/usr/local/apache2,可通過--prefix參數指定。
另外,網路上有些howto上有在此時使用--enable-maintainer-mode參數,建議在正式的使用環境中不要使用,該參數使用所有警告和偵錯符號編譯原始碼,會影響效能。
完成後使用make命令編譯httpd,執行make install則完成對httpd的安裝,預設路徑為/usr/local/apache2。
安裝完成後,進入 /usr/local/apache2/bin目錄,使用
./apachectl start啟動httpd
在瀏覽器中開啟http://localhost/,如果能正常顯示“It Works。”,則證明已經安裝成功。
2.安裝Subversion
subversion的安裝稍有技巧,需要下載subversion-1.4.3.tar.bz2 和subversion-deps-1.4.3.tar.bz2兩個壓縮包,並且解壓至同一目錄下,這樣subversion會自動地編譯、安裝依賴庫;若習慣性的先安裝依賴庫,後安裝subversion,則依賴庫的編譯需要手動進行。
進入解壓後的目錄,執行
./configure --with-apxs=/usr/local/apache2/bin/apxs --with-apr=/usr/local/apache2 --with-apr-util=/usr/local/apache2
其中,--with-apxs 用於產生apache httpd的mod_dav_svn和mod_authz_svn模組;--with-apr 和 --with-apr-util=參數指向 Apache 的安裝根目錄,而不是使用預設的 SVN 安裝包中內建的 apr ,否則如果你安裝的 Apache 版本不同有可能導致 APR 庫不匹配,出現類似:
Can't set position pointer in file '/svn/test/db/revs/1': Invalid argument 的錯誤。(同樣可以通過 --prefix參數指定安裝目錄)
Configure完成後,執行make和make install命令完成安裝。
Subversion編譯完成後會自動在 /usr/local/apache2/conf/httpd.conf 添加
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
這兩行,並且將產生的mod安裝到apache2的modules目錄。
3.建立repository
假設我們把版本庫建立在/home目錄下,那麼執行mkdir repository建立版本庫檔案夾,
通過svnadmin create repository/test命令可建立名為test的版本庫。
若建立成功,則subversion的安裝便已成功完成。
這裡,我使用了fsfs資料庫格式,這是subversion目前的預設資料存放區形式,如果想要使用Berkeley DB作為資料庫格式,則需要在安裝subversion之前安裝Berkeley DB,並在編譯subversion時使用—with-berkeley-db參數,然後可以使用
svnadmin create --fs-type bdb repository/test 命令來建立版本庫。(關於兩者的對比可參考Version Control with Subversion(中文書名為《使用subversion進資料列版本設定》)第5章)。
4.匯入原始碼
現在,我們已經有了一個可用的版本庫了,接下來我們使用
mkdir –p import/{trunk,branches,tags} 命令在/home/svnroot目錄下建立一個名為import的新檔案夾,包含trunk、branches、tags 三個子目錄,目錄結構如下圖所示。
至於為什麼這麼做,大家可以參考Version Control with Subversion第4章。
Some dir
|---import
|---trunk
|---branches
|---tags
下面這條語句將把路徑/home/svnroot/import下的目錄和檔案匯入到你建立的Subversion 倉庫中去,
提交後的修訂版為1。
svn import /home/svnroot/import file:///home/svnroot/repository/test –m "Init repository"
這裡/home/svnroot/import可以使用相對路徑,但file:///home/svnroot/repository/test必須以絕對路徑表示。
5.版本庫所有者和許可權修改
目前,repository目錄依然為root使用者所有,預設許可權為755,為了讓使用者能夠通過apache正常讀寫該目錄,我們需要先將該目錄以及該目錄的上層目錄svnroot的所有權交給apache httpd(安裝apache httpd的時候,會自動增加apache使用者組和apache使用者),然後為了安全起見,將re