本文將介紹如何在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用戶),然後爲了安全起見,將repository和svnroot目錄的權限都改爲700,apache外其他用戶就沒有了該目錄的任何權限了。
首先,打開apache配置文件/usr/local/apache2/conf/httpd.conf,確保將User和Group 設置爲
User apache
Group apache
然後,進入/home目錄,修改svn倉庫的所有者
chown -R apache:apache svnroot
最後,修改該目錄權限(不要在這裏使用-R參數,apache用戶需要對test下的文件有讀寫權限)
chmod 700 svnroot
chmod 700 svnroot/repository
至此,我們已經爲subversion的使用做好了準備工作,有了一個可由apache進行讀寫的版本庫,只要對apache稍加設置,我們便可以通過web來訪問版本庫了。結合httpd使用subversion時的身份認證和授權設置問題是需要特別注意的,我將在第二篇中詳細說明。
Reference
1. Version Control with Subversion 1.4(r2730) Ben Collins-Sussman, Brian W. Fitzpatrick, and C. Michael Pilato
2. Apache HTTP Server Version 2.2文檔中文版 Apache Software Foundation 金步國譯
3. 在Redhat9 Linux下安裝,配置Subversion 1.3.1 Wooin http://blog.csdn.net/wooin/archive/2006/07/11/903974.aspx