架设基于Apache服务器的SVN版本库
暑假即将全面展开的项目需要版本库的支持,
ClearCase过于庞大,CVS不足太多,我们决定才用Subversion。
但是普通安装的Subversion不能管理用户的权限,这一点老师肯定不能容忍。
查找了下资料Subversion还有一种结合Apache的工作模式通过WebDAV/DeltaV协议访问Repository,
这时版本库地址头就不是svn://了而是http://,
借用Apache管理URL访问权限的那套机制便可以实现权限管理的功能。
ClearCase过于庞大,CVS不足太多,我们决定才用Subversion。
但是普通安装的Subversion不能管理用户的权限,这一点老师肯定不能容忍。
查找了下资料Subversion还有一种结合Apache的工作模式通过WebDAV/DeltaV协议访问Repository,
这时版本库地址头就不是svn://了而是http://,
借用Apache管理URL访问权限的那套机制便可以实现权限管理的功能。
简单贴下配置代码:
Apache的httpd.conf
#SVN
LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
# SVN 项目配置文件,格式:Include 配置文件名
#为每个虚拟目录设置一个配置文件,用Include命令加载
Include D:/SubversionFiles/conf/*.project
#为每个虚拟目录设置一个配置文件,用Include命令加载
Include D:/SubversionFiles/conf/*.project
XX.project配置例子如下,每个版本库对应一个.project
<Location /Library>
#SVN项目名
DAV svn
#SVN项目的路径
SVNPath "D:\SubversionFiles\Library"
#SVN项目的路径权限授权文件存放路径
AuthzSVNAccessFile "D:/SubversionFiles/conf/Library.access"
#对于所有用户都需要身份验证
#Satisfy Any
#验证方式
AuthType Basic
#项目的名称
AuthName "资料库"
#用户信息
AuthUserFile "D:/SubversionFiles/conf/user"
Require valid-user
</Location>
<Location /Library>
#SVN项目名
DAV svn
#SVN项目的路径
SVNPath "D:\SubversionFiles\Library"
#SVN项目的路径权限授权文件存放路径
AuthzSVNAccessFile "D:/SubversionFiles/conf/Library.access"
#对于所有用户都需要身份验证
#Satisfy Any
#验证方式
AuthType Basic
#项目的名称
AuthName "资料库"
#用户信息
AuthUserFile "D:/SubversionFiles/conf/user"
Require valid-user
</Location>
XX.access例子如下,版本库文件夹访问权限就设置在这里
[groups]
g_manager = user1,user2
[groups]
g_manager = user1,user2
[/]
@g_manager = rw
@g_manager = rw
[Library:/VIP]
user3 = rw
user4 = r
user3 = rw
user4 = r
至于这些user的信息文件,由.project文件里AuthUserFile指定
user信息文件是通过Apache的htpasswd.exe添加的。
另外为了安全地设定用户名和密码,俺还专门拿JSP写了个注册页面方便实验室的同僚们注册。
用的就是通过JSP调用外部程序的方法,关键代码:
String username=(String)request.getParameter("userid");
String password=(String)request.getParameter("password");
用的就是通过JSP调用外部程序的方法,关键代码:
String username=(String)request.getParameter("userid");
String password=(String)request.getParameter("password");
Process process=Runtime.getRuntime().exec("D:/Program Files/Apache Software Foundation/Apache2.2/Apache2/bin/htpasswd.exe -bm D:/SubversionFiles/conf/user "+username+" "+ password);