网上很多文章东少一点,西少一点,无法完整配置成功,花了几天时间才整理成功。
1.程序安装(采用apt-get install安装)
sudo apt-get install apache2
sudo apt-get install subversion
sudo apt-get install libapache2-svn
2.创建仓库父目录
sudo mkdir /home/svn
3.创建仓库
所有的创建都放在刚刚创建的仓库父目录下
创建一个示例仓库:project
sudo svnadmin create /home/svn/project
4.处理仓库目录权限(linux中用户对目录、文件的访问必须拥有相关权限)
a.添加subversion组:
sudo addgroup subversion
b.给相关用户赋予文件访问权限:
chown -R www-data:subversion /home/svn 修改文件夹权限
chmod -R g+rws /home/svn 修改同组权限
5.修改apache配置文件
a.从创建的tools仓库复制权限,密码文件做为全局共用权限,密码文件
sudo cp /home/svn/project/conf/authz /home/svn
sudo cp /home/svn/project/conf/passwd /home/svn
b.修改dav_svn.conf配置文件
sudo gedit /etc/apache2/mods-available/dav_svn.conf
修改文件中<Location /svn></Location>之间的部分为
<Location /svn>
DAV svn
SVNParentPath /home/svn
SVNListParentPath on
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /home/svn/passwd
<IfModule mod_authz_svn.c>
AuthzSVNAccessFile /home/svn/authz
</IfModule>
Require valid-user
</Location>
c.往/home/svn/passwd里添加用户
sudo htpasswd -c /home/svn/passwd admin
根据提示输入用户密码admin,搞定
新增用户时不要加 -c
6.重启apache
sudo /etc/init.d/apache2 restart
7.权限设置
SVNParentpath和SVNPath在<Location>...</Location>里不能同时存在。
假设仓库目录结构如下:
/svn/project/
|----aa
|----|----bb
|----|----cc
其中SVNPath /svn/project/ , SVNParentPath /svn 。
那么就有两种情况:
(一)使用SVNParentPath
在authz文件里这样设置目录访问权限:
[groups]
manager = admin,cman #manager为组,admin,cman为组内用户
anyuser = skyman #anyuser是组,skyman为组下的用户
[project:/aa/bb]
@manager = rw #admin组的用户具有读写权限
* = #其他用户无权访问
[project:/aa/cc]
@manager= rw
@anyuser = rw
* =
[project:/]
@manager = rw #manager组的用户可以访问/svn/project/下的所有目录,并且有读写权限
skyman = r #skyman用户只有读取权限,不能修改/svn/project/目录下的文件
(二)使用SVNPath
在authz文件里这样设置目录访问权限:
[/aa/bb]
@manager = rw #admin组的用户具有读写权限
* = #其他用户无权访问