SVN(Subversion)是一款开源的版本控制系统,广泛应用于团队协作开发中,用于管理文件和目录的变更历史,安装SVN服务器是搭建版本控制环境的基础步骤,本文将详细介绍在Linux和Windows系统下安装SVN服务器的完整流程,包括环境准备、依赖安装、服务配置、权限管理等内容,帮助用户顺利完成搭建。
环境准备与依赖安装
在安装SVN服务器前,需根据操作系统选择合适的安装方式,并确保满足基本环境要求,SVN支持Linux(如CentOS、Ubuntu)和Windows系统,本文以主流的Linux(CentOS 7)和Windows 10为例说明。
Linux系统环境准备
以CentOS 7为例,首先需要更新系统软件包并安装必要的编译依赖(若通过源码编译安装),若使用yum或apt直接安装二进制包,则无需编译依赖。
依赖安装(源码编译时需要):
yum update -y yum install -y gcc make zlib-devel openssl-devel sqlite-devel autoconf
直接安装二进制包(推荐):
CentOS系统可通过yum安装,Ubuntu系统则使用apt:
# CentOS yum install -y subversion # Ubuntu apt update && apt install -y subversion
安装完成后,验证SVN版本:
svnserve --version
Windows系统环境准备
Windows系统需从SVN官方下载二进制安装包(地址:https://subversion.apache.org/packages.html),选择“Win32 Service binaries(32-bit)”或“Win64 Service binaries(64-bit)”下载,下载后双击安装,按照向导完成安装,安装过程中可选择“将SVN命令行添加到系统PATH”以便后续使用命令。
创建SVN仓库
SVN仓库是存储版本数据的目录,安装SVN服务后需创建至少一个仓库,仓库创建后,会自动生成特定的目录结构,用于存储文件、权限配置等信息。
仓库创建命令
使用svnadmin
命令创建仓库,Linux下建议创建在/var/svn
目录下,Windows下可创建在D:svnrepos
等路径:
# 创建仓库目录(Linux) mkdir -p /var/svn svnadmin create /var/svn/myrepo # Windows(需以管理员身份打开命令提示符) mkdir D:svnrepos svnadmin create D:svnreposmyrepo
仓库目录结构说明
创建完成后,仓库目录下会生成以下关键文件和文件夹(以myrepo
为例):
conf/
:存放配置文件(svnserve.conf
、passwd
、authz
)。db/
:存储版本数据文件(核心数据目录)。hooks/
:存放钩子脚本(用于触发特定操作,如提交前检查)。locks/
:存放锁文件(用于控制并发访问)。
配置SVN服务器
SVN服务器的核心配置集中在conf/
目录下的三个文件中,需分别配置服务参数、用户密码和路径权限。
配置svnserve.conf(服务参数)
该文件用于配置SVN服务的全局参数,如监听端口、认证方式、仓库路径等,编辑/var/svn/myrepo/conf/svnserve.conf
(Windows路径为D:svnreposmyrepoconfsvnserve.conf
),关键配置如下:
[general] # 匿名访问权限(none表示禁止,read表示只读,write表示读写) anon-access = none # 认证用户权限(通常为read或write) auth-access = write # 密码文件路径(相对于conf目录) password-db = passwd # 权限配置文件路径 authz-db = authz # 服务监听端口(默认3690,可修改) # listen-port = 3690
注意事项:
- 配置文件中顶层的
[general]
不能省略,且参数前不能有空格。 - 若需允许多个仓库共用同一套用户和权限,可将
password-db
和authz-db
指向绝对路径(如password-db = /var/svn/passwd
)。
配置passwd(用户密码)
passwd
文件用于定义SVN用户的明文密码,格式为“用户名=密码”,编辑/var/svn/myrepo/conf/passwd
,添加用户:
[users] # 用户名 = 密码 admin = 123456 developer = abc123 tester = test456
说明:
- 用户名区分大小写,密码为明文存储(生产环境建议结合系统加密或LDAP认证)。
- 若需多仓库共用用户,可在统一passwd文件中添加用户,并在各仓库的
svnserve.conf
中指向该文件。
配置authz(路径权限)
authz
文件用于控制用户对仓库中不同路径的访问权限,支持基于用户和用户组的精细化管理,编辑/var/svn/myrepo/conf/authz
,示例配置如下:
[groups] # 定义用户组,格式:组名 = 用户1,用户2 admin_group = admin dev_group = developer, tester # 根目录权限(/表示仓库根目录) [/] @admin_group = rw # admin组成员对根目录有读写权限 * = r # 其他用户只读 # 特定路径权限 [/trunk] @dev_group = rw # dev组成员对trunk目录有读写权限 [/branches] @dev_group = rw [/tags] @admin_group = rw # 仅admin组成员对tags目录有读写权限
权限说明:
r
:读权限(检出、更新)。w
:写权限(提交、添加、删除)。rw
:读写权限。- 表示所有用户。
- 路径前缀表示仓库根目录,若配置
[project:/path]
则表示指定仓库的子路径。
启动SVN服务
配置完成后,需启动SVN服务并设置开机自启,确保服务持久运行。
Linux系统启动服务
命令行临时启动
# 后台启动,指定仓库路径 svnserve -d -r /var/svn # -d:后台运行;-r:指定仓库根目录(多个仓库时指向上级目录)
通过systemd管理服务(推荐)
创建SVN服务文件:
vi /etc/systemd/system/svnserve.service ```如下: ```ini [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 start svnserve systemctl enable svnserve
检查服务状态:
systemctl status svnserve netstat -tuln | grep 3690 # 检查3690端口是否监听
Windows系统启动服务
通过命令行启动
以管理员身份打开命令提示符,执行:
svnserve --service -d -r D:svnrepos
通过Windows服务管理
- 打开“服务”(services.msc),找到“Subversion Server”服务(若安装时已注册)。
- 右键选择“启动”,并设置“启动类型”为“自动”。
- 若服务未注册,可通过命令注册:
sc create SVNServer binPath= ""D:Program FilesSubversionbinsvnserve.exe" --service -d -r D:svnrepos" DisplayName= "Subversion Server" start= auto
防火墙与客户端连接
防火墙配置
Linux系统需开放3690端口(SVN默认端口):
# CentOS 7 firewall-cmd --permanent --add-port=3690/tcp firewall-cmd --reload
Windows系统需在“高级安全Windows防火墙”中入站规则允许3690端口。
客户端连接
使用SVN客户端(如TortoiseSVN、命令行)连接服务器,以命令行为例:
# 检出仓库(格式:svn://服务器IP/仓库名) svn checkout svn://192.168.1.100/myrepo D:workspacemyrepo # 提交代码(需先配置用户名,svn checkout时输入用户名和密码) svn commit -m "Initial commit"
若服务器非默认端口或使用SSL,需指定端口:
svn checkout svn://192.168.1.100:8080/myrepo
常见问题排查
- 服务启动失败:检查端口是否被占用(
netstat -tuln | grep 3690
),确认仓库路径是否存在,配置文件语法是否正确(可通过svnlook youngest /var/svn/myrepo
验证仓库是否可读)。 - 客户端连接超时:检查防火墙是否开放3690端口,SVN服务是否正常运行,服务器IP是否可访问。
相关问答FAQs
Q1: SVN服务器安装后,客户端提示“认证失败”,可能的原因及解决方法?
A: 可能原因包括:
- 用户名或密码错误(检查
passwd
文件中的用户名密码是否正确)。 - 权限配置错误(检查
authz
文件中用户或用户组的权限是否包含r
或w
)。 svnserve.conf
中anon-access
或auth-access
配置不当(确保auth-access = write
)。
解决方法:使用svn --username admin --password 123456 checkout
命令指定用户密码连接,查看具体错误信息,并逐项检查配置文件。
Q2: 如何备份和恢复SVN仓库?
A: 备份SVN仓库需使用svnadmin hotcopy
命令(热备份数据,不影响服务运行),恢复则通过svnadmin load
导入备份文件。
- 备份:
# 停止SVN服务(可选,热备份可不停止) systemctl stop svnserve # 执行热备份 svnadmin hotcopy /var/svn/myrepo /var/svn/backup/myrepo_backup # 恢复服务 systemctl start svnserve
- 恢复:
# 停止SVN服务 systemctl stop svnserve # 清空或重命名原仓库 mv /var/svn/myrepo /var/svn/myrepo_old # 创建新仓库 svnadmin create /var/svn/myrepo # 导入备份 svnadmin load /var/svn/myrepo < /var/svn/backup/myrepo_backup/dumpfile # 恢复服务 systemctl start svnserve
备份文件也可通过
svnadmin dump
生成(增量备份),但hotcopy
更简单直接,适合全量备份。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/16113.html