SVN基础
SVN(Subversion)是一款开源的版本控制系统,主要用于管理多人在开发过程中的文件变更,通过集中式仓库实现代码、文档等资源的版本追踪、回溯和协作,与Git等分布式系统不同,SVN依赖中央服务器存储所有版本数据,适合对权限管理、版本历史完整性要求较高的团队场景,在Linux环境下,SVN通过命令行工具和配置文件实现高效管理,本文将详细介绍其安装、配置及核心操作流程。

Linux环境下安装SVN
在Linux系统中,SVN的安装可通过包管理器快速完成,主流发行版支持如下:
Ubuntu/Debian系统
sudo apt update sudo apt install subversion -y
安装完成后,通过svn --version验证,若显示版本号则表示安装成功。
CentOS/RHEL系统
sudo yum install subversion -y # 或使用dnf(CentOS 8+) sudo dnf install subversion -y
源码编译安装(可选)
若需自定义功能,可从SVN官网下载源码,依赖apr和apr-util库,编译步骤如下:
wget https://archive.apache.org/dist/subversion/subversion-1.14.2.tar.gz tar -xzf subversion-1.14.2.tar.gz cd subversion-1.14.2 ./configure --prefix=/usr/local/svn make && sudo make install
安装后需将/usr/local/svn/bin加入PATH环境变量。
SVN服务器初始化配置
SVN服务器通过仓库(Repository)存储数据,需初始化仓库并配置访问权限。
创建仓库
sudo mkdir -p /var/svn/repos # 仓库存储目录 sudo svnadmin create /var/svn/repos/myproject # 创建名为myproject的仓库 sudo chown -R apache:apache /var/svn/repos # 若用Apache访问,需修改属主
配置仓库访问权限
仓库目录下的conf文件夹包含核心配置文件:
-
svnserve.conf:SVN服务主配置
sudo vim /var/svn/repos/myproject/conf/svnserve.conf
关键配置项:
[general] anon-access = none # 禁止匿名访问 auth-access = write # 认证用户可读写 password-db = passwd # 密码文件路径 authz-db = authz # 权限控制文件路径 realm = MyProject # 仓库认证域(自定义)
-
passwd:用户密码
sudo vim /var/svn/repos/myproject/conf/passwd
添加用户(格式:用户名 = 密码):

user1 = password1 user2 = password2
-
authz:权限控制
sudo vim /var/svn/repos/myproject/conf/authz
示例配置:
[/] # 根目录权限 user1 = rw # user1读写权限 user2 = r # user2只读权限
启动SVN服务
使用svnserve启动独立服务:
svnserve -d -r /var/svn/repos # -d后台运行,-r指定仓库根目录
检查服务状态:ps aux | grep svnserve,默认端口3690。
开机自启
创建systemd服务单元文件:
sudo vim /etc/systemd/system/svnserve.service ``` 如下: ```ini [Unit] Description=Subversion Repository Server After=network.target [Service] Type=forking User=apache Group=apache ExecStart=/usr/bin/svnserve -d -r /var/svn/repos Restart=on-failure [Install] WantedBy=multi-user.target
启用并启动:
sudo systemctl enable --now svnserve
SVN客户端核心操作
客户端通过svn命令与仓库交互,常用操作如下:
检出(Checkout)
将仓库代码下载到本地:
svn checkout svn://IP地址/myproject /path/to/local # 检出整个仓库 svn checkout svn://IP地址/myproject/trunk /path/to/local # 检出特定目录(如trunk)
更新(Update)
拉取服务器最新代码,避免冲突:
svn update
提交(Commit)
将本地修改上传至服务器:
svn commit -m "提交说明" # 必须填写提交日志
添加(Add)
将新文件/目录纳入版本控制:
svn add newfile.txt svn add newdir/
删除(Delete)
从版本控制中移除文件/目录(本地删除需手动执行rm):
svn delete file.txt svn commit -m "删除文件"
查看状态(Status)
显示本地文件与仓库的差异:

svn status # 状态码:A(添加)、M(修改)、D(删除)、?(未纳入版本控制)
查看日志(Log)
查看文件/目录的版本历史:
svn log file.txt svn log -v # 显示详细变更内容
比较差异(Diff)
对比本地文件与仓库版本或两个版本的差异:
svn diff file.txt # 对比本地与仓库最新版本 svn diff -r 10:20 file.txt # 对比版本10和20的差异
忽略文件(svn:ignore)
设置忽略规则,避免临时文件(如.gitignore)被纳入版本控制:
svn propset svn:ignore "*.tmp" . # 忽略当前目录下所有.tmp文件 svn commit -m "设置忽略规则"
分支与标签管理
SVN通过branches(分支)和tags(标签)实现功能隔离与版本标记。
创建分支
从主干(如trunk)复制分支:
svn copy svn://IP地址/myproject/trunk svn://IP地址/myproject/branches/feature1 -m "创建feature1分支"
切换分支
本地切换至分支进行开发:
svn switch svn://IP地址/myproject/branches/feature1 # 切换到feature1分支
合并分支
将分支代码合并回主干:
svn switch svn://IP地址/myproject/trunk # 切换回主干 svn merge svn://IP地址/myproject/branches/feature1 # 合并分支代码 svn commit -m "合并feature1分支"
创建标签
标记重要版本(如v1.0):
svn copy svn://IP地址/myproject/trunk svn://IP地址/myproject/tags/v1.0 -m "发布v1.0版本"
常见问题解决
冲突处理
多人修改同一文件时,提交可能触发冲突,解决步骤:
svn update # 拉取冲突标记(<<<<<<<、=======、>>>>>>>) # 手动修改冲突文件,删除标记 svn resolved file.txt # 标记冲突已解决 svn commit -m "解决冲突并提交"
权限不足
检查authz文件配置是否正确,确保用户名与权限匹配,或重启SVN服务:
sudo systemctl restart svnserve
连接超时
检查防火墙是否开放3690端口:
sudo firewall-cmd --add-port=3690/tcp --permanent # CentOS/RHEL sudo ufw allow 3690 # Ubuntu/Debian
小编总结
SVN作为经典的集中式版本控制系统,在Linux环境下通过命令行工具实现了高效的团队协作,本文从安装配置到日常操作、分支管理及问题排查,系统梳理了SVN的核心功能,帮助用户快速搭建和使用SVN服务,掌握这些基础操作,可显著提升代码版本管理的规范性和协作效率,为项目开发提供可靠保障。


















