雖然近年 Git 非常火紅,但我個人開發還是喜歡中央集權式的 Subversion (SVN)擁有一台私人的 SVN Server 對於開發非常方便,尤其香港的 Client 最喜歡把 Project 左改右改,最後又改回頭。
Apache2 只需要一個簡單的插件 libapache2-svn 就能提供 SVN Repository Server 的功能,
再安裝 WebSVN 更可做到用瀏覽器查看和下載歷史檔案,非常好用。
安裝環境: Ubuntu 12.04 64bit,已安裝 PHP 5.3。
1. 安裝 mod-svn
apt-get install libapache2-svn
先啟用 authz_svn 備用
a2enmod authz_svn
2. 安裝 subversion (如果 Server 未安裝)
apt-get install subversion
3. 設定 SVN Repository
建立 SVN 目錄
mkdir /var/www/svn
切換為 www-data 並建立空的 Repository
chown www-data:www-data /var/www/svn su www-data svnadmin create /var/www/svn/test-project exit
4. 設定 Apache 設定 Repository位置
<VirtualHost *:80> ServerAdmin [email protected] DocumentRoot /var/www/svn.tiger-workshop.com ServerName svn.tiger-workshop.com <Location /repos> DAV svn SVNParentPath /var/www/svn AuthzSVNAccessFile "/var/www/login/svn-acl-conf" AuthType Basic AuthName "Tiger-Workshop SVN" AuthUserFile "/var/www/login/svn-auth-conf" Require valid-user </Location> </VirtualHost>
我選擇使用獨立的 Sub-domain 作 SVN 相關用途。
http://svn.tiger-workshop.com 之後會作為 WebSVN 之用,
http://svn.tiger-workshop.com/repos/ 作 SVN Repository。
5. 設定 SVN 登入權限
由於是私人伺服器,所有操作都需要登入,建立上一步指定的 AuthUserFile
htpasswd2 -c /var/www/login/svn-auth-conf tiger
為了能進一步控制個別用戶能存取的 Repository,另外設定 ACL:
vim /var/www/login/svn-acl-conf
svn-acl-conf 內容:
[/] tiger = rw [misc:/] lion = r
意思是 tiger 擁有所有 Repository 的讀寫權限,而 lion 只有 misc 的唯讀權限。
5. 安裝及設定 WebSVN
從 http://www.websvn.info/ 下載 WebSVN 最新版本並解壓到 /var/www/svn.tiger-workshop.com
cd ~ wget http://websvn.tigris.org/files/documents/1380/49056/websvn-2.3.3.tar.gz tar -zxv -f websvn-2.3.3.tar.gz mv websvn-2.3.3/* /var/www/svn.tiger-workshop.com/
設定 WebSVN
cd /var/www/svn.tiger-workshop.com/ cp include/distconfig.php include/config.php vim include/config.php
設定使用本地的 SVN 目錄及 ACL 設定檔:
$config->parentPath('/var/www/svn/'); $config->useAuthenticationFile('/var/www/login/svn-acl-conf');
Restart Apache 後完成!
其他 WebSVN 的設定例如 allowDownload、setMinDownloadLevel、setIgnoreWhitespacesInDiff 視乎需要開啟。