要经过 HTTP 协议访问 Subversion 文件仓库,须要安装并配置好 Web 服务器。Apache2 被证明能够很好的与 Subversion 一块儿工做。关于 Apache2 的安装超出了本文的范围(假设已经安装好Apache2) ,尽管如此,本文仍是会涉及如何配置 Apache2 使用 Subversion。 相似的,要经过 HTTPS 协议访问 Subversion 文件仓库,您须要在您的 Apache2 中安装并配置好数字证书,这也不在本文的讨论范围之中。web
幸运的,Subversion 已经包含在 main 仓库中。因此,要安装 Subversion,您只须要简单的运行:apache
$ sudo apt-get install subversion $ sudo apt-get install libapache2-svn
经过上面的命令已经安装了所需的软件包。接下来将阐述如何建立 Subversion 仓库以及如何设置项目的访问权限。服务器
许多位置均可以放置 Subversion 仓库,其中两个最经常使用的是:/usr/local/svn 以及 /home/svn。咱们选择把 Subversion 仓库放在 /home/svn/repos,而且假设咱们须要创建两个仓库 project1 和 project2。网络
一般的状况下,首先建立一个名为 “Subversion” 的用户组,该组是 Subversion 仓库所在的目录的拥有者。ssh
使用以下命令增长组,而且把用户加到组里:svn
$ sudo addgroup subversion $ sudo usermod -G subversion -a www-data
www-data 是专门为 web server 运行而建立的用户,系统中已经预先建立好了。ui
查看上面两个命令的执行结果:加密
$ cat /etc/group | grep subversion subversion:x:1001:www-data
执行以下命令建立仓库目录:版本控制
$ sudo mkdir -p /home/svn/repos/project1 $ sudo mkdir -p /home/svn/repos/project2
下面命令用于建立 Subversion 仓库:rest
$ sudo svnadmin create /home/svn/repos/project1 $ sudo svnadmin create /home/svn/repos/project2
设置仓库的用户和组:
$ sudo chown -R www-data:subversion /home/svn/repos/project1 $ sudo chown -R www-data:subversion /home/svn/repos/project2
Subversion 仓库能够经过多种不一样的方式进行访问——经过本地硬盘,或者经过各类网络协议。不管如何,文件仓库的位置老是使用 URL 来表示。
下面是几种不一样的 URL 模式及其对应的访问方法:
WebDAV (Web-based Distributed Authoring and Versioning) 一种基于 HTTP 1.1协议的通讯协议.它扩展了HTTP 1.1,在GET、POST、HEAD等几个HTTP标准方法之外添加了一些新的方法,使应用程序可直接对Web Server直接读写,并支持写文件锁定(Locking)及解锁(Unlock),还能够支持文件的版本控制。
要经过 WebDAV 协议访问 SVN 文件仓库,首先必须配置 Apache 2 Web 服务器。加入下面的代码片断到 /etc/apache2/mods-available/dav_svn.conf 文件中:
<Location /svn> DAV svn # Alternatively, use SVNParentPath if you have multiple repositories # under a single directory SVNParentPath /home/svn/repos AuthType Basic AuthName "Subversion repository" # 指定基本用户验证的密码文件路径 AuthUserFile /etc/subversion/dav_svn.passwd # 指定文件仓库访问的受权配置文件路径 <IfModule mod_authz_svn.c> AuthzSVNAccessFile /etc/subversion/dav_svn.authz </IfModule> #<LimitExcept GET PROPFIND OPTIONS REPORT> Require valid-user #</LimitExcept> </Location>
重启 Apache2 Web 服务器
$ sudo service apache2 restart
$ sudo htpasswd -c /etc/subversion/dav_svn.passwd user_name
它会提示你输入密码,当您输入了密码,该用户就创建了。“-c” 选项表示建立新的 /etc/subversion/dav_svn.passwd 文件,因此 user_name 所指的用户将是文件中惟一的用户。若是要添加其余用户,则去掉“-c”选项便可:
$ sudo htpasswd /etc/subversion/dav_svn.passwd other_user_name
首先须要加载mod_authz_svn.so 在目录 /etc/apache2/mods-enabled 下建立软连接到 ../mods-available/authz_svn.load
$ cd /etc/apache2/mods-enabled $ sudo ln -s ../mods-available/authz_svn.load
../mods-available/authz_svn.load文件的内容为:
LoadModule authz_svn_module /usr/lib/apache2/modules/mod_authz_svn.so
这里我指定了三个组: design 组 和 test 组,design 组读写权限,test组只有读的权限。另外,设置一个管理员帐号 admin,管理员对全部项目有读写权限。
受权文件 /etc/subversion/dav_svn.authz 的内容以下:
[groups] design=user1,user2,user3 test=user4,user5 [project1:/] admin=rw @design=rw @test=r [project2:/] admin=rw @design=rw @tester=r
若是在Check in的时候遇到以下错误:
Can’t open ‘/home/svn/myproject/db/txn-current-lock’: Permission denied
这是由于文件所属的用户和组不对形成的问题,能够从新对整个项目目录设置用户和组:
$ sudo chown -R www-data:subversion /home/svn/repos/project1
若是你不想将项目目录的拥有者设置成 www-data 的话,好比你可能想设置为 root:
$ sudo chown -R root:subversion /home/svn/repos/project1
必须将 root 加入 subversion 组:
$ sudo usermod -G subversion -a root
还要设置组的属性:
$ sudo chmod -R g+rws /home/svn/repos/project1
而后查看 txn-current-lock 文件的权限和用户以及组信息,应该相似于:
$ ls -l /home/svn/myproject/db/txn-current-lock -rw-rwSr-- 1 root subversion 0 2009-06-18 15:33 txn-current-lock
至此,Subversion 服务器的配置已经完成了,借助 SVN 客户端软件就能够经过 http:// 的方式访问到上面配置的两个文件仓库了。