# Linux中怎么搭建SVN ## 一、SVN简介与搭建准备 ### 1.1 什么是SVN Apache Subversion(简称SVN)是一个开源的版本控制系统,采用集中式架构管理代码和文件版本。与Git不同,SVN通过单一的中央仓库进行版本管理,适合需要严格权限控制的团队协作场景。 ### 1.2 基础概念 - **Repository(仓库)**:存储所有版本数据的中央目录 - **Working Copy(工作副本)**:用户本地的工作目录 - **Commit(提交)**:将本地修改上传到仓库 - **Update(更新)**:将仓库最新版本同步到本地 ### 1.3 环境准备 在开始前请确保: 1. 已安装Linux系统(本文以Ubuntu 20.04/CentOS 7为例) 2. 具有sudo权限的用户账户 3. 系统已联网可安装软件包 ```bash # 更新系统软件包(Ubuntu/Debian) sudo apt update && sudo apt upgrade -y # CentOS/RHEL sudo yum update -y
不同Linux发行版的安装命令:
# Ubuntu/Debian sudo apt install subversion -y # CentOS/RHEL sudo yum install subversion -y
验证安装:
svn --version
建议将仓库放在专用目录:
sudo mkdir -p /var/svn/repositories sudo chown -R www-data:www-data /var/svn/repositories # Ubuntu sudo chown -R apache:apache /var/svn/repositories # CentOS
创建示例项目仓库:
sudo svnadmin create /var/svn/repositories/myproject
目录结构说明:
conf/ # 配置文件目录 ├── authz # 权限控制文件 ├── passwd # 用户密码文件 └── svnserve.conf # 服务主配置 db/ # 版本数据库 hooks/ # 钩子脚本目录
编辑主配置文件:
sudo nano /var/svn/repositories/myproject/conf/svnserve.conf
修改以下关键参数:
[general] anon-access = none # 禁止匿名访问 auth-access = write # 认证用户可写 password-db = passwd # 指定密码文件 authz-db = authz # 指定权限文件 realm = MyProject SVN # 认证域名称
编辑passwd文件添加用户:
sudo nano /var/svn/repositories/myproject/conf/passwd
添加格式:
[users] user1 = password123 user2 = abc@456 developer = dev@2023
配置authz文件实现精细权限:
sudo nano /var/svn/repositories/myproject/conf/authz
示例配置:
[groups] admin = user1 dev_team = user2,developer [/] @admin = rw * = [/trunk] @dev_team = rw [/branches/dev] developer = rw
临时启动服务(测试用):
sudo svnserve -d -r /var/svn/repositories --listen-port 3690
参数说明: - -d
:守护进程模式 - -r
:指定根目录 - --listen-port
:指定端口(默认3690)
创建systemd服务(推荐):
sudo nano /etc/systemd/system/svnserve.service
服务文件内容:
[Unit] Description=Subversion Daemon After=network.target [Service] Type=forking ExecStart=/usr/bin/svnserve -d -r /var/svn/repositories --listen-port 3690 User=www-data # Ubuntu使用www-data Group=www-data Restart=on-failure [Install] WantedBy=multi-user.target
启用服务:
sudo systemctl daemon-reload sudo systemctl start svnserve sudo systemctl enable svnserve
验证状态:
systemctl status svnserve netstat -tulnp | grep 3690
安装客户端工具:
sudo apt install subversion # Ubuntu sudo yum install subversion # CentOS
检出仓库:
svn checkout svn://your_server_ip/myproject --username user1
推荐使用TortoiseSVN: 1. 下载安装TortoiseSVN 2. 右键菜单选择”SVN Checkout” 3. 输入URL:svn://your_server_ip/myproject
4. 输入用户名密码
连接被拒绝: - 检查防火墙是否放行3690端口 - 确认svnserve服务正在运行
认证失败: - 检查passwd文件中的用户名密码 - 确认authz文件权限配置
通过Apache实现HTTPS访问:
sudo apt install apache2 libapache2-mod-svn # Ubuntu sudo yum install httpd mod_dav_svn # CentOS
sudo nano /etc/apache2/sites-available/svn.conf
示例配置:
<VirtualHost *:443> ServerName svn.yourdomain.com SSLEngine on SSLCertificateFile /path/to/cert.pem SSLCertificateKeyFile /path/to/key.pem <Location /svn> DAV svn SVNParentPath /var/svn/repositories AuthType Basic AuthName "SVN Repository" AuthUserFile /etc/apache2/svn-auth-file Require valid-user </Location> </VirtualHost>
推荐备份方法:
# 完整备份 svnadmin dump /var/svn/repositories/myproject > myproject_backup.dump # 增量备份 svnadmin dump /var/svn/repositories/myproject -r 100:200 > incr_backup.dump # 热备份脚本 #!/bin/bash svnadmin hotcopy /var/svn/repositories/myproject /backup/svn/myproject-$(date +%F)
实现提交时自动发送邮件(post-commit):
sudo nano /var/svn/repositories/myproject/hooks/post-commit
脚本内容:
#!/bin/sh REPOS="$1" REV="$2" /usr/bin/svnlook log -r $REV $REPOS | \ mail -s "New SVN Commit (Rev $REV)" team@example.com
记得添加执行权限:
sudo chmod +x /var/svn/repositories/myproject/hooks/post-commit
# 查看仓库信息 svnlook info /var/svn/repositories/myproject # 查看最近提交 svnlook log /var/svn/repositories/myproject # 修复仓库 svnadmin verify /var/svn/repositories/myproject
配置logrotate:
sudo nano /etc/logrotate.d/svnserve
添加内容:
/var/log/svnserve.log { weekly missingok rotate 4 compress delaycompress notifempty create 640 www-data www-data postrotate systemctl restart svnserve >/dev/null 2>&1 || true endscript }
大型仓库启用FSFS缓存:
sudo nano /var/svn/repositories/myproject/conf/svnserve.conf
添加:
[cache] memory-cache-size = 16M
定期清理:
svnadmin cleanup /var/svn/repositories/myproject
本文详细介绍了在Linux系统上搭建SVN服务的完整流程,包括: - 服务端安装与配置 - 用户权限精细管理 - 多种访问方式实现 - 高级功能与维护技巧
通过合理配置,SVN可以成为中小团队高效的版本控制解决方案。对于更复杂的场景,建议考虑结合Apache实现Web访问,或定期进行仓库备份确保数据安全。
注意:实际部署时请根据网络环境和安全要求调整配置,生产环境建议启用HTTPS加密传输。 “`
这篇文章共计约2500字,采用Markdown格式编写,包含: 1. 多级标题结构 2. 代码块标记 3. 命令行操作示例 4. 配置片段 5. 注意事项提示
内容覆盖从基础安装到高级配置的完整流程,适合作为技术文档使用。可根据实际环境调整具体路径和参数。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。