在Ubuntu服务器上搭建SVN(Subversion)版本控制系统,可以帮助团队高效管理项目代码,实现版本控制、权限管理和历史追溯等功能,以下是详细的搭建步骤,包括环境准备、安装配置、仓库创建、用户管理及安全设置等内容。

环境准备
在开始搭建之前,确保服务器已安装Ubuntu操作系统(建议使用Ubuntu 20.04或22.04 LTS版本),并具备管理员权限(root用户或sudo权限),建议更新系统软件包列表并升级已安装的包,以确保系统处于最新状态,执行以下命令:
sudo apt update sudo apt upgrade -y
安装SVN服务
Ubuntu的软件源中默认包含SVN包,可通过apt直接安装,执行以下命令安装SVN服务端和客户端工具:
sudo apt install subversion -y
安装完成后,验证SVN是否成功安装,运行以下命令查看版本号:
svnserve --version
若显示版本信息,则表示安装成功。

创建SVN仓库
SVN仓库用于存储项目代码,建议为每个项目创建独立的仓库,以下是创建仓库的详细步骤:
-
创建仓库目录
在/var/svn目录下创建仓库,该目录位置可根据需求调整,执行以下命令:sudo mkdir -p /var/svn sudo svnadmin create /var/svn/project1
-
设置仓库目录权限
为确保SVN服务有读写权限,需将仓库目录的所有者设置为www-data(Apache默认用户)或当前用户,并设置适当的权限:sudo chown -R www-data:www-data /var/svn sudo chmod -R 775 /var/svn
-
配置仓库文件
进入仓库的conf目录,修改以下核心配置文件:
(图片来源网络,侵删)-
svnserve.conf:SVN主配置文件,定义仓库访问权限和匿名控制。
编辑文件内容如下:[general] anon-access = none # 禁止匿名访问 auth-access = write # 允许认证用户读写 password-db = passwd # 密码文件路径 authz-db = authz # 权限控制文件路径 realm = My SVN Repository # 仓库认证领域
-
passwd:用户密码文件,用于存储认证用户信息。
在文件末尾添加用户及密码(密码为明文,SVN会自动加密):[users] user1 = password1 user2 = password2
-
authz:权限控制文件,定义用户或用户组的访问权限。
示例配置如下:[groups] admin = user1 developers = user2 [/] @admin = rw * = r
-
启动SVN服务
SVN服务可通过svnserve命令启动,默认端口为3690,以下是启动步骤:
-
启动SVN服务
以守护进程方式启动SVN服务,并指定仓库根目录:sudo svnserve -d -r /var/svn
-
检查服务状态
使用ps命令确认SVN进程是否运行:ps aux | grep svnserve
-
开放防火墙端口
若服务器启用了UFW防火墙,需开放3690端口:sudo ufw allow 3690
SVN仓库访问测试
使用SVN客户端工具(如svn命令或TortoiseSVN)测试仓库访问,以命令行为例:
-
检出仓库
执行以下命令检出仓库到本地:svn checkout svn://服务器IP/project1
根据提示输入用户名和密码,若成功检出则表示配置正确。
-
提交测试文件
在本地仓库目录中创建测试文件并提交:echo "Test file" > test.txt svn add test.txt svn commit -m "Add test file"
若提交成功,说明SVN服务已正常运行。
配置SVN服务开机自启
为避免服务器重启后SVN服务停止,可通过创建systemd服务单元实现开机自启:
-
创建服务文件
在/etc/systemd/system/目录下创建svnserve.service文件:[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 ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure [Install] WantedBy=multi-user.target
-
启用并启动服务
执行以下命令加载服务配置并设置开机自启:sudo systemctl daemon-reload sudo systemctl enable svnserve sudo systemctl start svnserve
常见问题与优化
-
权限问题
若遇到权限错误,检查仓库目录的chown和chmod设置,确保用户对目录有读写权限。 -
SVN服务冲突
若多个仓库需独立运行,可通过svnserve的--listen-port参数指定不同端口,避免端口冲突。 -
日志配置
在svnserve.conf中添加log-file = /var/svn/svn.log可开启日志记录,便于排查问题。
相关问答FAQs
问题1:如何修改SVN默认端口?
解答:启动SVN服务时通过--listen-port参数指定新端口,例如sudo svnserve -d -r /var/svn --listen-port 3691,同时需在防火墙中开放新端口,并确保客户端连接时使用新端口号(如svn://服务器IP:3691/project1)。
问题2:如何为SVN仓库添加用户组权限?
解答:在authz文件中使用[groups]定义用户组,例如[groups]下添加devs = user1,user2,然后在权限规则中通过@devs赋予权限,如[/src] @devs = rw,修改后需重启SVN服务或重新客户端连接使配置生效。
