本文主要参考自http://cssor.com/ubuntu-server-svn.html,多数内容是从其中复制的。主要目的是记录一下我参考该文章的方法,恢复很久远以前的一个svn备份的,以免以我的记性,再过两天又忘了。
安装svn及apache服务:
sudo apt-get install apache2 libapache2-svn subversion
sudo addgroup subversion sudo usermod -G subversion -a www-data
# 一般可以将项目仓库建立到/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 。
最后是配置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