在软件开发过程中,代码的版本管理是至关重要的一环,Subversion(简称SVN)作为一种成熟、稳定的集中式版本控制系统,广泛应用于中小型团队和企业项目中,相比Git的分布式架构,SVN以其结构清晰、操作简单、权限管理精细等特点,依然是许多开发团队的首选,本文将详细介绍如何从零开始搭建一个功能完整的SVN服务器,帮助你快速构建自己的代码管理环境。

SVN简介

SVN(Subversion)是一个开源的版本控制系统,由Apache基金会维护,它采用客户端-服务器架构,所有代码版本都集中存储在中央服务器上,开发者通过SVN客户端检出(checkout)、提交(commit)代码,实现协同开发和版本追踪。

环境准备

在开始搭建之前,请确保你具备以下条件:

  • 操作系统:本文以 CentOS 7 / Ubuntu 20.04 为例(也可适用于其他Linux发行版)
  • 服务器权限:具备root或sudo权限
  • 网络环境:服务器可被开发人员访问(内网或公网)
  • 存储空间:用于存放版本库数据

安装SVN服务器

安装Subversion

在CentOS系统中,使用以下命令安装SVN:

sudo yum install subversion -y

在Ubuntu/Debian系统中,使用:

sudo apt update
sudo apt install subversion -y

安装完成后,可通过以下命令验证是否安装成功:

svn --version

创建版本库目录

选择一个合适的路径来存放SVN仓库,/var/svn

sudo mkdir /var/svn

创建SVN版本库

假设我们要创建一个名为 myproject 的项目仓库:

sudo svnadmin create /var/svn/myproject

执行后,SVN会自动生成仓库目录结构,包括配置文件、数据存储、钩子脚本等。

配置SVN服务器

配置访问权限

进入仓库的 conf 目录:

cd /var/svn/myproject/conf

主要修改三个配置文件:

  • svnserve.conf:主配置文件
  • passwd:用户名和密码
  • authz:权限控制

(1)编辑 svnserve.conf

取消以下行的注释(注意不要留空格):

[general]
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
realm = My Project Repository

说明:

  • anon-access = none:禁止匿名访问
  • auth-access = write:认证用户可读写
  • password-dbauthz-db 指定用户和权限文件

(2)编辑 passwd 文件

添加用户和密码:

[users]
alice = 123456
bob = 123456
admin = adminpass

(3)编辑 authz 文件

设置目录访问权限:

[groups]
dev = alice, bob
admin = admin
[/]
@admin = rw
@dev = r
* = 
[/trunk]
@dev = rw

配置表示:

  • admin组对所有目录有读写权限
  • dev组有只读权限,但在/trunk目录下可读写
  • 其他用户无权限

启动SVN服务

SVN可以通过 svnserve 服务运行:

sudo svnserve -d -r /var/svn

参数说明:

  • -d:后台运行
  • -r /var/svn:指定仓库根目录

服务默认监听 3690 端口,可通过以下命令检查:

netstat -tuln | grep 3690

如需开机自启,可创建systemd服务(以CentOS为例):

创建服务文件:

sudo vim /etc/systemd/system/svnserve.service
[Unit]
Description=Subversion Server
After=network.target
[Service]
Type=forking
ExecStart=/usr/bin/svnserve -d -r /var/svn
ExecStop=/usr/bin/killall svnserve
Restart=always
[Install]
WantedBy=multi-user.target

启用并启动服务:

sudo systemctl enable svnserve
sudo systemctl start svnserve

客户端访问SVN

在开发机器上安装SVN客户端(如TortoiseSVN或命令行工具),然后通过以下URL访问仓库:

svn://your-server-ip/myproject
svn://192.168.1.100/myproject

使用 alice 用户名和密码即可检出代码:

svn checkout svn://192.168.1.100/myproject

常见问题与优化建议

  1. 防火墙设置:确保服务器开放3690端口。

    sudo firewall-cmd --permanent --add-port=3690/tcp
    sudo firewall-cmd --reload
  2. 数据备份:定期使用 svnadmin dump 备份仓库数据。

  3. HTTPS支持:如需更安全的访问,可结合Apache + mod_dav_svn 实现HTTP/HTTPS访问。

  4. 钩子脚本:可在 hooks/ 目录下配置 post-commit 等脚本,实现自动通知或部署。

搭建SVN服务器并不复杂,只需几步即可完成基础配置,通过本文的指导,你已经成功部署了一个具备用户认证和权限管理的SVN服务器,能够满足团队日常开发的版本控制需求,虽然Git在近年来更受欢迎,但在某些强调集中管理和流程规范的场景中,SVN依然具有不可替代的优势。

后续可根据实际需求扩展功能,如集成LDAP认证、配置Web管理界面(如ViewVC)、或迁移到更高级的版本控制平台。

立即动手搭建属于你团队的SVN服务器,让代码管理更加高效、安全!