在Linux系统中搭建SVN(Subversion)服务器是许多团队进行版本控制管理的常见需求,本文将详细介绍从环境准备到服务配置、权限管理及日常维护的完整流程,首先需要选择合适的Linux发行版,如CentOS、Ubuntu等,确保系统已更新至最新状态,并安装必要的依赖包,以CentOS 7为例,可通过yum update更新系统,然后安装subversion软件包,执行yum install -y subversion即可完成安装,安装完成后,使用svnserve --version命令验证安装是否成功,若显示版本信息则表明安装正常。

接下来需要创建SVN仓库,建议在/var/svn目录下创建仓库,执行mkdir -p /var/svn创建主目录,然后使用svnadmin create /var/svn/repo命令创建名为repo的仓库,创建完成后,进入/var/svn/repo/conf目录,会看到三个核心配置文件:svnserve.conf(主配置文件)、passwd(用户密码文件)和authz(权限控制文件),首先编辑svnserve.conf,确保取消以下行的注释并修改正确值:[general]部分下的anon-access = none(禁止匿名访问)、auth-access = write(授权用户可写)、password-db = passwd(指定密码文件)、authz-db = authz(指定权限文件),同时确保realm = My First Repository中的值与仓库名称对应。
然后配置用户密码,编辑passwd文件,格式为username = password,例如添加用户test密码为123456,即写入test = 123456,权限配置通过authz文件实现,可按用户或用户组进行精细化管理,在[groups]部分定义用户组developers = test1, test2,然后在[/](代表仓库根目录)下设置@developers = rw(用户组读写权限),* = r(其他用户只读权限),若需针对特定目录设置权限,可使用[project:/src]这样的格式指定路径。
配置完成后,需启动SVN服务并设置开机自启,使用svnserve -d -r /var/svn命令启动服务,其中-d表示后台运行,-r指定仓库根目录,为使服务开机自启,可创建系统服务文件,在/usr/lib/systemd/system/目录下创建svnserve.service如下:
[Unit]
Description=Subversion Protocol Daemon
After=network.target
[Service]
Type=forking
User=root
Group=root
ExecStart=/usr/bin/svnserve -d -r /var/svn
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
保存后执行systemctl daemon-reload、systemctl enable svnserve、systemctl start svnserve即可完成服务配置。

防火墙设置也是关键环节,需开放SVN默认端口3690,在CentOS中执行firewall-cmd --permanent --add-port=3690/tcp,然后firewall-cmd --reload重新加载防火墙规则,若使用SELinux,还需执行setsebool -P httpd_can_network_connect_db 1允许SVN服务通过防火墙。
客户端连接时,使用svn://服务器IP/repo地址即可访问,例如svn co svn://192.168.1.100/repo检出仓库,日常维护中,可通过svnadmin hotcopy /var/svn/repo /backup/svn-repo-backup创建热备份,或使用svnadmin dump /var/svn/repo > repo.dump导出备份,若需添加新用户,直接编辑passwd文件并重启SVN服务即可。
相关问答FAQs
Q1: 如何修改SVN仓库的默认端口?
A: 修改SVN服务启动参数中的端口,使用svnserve -d -r /var/svn --listen-port 8080命令将端口改为8080,或修改系统服务文件中的ExecStart行,添加--listen-port 端口号参数,然后重启服务,同时需在防火墙中开放新端口的访问权限。
Q2: SVN仓库出现损坏时如何修复?
A: 可使用svnadmin verify /var/svn/repo检查仓库完整性,若提示损坏,尝试通过svnadmin recover /var/svn/repo修复,修复完成后,建议使用备份恢复,或执行svnadmin dump /var/svn/repo | svnadmin create /var/svn/repo-new重建仓库,再将数据导入新仓库。

