在Ubuntu系统中搭建SVN服务器是一个常见的需求,尤其适合团队协作开发时进行版本控制,SVN(Subversion)是一个开源的版本控制系统,它能够高效地管理文件和目录的变更,本文将详细介绍如何在Ubuntu系统上从安装配置到管理SVN服务器的完整过程,包括创建仓库、用户权限设置以及日常维护等内容。

需要更新系统软件包列表并安装SVN服务器软件,在Ubuntu中,通常使用apt包管理器来完成这一操作,打开终端,执行以下命令:
sudo apt update sudo apt install subversion
安装完成后,可以通过svnserve --version命令验证是否安装成功,需要创建一个用于存放SVN仓库的目录,例如/var/svn,并设置适当的权限:
sudo mkdir -p /var/svn sudo chown -R www-data:www-data /var/svn sudo chmod -R 775 /var/svn
这里将所有者设置为www-data(Apache默认用户),以便后续可能通过Web方式访问仓库,创建一个新的SVN仓库,例如myproject:
sudo svnadmin create /var/svn/myproject
创建完成后,仓库目录下会生成若干配置文件,其中conf/svnserve.conf是SVN服务的主配置文件,需要修改其内容以启用匿名访问控制和权限验证,编辑该文件:

sudo nano /var/svn/myproject/conf/svnserve.conf
在文件中找到[general]部分,确保以下配置项未被注释,并根据需要修改:
[general] anon-access = none # 禁止匿名访问 auth-access = write # 允许认证用户读写 password-db = passwd # 密码文件路径 authz-db = authz # 权限控制文件路径 realm = MyProject # 仓库认证领域名称
配置说明:anon-access设置为none表示禁止匿名用户访问,auth-access设置为write表示认证用户具有读写权限,配置用户密码文件passwd,该文件位于仓库的conf目录下,编辑passwd文件:
sudo nano /var/svn/myproject/conf/passwd
在文件中添加用户及其密码,格式为username = password,
[users] admin = admin123 developer = dev456 tester = test789
配置权限文件authz,用于精细控制用户或用户组的访问权限,编辑authz文件:

sudo nano /var/svn/myproject/conf/authz
在文件中可以设置用户组、目录权限等。
[groups] admin_group = admin dev_group = developer, tester [/] @admin_group = rw * = r [/trunk] @dev_group = rw * = r [/branches] @dev_group = rw * = r [/tags] @admin_group = rw * = r
上述配置中,[groups]部分定义了两个用户组,[/]表示仓库根目录,@admin_group表示admin_group组的用户具有读写权限,表示其他用户只读权限,在/trunk、/branches和tags目录下,dev_group组的用户具有读写权限,配置完成后,启动SVN服务,SVN服务默认通过3690端口运行,可以使用以下命令启动:
sudo svnserve -d -r /var/svn
参数-d表示以守护进程方式运行,-r指定仓库根目录,如果希望服务开机自启动,可以创建一个systemd服务单元文件:
sudo nano /etc/systemd/system/svnserve.service ```如下: ```ini [Unit] Description=Subversion protocol daemon After=network.target [Service] Type=forking User=www-data Group=www-data ExecStart=/usr/bin/svnserve -d -r /var/svn Restart=on-abort [Install] WantedBy=multi-user.target
保存后,启用并启动服务:
sudo systemctl daemon-reload sudo systemctl enable svnserve sudo systemctl start svnserve
可以通过netstat -tuln | grep 3690命令检查3690端口是否监听正常,客户端可以使用以下命令访问SVN仓库:
svn checkout svn://localhost/myproject
输入用户名和密码即可检出仓库,如果需要通过HTTP/SVN访问,可以安装Apache和mod_dav_svn模块,配置虚拟主机,这里不再详述。
在日常维护中,定期备份SVN仓库非常重要,可以使用svnadmin hotcopy命令创建仓库的热备份:
sudo svnadmin hotcopy /var/svn/myproject /var/backups/svn/myproject-backup-$(date +%Y%m%d)
可以设置定时任务(如cron)定期执行备份脚本,如果仓库损坏,可以使用svnadmin verify检查仓库完整性,通过svnadmin recover尝试修复。
以下是相关问答FAQs:
问题1:如何修改SVN仓库的默认端口?
答:修改SVN服务启动参数中的端口,使用-p选项指定端口号,例如启动时使用sudo svnserve -d -r /var/svn -p 3691,此时服务将监听3691端口,客户端访问时需使用新端口,如svn://localhost:3691/myproject,如果使用systemd服务,需修改ExecStart行,添加-p 3691参数后重启服务。
问题2:SVN仓库如何迁移到另一台Ubuntu服务器?
答:迁移步骤如下:1. 在源服务器上停止SVN服务(sudo systemctl stop svnserve);2. 使用svnadmin dump命令导出仓库数据,如sudo svnadmin dump /var/svn/myproject > myproject.dump;3. 将导出的dump文件传输到目标服务器(如通过scp);4. 在目标服务器上创建新仓库(sudo svnadmin create /var/svn/myproject);5. 使用svnadmin load命令导入数据,如sudo svnadmin load /var/svn/myproject < myproject.dump;6. 修改目标服务器的SVN配置文件(如svnserve.conf、passwd、authz)与源服务器一致;7. 启动目标服务器的SVN服务即可完成迁移。
