##在这里详述"SvnWithApache". '''[[http://www.dualface.com/blog/2005/06/subversion_c_ap.html|Subversion: 用 Apache2 作为 Subversion 的服务平台]]''' {{{ 我以前一直是用 Svnserve 做为 Subversion 服务器。这样简单易行,而且访问速度也不错。 但 Svnserve 做服务器有几个不足之处: 1、权限管理太简单,只能为整个仓库设置访问权限,不能为目录设置访问权限; 2、访问用户的密码以明文形式保存在文本文件里面; 3、只能提供一个仓库,如果要提供多个仓库,就必须启动多个 Svnserve 实例; 4、Svnserve.exe 必须借助第三方工具软件(例如 FireDaemon)才能安装为 Windows 系统服务; 5、必须在防火墙上打开单独的端口,而不能直接通过 HTTP 协议访问。 而换成用 Apache2 作为 Subversion 的服务平台,具有下列好处: 1、可以为每个仓库、目录设置访问权限; 2、密码采用 MD5 或者 Crypt 加密存储,并可以利用其他验证方式; 3、可以同时服务多个 Subversion 仓库; 4、通过 HTTP 协议即可访问仓库,几乎不会受到防火墙影响; 5、可以通过浏览器直接浏览、下载文件; 6、任何支持 WebDAV 的软件都可以操作 Subversion 仓库。 废话不说了,安装步骤如下: 第一步:安装 Apache2 很遗憾,必须使用 Apache2,而不能是 Apache1 或者 IIS。如果你的系统正在使用 IIS 或者 Apache1,那么可以将 Apache2 绑定到其他端口,例如 8080。这只需要修改 httpd.conf 的 Listen 80 为 Listen 8080 (注意去掉该行前面的 # 注释符号) 即可。 第二步:集成 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 第三步:创建仓库 在命令行窗口运行: d:/svn-1.2.0-win32/bin/svnadmin create d:/svnrepo 然后继续修改 httpd.conf,加入下面的内容: DAV svn SVNPath d:/svnrepo 现在启动 Apache2,通过浏览器访问 http://127.0.0.1:8080/public/ 应该就可以看到如下画面了。当然了,如果你的仓库里面什么都没有,就只能看到一个空目录而已。 第四步:权限验证 经过前面三个步骤,我们建立了一个任何人都可以访问并操作的 Subversion 仓库。所以现在就是该为这个仓库加上锁的时候了。 修改 httpd.conf,找到刚刚输入的 ,修改为如下内容: 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" 这里我们指定了两个文件。repo-access-file 文件用于指定仓库的访问策略,auth-file 则保存用户名和密码。 repo-access-file 文件的内容如下: [/] dualface = rw * = r [/private] dualface = rw 这个文件里面,[/] 表示要为根目录指定访问策略,而 [/private] 则表示为 /private 目录指定访问策略。 [/] 后面的 dualface = rw 表示名为 dualface 的用户在这个目录及其子目录中具有读写权限(r = 读,w = 写)。* = r 则表示任何用户都具有只读权限。[/private] 后面没有 * = r,因此除了 dualface 以外的任何其他用户都无法访问这个目录。 这里要注意的是,虽然我们为 / 根目录指定的访问策略是允许任何人具有只读权限,但 /private 目录单独的访问策略具有更高的优先级。 接下来,还要创建保存用户名和密码的 auth-file 文件。这个文件不能直接建立,需要使用 Apache2 的 htpasswd 程序来建立。使用格式如下: htpasswd -cm d:/svn-1.2.0-win32/conf/auth-file dualface -cm 参数表示创建文件,并添加用户。而 dualface 则是要添加的用户名。执行命令后,htpasswd 会提示输入两次为用户指定的密码。 如果要添加更多用户,将参数 -cm 改为 -m 即可。最后重新启动 Apache2,如果一切顺利,我们的仓库就完全建立好了! dualface 发表于 2005 年 06 月 04 日 @ 所有评论 您好,拜读大作,深受启发。但还有点问题不清楚,望不吝赐教 我在Apache中设置参数如下: DAV svn SVNParentPath F:/svn AuthzSVNAccessFile "F:\svn\auth\access.file" Satisfy Any Require valid-user AuthType Basic AuthName "认证密码" AuthUserFile "F:\svn\auth\user.file" 现F:\svn下面有子目录Transfer。 我在access.file中设置为: [/Transfer] test=r 使用http://localhost/svn/Transfer/访问。test用户并不能登录。 而非要设置成为 [/] test=r test用户才可以登录。 请问,问题出在哪? CoolSlob 发表于 2005 年 06 月 08 日 这个问题我还没注意,也许是这样的: 授权是从根目录开始的,所以首先要给 [/] 授权,然后再给其下的子目录授权。 }}}