在Linux服务器上搭建SVN(Subversion)版本控制系统,可以有效管理项目代码和文档,实现版本控制、协作开发和历史追溯,本文将详细介绍在Linux服务器上安装、配置和使用SVN的完整步骤,包括环境准备、安装配置、仓库创建、权限管理以及访问测试等内容。

环境准备
在开始搭建SVN之前,需要确保服务器满足以下基本要求:
- 操作系统:推荐使用CentOS、Ubuntu等主流Linux发行版,本文以CentOS 7为例进行说明。
- 服务器配置:建议至少1GB内存、10GB可用存储空间,根据项目需求可适当调整。
- 网络环境:确保服务器可以外网访问(如需远程访问),或通过内网IP进行局域网访问。
- root权限:需要管理员权限进行软件安装和配置修改。
安装SVN服务
更新系统软件包
更新系统的软件包列表和已安装的软件包,确保环境最新:
sudo yum update -y # CentOS/RHEL系统 # 或 sudo apt update && sudo apt upgrade -y # Ubuntu/Debian系统
安装SVN服务
使用包管理器安装SVN服务,以CentOS为例:
sudo yum install subversion -y
安装完成后,检查SVN版本以确认安装成功:

svnserve --version
创建SVN仓库目录
SVN仓库通常存放在/var/svn目录下,创建该目录并设置权限:
sudo mkdir -p /var/svn sudo chown -R apache:apache /var/svn # 如果使用Apache访问,需授权apache用户 sudo chmod -R 755 /var/svn
创建SVN仓库
使用svnadmin命令创建新的仓库,创建一个名为project_repo的仓库:
sudo svnadmin create /var/svn/project_repo
创建完成后,仓库目录结构如下:
/var/svn/project_repo/
├── conf/ # 配置文件目录
│ ├── svnserve.conf # SVN服务主配置文件
│ ├── passwd # 用户密码文件
│ └── authz # 权限控制文件
├── db/ # 仓库数据目录
├── hooks/ # 钩子脚本目录
├── format # 仓库版本格式文件
└── README.txt # 仓库说明文件
配置SVN仓库
配置svnserve.conf
编辑仓库的svnserve.conf文件,启用匿名访问和认证模式:

sudo nano /var/svn/project_repo/conf/svnserve.conf
[general] anon-access = none # 禁止匿名访问 auth-access = write # 允许认证用户读写 password-db = passwd # 密码文件路径 authz-db = authz # 权限控制文件路径 realm = My SVN Repository # 仓库认证域名称
保存并退出(Ctrl+O,Ctrl+X)。
配置用户密码
编辑passwd文件,添加SVN用户和密码:
sudo nano /var/svn/project_repo/conf/passwd
添加用户,格式为用户名 = 密码,
[users] admin = 123456 user1 = password1 user2 = password2
配置权限控制
编辑authz文件,设置用户和组的访问权限:
sudo nano /var/svn/project_repo/conf/authz
示例配置:
[groups] admin_group = admin dev_group = user1, user2 [/] @admin_group = rw # admin组对根目录有读写权限 * = r # 其他用户只读 [/project_repo/trunk] @dev_group = rw # dev组对trunk目录有读写权限
启动SVN服务
使用独立模式启动SVN服务
SVN服务可通过svnserve命令以独立模式启动,指定仓库目录和监听端口(默认3690):
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=apache Group=apache ExecStart=/usr/bin/svnserve -d -r /var/svn Restart=on-abort [Install] WantedBy=multi-user.target
启动服务并设置开机自启:
sudo systemctl daemon-reload sudo systemctl start svnserve sudo systemctl enable svnserve
防火墙配置
如果需要远程访问,需开放SVN默认端口3690:
sudo firewall-cmd --permanent --add-port=3690/tcp sudo firewall-cmd --reload
访问SVN仓库
检出仓库
使用SVN客户端检出仓库到本地,在本地机器上执行:
svn checkout svn://服务器IP/project_repo
输入配置的用户名和密码后,即可完成仓库检出。
提交和更新
在本地仓库中修改文件后,提交到服务器:
svn commit -m "提交说明"
更新服务器最新代码到本地:
svn update
使用Apache访问SVN(可选)
如果需要通过HTTP/S访问SVN,可集成Apache服务,以下是简要步骤:
- 安装Apache和SVN模块:
sudo yum install httpd mod_dav_svn -y
- 创建SVN虚拟主机配置:
sudo nano /etc/httpd/conf.d/svn.conf
<Location /svn> DAV svn SVNParentPath /var/svn AuthType Basic AuthName "SVN Repository" AuthUserFile /etc/svn-users Require valid-user </Location>
- 创建用户密码文件并重启Apache:
sudo htpasswd -c /etc/svn-users admin sudo systemctl restart httpd
常见问题及解决
-
问题:
svnserve启动失败,提示“Address already in use”。 解决:检查端口3690是否被占用,使用netstat -tuln | grep 3690查看,并修改svnserve命令中的端口号。 -
问题:用户无法访问仓库,提示“Authorization failed”。 解决:检查
authz文件配置是否正确,确保用户名和组名拼写无误,路径匹配准确。
相关问答FAQs
Q1: 如何修改SVN仓库的认证域名称?
A1: 编辑仓库的svnserve.conf文件,修改realm参数的值,例如将realm = My SVN Repository改为realm = New Project Repo,然后重启svnserve服务使配置生效。
Q2: 如何备份SVN仓库?
A2: 使用svnadmin hotcopy命令创建仓库的热备份,svnadmin hotcopy /var/svn/project_repo /var/svn/backup/project_repo_backup --clean-logs,定期备份可避免数据丢失,建议结合定时任务(如cron)实现自动化备份。
