ubuntu 搭建SVN服务

本文主要参考自http://cssor.com/ubuntu-server-svn.html,多数内容是从其中复制的。主要目的是记录一下我参考该文章的方法,恢复很久远以前的一个svn备份的,以免以我的记性,再过两天又忘了。

安装svn及apache服务:

sudo apt-get install apache2 libapache2-svn subversion

增加svn用户组,用于管理svn,并加入到www-data的apache组:

sudo addgroup subversion
sudo usermod -G subversion -a www-data

然后可以创建svn项目仓库了:

# 一般可以将项目仓库建立到/home/svn目录
# 假设项目名为myproject,先建立空目录
$ sudo mkdir /home/svn
$ cd /home/svn
$ sudo mkdir myproject
$ sudo chown -R root:subversion myproject
 
#创建为svn项目,使用以下命令
$ sudo svnadmin create /home/svn/myproject
# 然后才赋予组成员对所有新加入文件仓库的文件拥有相应的权限:
# 如果命令顺序搞错,可能会报错,请参照官方wiki
$ sudo chmod -R g+rws myproject

启动服务

svnserve -d -r /home/svn/myproject

这里-d参数等效于--daemon,  -r参数等效于--root 。
启动服务后,svnserve 将会在端口 3690 等待请求,-d选项告诉 svnserve 以守护进程方式运行,这样在手动终止之前不会退出。-rt选项设置根位置来限制服务器的访问目录,从而增加安全性和节约输入svnserve URL的时间。对于root参数, 如果不加root参数,服务url为:svn://<hostname>/svn/myproject,而如果加上root参数,服务url为:svn://<hostname>/myproject
注意:如果 url参数设置有误的话,会导致访问的时候会报错,此问题我在配置时纠结了好久。

最后是配置apache,用http协议访问svn服务:

# 在安装了libapache2-svn时会自动生成该文件
$ sudo vi /etc/apache2/mods-available/dav_svn.conf

编辑dav_svn.conf配置文件,内有注释,可以去掉前面的#使语句生效,最后内容大概如下即可:

<Location /svn>  #/svn表示http://hostname/svn/myproject
  DAV svn
  SVNParentPath /home/svn #配置仓库父目录
  AuthType Basic
  AuthName "ToFishes Project Svn"
  AuthUserFile /etc/subversion/passwd  #svn用户文件
  AuthzSVNAccessFile /etc/subversion/authz #授权访问文件
  Require valid-user
</Location>
svn用户文件/etc/subversion/passwd 和 授权访问文件/etc/subversion/authz是不存在的,需要手动创建。 
 

svn用户文件可以通过命令创建:

#首次创建需要加-c选项,同时可以增加一个svn用户
#执行该命令会提示为新用户user_name设置密码
sudo htpasswd -c /etc/subversion/passwd user_name
 
#以后添加新用户,需要去掉-c选项,否则以前的用户就被覆灭了
sudo htpasswd /etc/subversion/passwd new_name
用户是可以添加了,同时需要管理授权,用于多个svn项目,划分不同的用户组:

用vi /etc/subversion/authz编辑授权文件,无文件则编辑并保存后会自动创建,无需担心。

授权文件内容格式如下:

#用户组指令
[groups]
#格式为  组名 = 用户名1,用户名2
group1 = user1, user2
group2 = user1, user3
#other groups...
#格式为  svn项目的仓库名:对应目录
[svn_repository_name:/]
#设置组的权限,r=read, w=write
@group1 = rw
[svn_repository_name2:/web/css]
@group2 = rw
改完最后重启apache :   sudo /etc/init.d/apache2 restart。然后用svn客户端,如小乌龟访问,可能会出现如下错误:

Invalid command 'AuthzSVNAccessFile', perhaps misspelled or defined by a module not included in the server configuration
这是需要加载authz_svn这个模块的支持。 建议将这两个module都加载一下:

a2enmod authz_svn
a2enmod dav_svn

这样工作就全部完成了,用小乌龟可以访问了。注意小乌龟访问的url:

自带的svnserve服务(访问地址类似于svn://<hostname>/myproject/)
与Apache配合使用  (访问地址类似于http://<hostname>/myproject/)


svn的备份恢复

在老服务器进行导出操作:
$ svnadmin dump 原先的repo的目录路径(/repository/directory) > dumpfile.svndump


 在新服务器将dumpfile.svndump导入到新的repository 目录中。
$ svnadmin load 新建的repos的目录路径(/repository/directory) < dumpfile.svndump


你可能感兴趣的:(SVN,ubuntu)