我以前一直是用 Svnserve 做為 Subversion 服務(wù)器。這樣簡(jiǎn)單易行,而且訪問速度也不錯(cuò)。
但 Svnserve 做服務(wù)器有幾個(gè)不足之處:
1、權(quán)限管理太簡(jiǎn)單,只能為整個(gè)倉庫設(shè)置訪問權(quán)限,不能為目錄設(shè)置訪問權(quán)限;
2、訪問用戶的密碼以明文形式保存在文本文件里面;
3、只能提供一個(gè)倉庫,如果要提供多個(gè)倉庫,就必須啟動(dòng)多個(gè) Svnserve 實(shí)例;
4、Svnserve.exe 必須借助第三方工具軟件(例如 FireDaemon)才能安裝為 Windows 系統(tǒng)服務(wù);
5、必須在防火墻上打開單獨(dú)的端口,而不能直接通過 HTTP 協(xié)議訪問。
而換成用 Apache2 作為 Subversion 的服務(wù)平臺(tái),具有下列好處:
1、可以為每個(gè)倉庫、目錄設(shè)置訪問權(quán)限;
2、密碼采用 MD5 或者 Crypt 加密存儲(chǔ),并可以利用其他驗(yàn)證方式;
3、可以同時(shí)服務(wù)多個(gè) Subversion 倉庫;
4、通過 HTTP 協(xié)議即可訪問倉庫,幾乎不會(huì)受到防火墻影響;
5、可以通過瀏覽器直接瀏覽、下載文件;
6、任何支持 WebDAV 的軟件都可以操作 Subversion 倉庫。
廢話不說了,安裝步驟如下:
第一步:安裝 Apache2
很遺憾,必須使用 Apache2,而不能是 Apache1 或者 IIS。如果你的系統(tǒng)正在使用 IIS 或者 Apache1,那么可以將 Apache2 綁定到其他端口,例如 8080。這只需要修改 httpd.conf 的 Listen 80 為 Listen 8080 (注意去掉該行前面的 # 注釋符號(hào)) 即可。
第二步:集成 Subversion 到 Apache2 中
修改 httpd.conf,加入下面兩行:
LoadModule dav_svn_module d:/svn-1.2.0-win32/bin/mod_dav_svn.so
LoadModule dav_svn_module d:/svn-1.2.0-win32/bin/mod_authz_svn.so
第三步:創(chuàng)建倉庫
在命令行窗口運(yùn)行:
d:/svn-1.2.0-win32/bin/svnadmin create d:/svnrepo
然后繼續(xù)修改 httpd.conf,加入下面的內(nèi)容:
DAV svn
SVNPath d:/svnrepo
現(xiàn)在啟動(dòng) Apache2,通過瀏覽器訪問
http://127.0.0.1:8080/public/
應(yīng)該就可以看到如下畫面了。當(dāng)然了,如果你的倉庫里面什么都沒有,就只能看到一個(gè)空目錄而已。
第四步:權(quán)限驗(yàn)證
經(jīng)過前面三個(gè)步驟,我們建立了一個(gè)任何人都可以訪問并操作的 Subversion 倉庫。所以現(xiàn)在就是該為這個(gè)倉庫加上鎖的時(shí)候了。
修改 httpd.conf,找到剛剛輸入的 ,修改為如下內(nèi)容:
DAV svn
SVNPath d:/svnrepo
AuthzSVNAccessFile "d:/svn-1.2.0-win32/conf/repo-access-file"
Satisfy Any
Require valid-user
AuthType Basic
AuthName "我的 Subversion 倉庫"
AuthUserFile "d:/svn-1.2.0-win32/conf/auth-file"
這里我們指定了兩個(gè)文件。repo-access-file 文件用于指定倉庫的訪問策略,auth-file 則保存用戶名和密碼。
repo-access-file 文件的內(nèi)容如下:
[/]
dualface = rw
* = r
[/private]
dualface = rw
這個(gè)文件里面,[/] 表示要為根目錄指定訪問策略,而 [/private] 則表示為 /private 目錄指定訪問策略。
[/] 后面的 dualface = rw 表示名為 dualface 的用戶在這個(gè)目錄及其子目錄中具有讀寫權(quán)限(r = 讀,w = 寫)。* = r 則表示任何用戶都具有只讀權(quán)限。[/private] 后面沒有 * = r,因此除了 dualface 以外的任何其他用戶都無法訪問這個(gè)目錄。
這里要注意的是,雖然我們?yōu)?/ 根目錄指定的訪問策略是允許任何人具有只讀權(quán)限,但 /private 目錄單獨(dú)的訪問策略具有更高的優(yōu)先級(jí)。
接下來,還要?jiǎng)?chuàng)建保存用戶名和密碼的 auth-file 文件。這個(gè)文件不能直接建立,需要使用 Apache2 的 htpasswd 程序來建立。使用格式如下:
htpasswd -cm d:/svn-1.2.0-win32/conf/auth-file dualface
-cm 參數(shù)表示創(chuàng)建文件,并添加用戶。而 dualface 則是要添加的用戶名。執(zhí)行命令后,htpasswd 會(huì)提示輸入兩次為用戶指定的密碼。
如果要添加更多用戶,將參數(shù) -cm 改為 -m 即可。最后重新啟動(dòng) Apache2,如果一切順利,我們的倉庫就完全建立好了!