aogu_xt 发表于 2013-2-4 22:22:51

整合SVN与Apache

<div class="cnt">转自:http://ttitfly.iteye.com/blog/134570
 
 
1. 安装与svn对应的apache版本

2.把svn安装目录下(比如:D:\Program Files\Subversion\bin)的mod_authz_svn.so和mod_dav_svn.so文件拷贝到apache的安装目录(D:\Program Files\Apache Group\Apache2\modules)下

3.修改D:\Program Files\Apache Group\Apache2\conf\httpd.conf文件

因为apache和svn整合需要依赖的2个Module(145,146行)
LoadModule cgi_module modules/mod_cgi.so LoadModule dav_module modules/mod_dav.so 
把这2行注释取消

同时添加svn的Module:
LoadModule dav_svn_module modules/mod_dav_svn.so LoadModule authz_svn_module modules/mod_authz_svn.so 
最后在配置请求:
<Location /svn> DAV svn SVNPath D:/svn/reponsitory </Location> 
重启apache. 现在svn仓库里的文件都可以通过apache来访问了:

比如:

http://localhost/svn/   

如果这样配置的话,因为没有配置认证信息,所以,任何人都可以访问。

如果把Location部分改为:
<Location /svn> DAV svn SVNPath D:/svn/reponsitory AuthType Basic AuthName "Subversion Reponsitory" AuthUserFile d:/test/passwords Require valid-user </Location> 
AuthType:认证类型
AuthName:弹出认证窗口时的标题
AuthUserFile:认证用户名和密码文件,默认是密码是md5加密
Require valid-user:是否需要认证
                                       
D:\Program Files\Apache Group\Apache2\bin下有个htpasswd命令
htpasswd help可以查看具体用法
-c是新建立个密码文件
如:
htpasswd -c c:/test/passwords admin

回车后就会提示输入新添加的admin用户的密码
              
不带-c参数是追加一个新用户test
htpasswd   c:/test/passwords test   
                  
-p是密码不加密,如:
htpasswd -p d:/test/passwords test1   
                     
如果2个用户的密码都是md5加密的,并且密码一样,在密码文件里存的也是不一样的。
如果直接在密码文件里输入内容,按照一定的明文格式来新添加用户和密码也是可以的。
-----------------------------------------------------------------------------------------------------------
1. 如果将Location部分的SVNPath改为SVNParentPath,如下:
<Location /svn> DAV svn SVNParentPath D:/svn/reponsitory AuthType Basic AuthName "Subversion Reponsitory" AuthUserFile d:/test/passwords Require valid-user </Location> 
则svn 的父仓库我们都无法访问到了,只能访问它的子仓库。

所以需要建立子仓库:
svnadmin create d:/svn/reponsitory/child1 
现在如果你向仓库里导入一个project,比如用TortoiseSVN   来import   ,如果你再地址栏里输入:

http://localhost/svn/aaa

则表示aaa必须是个已经存在的子仓库。否则失败

查看的话也是一样的,比如:

http://localhost/svn/bbbb   

则bbbb也是个已经存在的子仓库。而不是父仓库下的bbbb项目。因为bbbb项目你是没办法访问到了

如果Require valid-user改为下面:

则表示匿名用户可以有读权限,而没有写和修改的权限 (一个用户对所有子仓库里的项目权限都是一样的。)
<Location /svn> D:/svn/reponsitory AuthType Basic AuthName "Subversion Reponsitory" AuthUserFile d:/test/passwords <LimitEDAV svn SVNParentPath xcept GET PROPFIND OPTIONS REPORT> Require valid-user </LimitExcept> </Location> 
如果再增加个策略文件,(一个用户对所有子仓库里的项目权限都是不一样的。)修改为:
<Location /svn> DAV svn SVNParentPath D:/svn/reponsitory AuthzSVNAccessFile d:/passwd/policy AuthType Basic AuthName "Subversion Reponsitory" AuthUserFile d:/test/passwords Require valid-user </Location> 
编写策略文件内容d:/passwd/policy:
user1=rw user2=r user3=  
subresponsitory:/表示子仓库subresponsitory下所有的项目

如果某个子仓库没有在策略文件里配置,那么默认是所有用户都没有权限访问

用户组

策略文件里修改为:
developers=user1,user2 testers=user3 #testers=@developers,user3也可以 @developers=rw @testers= #这里也可以继续添加用户比如 user4=r  
备份:
svnadmin hotcopy d:/svn/reponsitory d:/backup svnadmin hotcopy d:/svn/reponsitory ftp://11.222.11.2 #reponsitory下的内容拷贝到backup目录下,reponsitory本身不会被拷贝
页: [1]
查看完整版本: 整合SVN与Apache