一、安装apache2和svn:
sudo apt-get install apache2
sudo apt-get install subversion
sudo apt-get install libapache2-svn
二.创建 SVN 仓库
1.创建目录
$ sudo mkdir /home/svn
$ cd /home/svn
2.下面的命令用于创建 SVN 文件仓库并修改所有者::
$ sudo svnadmin create /home/svn/project
$ sudo chown -R www-data project/
注:在ubuntu上,www-data是默认运行web服务的用户/组,一般在通过apt安装web服务程序时生成。搭建web服务的文件夹/文件一般要设置成www-data的。
三、访问方式
Subversion 文件仓库可以通过许多不同的方式进行访问(Check Out,签出)——通过本地硬盘,或者通过各种网络协议。无论如何,文件仓库的位置总是使用 URL 来表示。下表显示了不同的 URL 模式对应的访问方法:
模式 | 访问方法 |
file:/// | 直接访问本地硬盘上文件仓库 |
http:// | 通过 WebDAV 协议访问支持 Subversion 的 Apache 2 Web 服务器 |
https:// | 类似 http://,支持 SSL 加密 |
svn:// | 通过自带协议访问 svnserve 服务器 |
svn+ssh:// | 类似 svn://,支持通过 SSH 通道 |
1.直接访问文件仓库(file://)
这是所有访问方式中最简单的。它不需要事先运行任何 SVN 服务。这种访问方式用于访问本地的 SVN 文件仓库。语法是:
$ svn co file:///home/svn/myproject 或者 $ svn co file://localhost/home/svn/myproject
注意:如果您并不确定主机的名称,您必须使用三个斜杠(///),而如果您指定了主机的名称,则您必须使用两个斜杠(//).
对文件仓库的访问权限基于文件系统的权限。如果该用户具有读/写权限,那么他/她就可以签出/提交修改。如果您像前面我们说描述的那样设置了相应的组,您可以简单的将一个用户添加到“subversion”组中以使其具有签出和提交的权限。
2.通过 WebDAV 协议访问(http://)
要通过 WebDAV 协议访问 SVN 文件仓库,您必须配置您的 Apache 2 Web 服务器。您必须加入下面的代码片段到您的 /etc/apache2/mods-available/dav_svn.conf中:
<Location /svn>
DAV svn
SVNParentPath /home/svn
AuthType Basic
AuthName "subversion repository"
AuthUserFile /etc/subversion/passwd
AuthzSVNAccessFile /etc/subversion/authz
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
</LimitExcept>
</Location>
有些文档介绍的方法是
<Location /svn/project>
...
SVNPath /home/svn/project
..
这种方法把SVN的根目录写在了project里,这样会出现再创建另外一个新的项目时, 通过apache2找不到svn的情况。因些个人认为这种方法在实际项目中不适用。
在这个配置文件中,AuthUserFile 用来存放访问svn的用户名和密码(加密的,非明文),而AuthzSVNAccessFile用来找到允许访问的用户组和用户访问不同项目的权限。路径可以根据自己的需要设置。在这里我们写有/etc/subversion目录下。
cd /etc/subversion
sudo touch passwd
sudo touch authz
当您添加了上面的内容,您必须重新起动 Apache 2 Web 服务器,请输入下面的命令:
sudo /etc/init.d/apache2 restart
接下来,您需要创建 /etc/subversion/passwd 文件,该文件包含了用户授权的详细信息。要添加用户,您可以执行下面的命令:
sudo htpasswd -c /etc/subversion/passwd dy
它会提示您输入密码,当您输入了密码,该用户就建立了。“-c”选项表示创建新的/etc/subversion/passwd文件,所以user_name所指的用户将是文件中唯一的用户。如果要添加其他用户,则去掉“-c”选项即可:
sudo htpasswd /etc/subversion/passwd dy1
您可以通过下面的命令来访问文件仓库:
$ svn co http://hostname/svn/myproject project --username dy
它会提示您输入密码。您必须输入您使用 htpasswd 设置的密码。当通过验证,项目的文件就被签出了。
这个时候用户访问的权限都是rw,如果我们想为用户分组,每个组有不同的权限,那么就需要编辑我们创建好的文件,在/etc/subversion下
我们先用sudo htpasswd /etc/subversion/passwd 命令创建我们需要的用户sxl,lxp,dy,kfy,t1,t2,t3等,然后编辑:
sudo vi authz
[groups]
manager = sxl
developer = sql,lxp,dy,kfy
tester = t1,t2,t3
[test:/]
@manager = rw
@developer = rw
@tester = r
* = r
[project:/]
@manager = rw
@developer = rw
@tester =
* = r
例如我建立了三个组,一个manager ,一个developer ,一个tester。每组有不同的人。然后我创建了两个不同项目,一个名叫project,一个叫test。那么以上内容就决定了访问的权限,即:在test项目中,manager和developer组的成员都有读写权限,而tester组只在读权限,而没有写权限。
如果想对所有的项目都有请读写权限,那么可以写成
[/]
@manager = rw
@developer = rw
* = r
但要注意, [ / ] 和[ test:/ ]并列的关系,也就是说,如果在[ / ]里定义了manager为rw,但是在[test:/]里没有写manager,那么manager对test这个项目也是没有权限的。因此不同的项目权限都要进行分配。这样每个人访问的权限就确定了。
3.测试
服务器端:
jl@jl-desktop:/$ sudo svn co file://localhost/home/svn/myproject [sudo] password for jl: A project/aa.txt A project/dd.txt Checked out revision 3. 客户端:这有XP下安装SVN客户端,单击鼠标右键就可以出现SVN检出字样。
在版本库URL写:http://192.168.118.109/svn/project
检出目录写C:\Documents and Settings\Administrator\桌面\SVN服务器\document\checkout
如果提示:xxxxxx/xxxx/lock pemission denied错误,是因为服务器上目录的权限没设置。
chown -R www-data /home/svn/project就可以了。
最后后提示检出完毕。
提交的时候,需要提供用用户名和密码。如果密码正确并且有权限,那么就会提交成功。版本号也会相应改变。