" 安装apache2
sudo apt-get install apache2
" 安装apache的svn扩展模块
sudo apt-get install libapache2-svn
" 安装subversion
sudo apt-get install subversion
" 创建版本库保存的文件夹
mkdir /works/test/subversion
" 创建项目的版本库,为测试多用户,管理权限等问题,添加多个版本库
svnadmin create /works/test/subversion/project1
svnadmin create /works/test/subversion/project2
svnadmin create /works/test/subversion/project3
" /etc/apache2/httpd.conf 末尾添加project【1-3】的配置(注意配置文件为httpd.conf)
<Location /project1>
DAV svn
SVNPath /works/test/subversion/project1
AuthType Basic
AuthName "project description"
AuthUserFile /etc/apache2/dav_svn.pass
AuthzSVNAccessFile /etc/apache2/dav_svn.authz
#<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
#</LimitExcept>
</Location>
<Location /project2>
DAV svn
SVNPath /works/test/subversion/project3
AuthType Basic
AuthName "project description"
AuthUserFile /etc/apache2/dav_svn.pass
AuthzSVNAccessFile /etc/apache2/dav_svn.authz
#<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
#</LimitExcept>
</Location>
<Location /project3>
DAV svn
SVNPath /works/test/subversion/project3
AuthType Basic
AuthName "project description"
AuthUserFile /etc/apache2/dav_svn.pass
AuthzSVNAccessFile /etc/apache2/dav_svn.authz
#<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
#</LimitExcept>
</Location>
" 配置文件解析
设置 | 解释 |
---|
<Location
/project1> | 意思是Subversion版本库的URL是http://MyServer/project1/ |
DAV svn | 告诉Apache是哪个模块响应那个URL的请求-此刻是Subversion模块。 |
SVNListParentPath
on | 对于Subversion1.3或者更高版本,这个指示表示显示所有SVNParentPath下的版本库 |
SVNParentPath D:\SVN | 告诉Subversion需要查看的版本库位于/home/subversion/project 之下 |
AuthType
Basic | 激活基本认证,就是用户名/密码 |
AuthName "Subversion repositories" | 用来说明何时弹出要求用户输入认证信息的认证对话框 |
AuthUserFile passwd | 指定使用的认证密码文件 |
AuthzSVNAccessFile | 位置Subversion版本库的访问控制文件的路径 |
Require
valid-user | 指定只有输入了正确的用户/密码的用户可以访问URL |
" 添加版本库的访问帐号
sudo htpasswd -c /etc/apache2/dav_svn.pass test1
-c 参数会清空以前所有帐号信息
" 如果要添加其他的帐号
sudo htpasswd /etc/apache2/dav_svn.pass test2
sudo htpasswd /etc/apache2/dav_svn.pass test3
" 增加对AuthzSVNAccessFile的支持
修改::/etc/apache2/mods-enabled/dav.load
增加以下内容
LoadModule authz_svn_module /usr/lib/apache2/modules/mod_authz_svn.so
" 在 /etc/apache2/dav_svn.authz 中添加project1-3的配置控制权限
[groups]
admin = admin
devteam1 = test1
devteam2 = test2
devteam3 = test3
docs = test1, test2, test3
training = bob
# 为所有库指定默认访问规则
# 所有人可以读,管理员可以写,危险分子没有任何权限
[/]
* = r
@admin = rw
dangerman =
# 允许开发人员可以完全访问他们的项目版本库
[project1:/]
@devteam1 = rw
[project2:/]
@devteam2 = rw
[project3:/]
@devteam1 = rw
@devteam2 = rw
# 文档编写人员对所有的docs目录有写权限
[/trunk/doc]
@docs = rw
" 重启apache
sudo service apache2 restart
" 权限修改
修改 /etc/apache2/envvars 中
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
将 www-data 修改成 当前系统用户,则可以避免权限问题,需要和 svnadmin create的用户和用户组一致
" 测试
svn co http://localhost/project1
用test2 checkout
创建一个简单的文本文件1
svn add 1
svn ci -m"add 1"
" 如果出现错误
Can't open file '/works/test/subversion/project1/db/txn-current-lock': Permission denied
请修改相应的/works/test/subversion/project1/目录的权限为777,或者修改成可以访问的相应的用户组
修正后提交,依然出错
更换用户,删除本地svn用户数据
sudo rm ~/.subversion/auth/* -rf
再次checkout,用test1
touch 1
svn add 1
svn ci -m"add 1"
成功,说明权限控制已经成功
参考
http://www.cnblogs.com/standsun/archive/2012/08/10/2631334.html
http://www.uml.org.cn/pzgl/200906056.asp
http://hi.baidu.com/zouqone/item/783063b76a8c9fd884dd79f0
http://wenku.baidu.com/link?url=G90ljDDM5_uYI6IqgyGYHya9gN0MLC97ampq0wMcAIjLGJfLMoQAw8ulVo1x8jjjUyBr37Wae_4iAKZzq6BPQYTy1UKeAdRUYD_8T4idCLS