搭建一个 SVN 仓库主要涉及两个部分:安装 SVN 服务器软件 和 创建仓库本身。以下是详细的步骤,适用于 Windows 和 Linux 系统:
🧱 核心步骤概览
安装 SVN 服务器软件
创建仓库
配置访问权限
启动服务
客户端访问
🪟 一、Windows 系统搭建 (推荐使用 VisualSVN Server)
这是最简单快捷的方式,适合个人或小型团队。
下载并安装 VisualSVN Server
访问官方网站: https://www.visualsvn.com/server/
下载免费的 VisualSVN Server (通常选择最新的 Community 版本)。
运行安装程序,按照提示进行安装。安装过程中需要注意:
安装位置: 选择合适的路径存放仓库文件(建议空间充足)。
仓库位置: 指定仓库根目录(Repositories)。
服务器端口: 默认是 80 (HTTP) 和 443 (HTTPS)。如果端口冲突,可以修改(例如改成 8080/8443)。
认证方式: 选择 Subversion authentication 或 Windows authentication。对于独立服务器,Subversion authentication 更常用。
使用默认选项创建初始仓库和管理员账户通常很方便。
创建仓库
安装完成后,启动 VisualSVN Server Manager (管理控制台)。
在左侧树形菜单中,右键点击 Repositories。
选择 Create New Repository...。
输入仓库名称(例如 my_project)。
选择仓库结构:
Empty repository:完全空仓库。
Single-project repository (with trunk, branches, tags):推荐!创建标准的 trunk, branches, tags 目录结构。
Multi-project repository (with projects root):创建一个 projects 目录,适合存放多个项目。
选择仓库访问权限:
All Subversion users have Read/Write access:所有 SVN 用户可读写(初期测试方便)。
Customize permissions:自定义权限(生产环境推荐)。
点击 Create。
配置访问权限 (可选但推荐)
在 VisualSVN Server Manager 中,右键点击你刚创建的仓库。
选择 Properties。
切换到 Security 标签页。
在这里可以添加/删除用户或用户组,并为它们分配权限:
No Access: 无权限。
Read Only: 只能读取。
Read / Write: 可读取和提交。
管理用户/用户组:在左侧树形菜单的 Users 和 Groups 节点上右键创建和管理。
获取仓库 URL
在 VisualSVN Server Manager 中,右键点击你的仓库。
选择 Copy URL to Clipboard。
仓库 URL 格式通常是:https://<服务器名或IP地址>:<端口>/svn/<仓库名> 或 http://<服务器名或IP地址>:<端口>/svn/<仓库名> (如果使用 HTTPS)。
启动/停止服务
VisualSVN Server 安装后会作为 Windows 服务自动启动。
可以在 VisualSVN Server Manager 的状态栏查看服务状态,或在 Windows 服务管理器中管理 VisualSVN Server 服务。
🐧 二、Linux 系统搭建 (常用 Apache + mod_dav_svn)
这是更灵活、适合生产环境的方式,利用 Apache HTTP Server 提供 WebDAV/HTTP(S) 访问。
安装必要软件包 (以 Ubuntu/Debian 为例)
sudo apt update
sudo apt install subversion apache2 libapache2-mod-svn
subversion: SVN 客户端和服务器工具。
apache2: Apache HTTP Server。
libapache2-mod-svn: Apache 的 SVN 模块 (mod_dav_svn, mod_authz_svn)。
启用必要的 Apache 模块
sudo a2enmod dav
sudo a2enmod dav_svn
sudo a2enmod authz_svn # 如果需要基于路径的权限控制,强烈推荐启用
sudo systemctl restart apache2
创建 SVN 仓库目录
sudo mkdir -p /var/www/svn # 选择一个合适的父目录,如 /opt/svn 或 /srv/svn 也可以
创建仓库
sudo svnadmin create /var/www/svn/my_project
这会在 /var/www/svn/my_project 下创建仓库结构。
设置仓库目录权限
让 Apache 用户(通常是 www-data)拥有仓库目录的所有权:
sudo chown -R www-data:www-data /var/www/svn/my_project
设置合适的权限:
sudo chmod -R 770 /var/www/svn/my_project # 允许 www-data 组读写执行
# 或者更精细的权限控制
配置 Apache 访问仓库
创建或编辑 Apache 的 SVN 配置文件:
sudo nano /etc/apache2/sites-available/svn.conf # 或修改已有的 default-ssl.conf 或新建一个
在配置文件中添加类似以下内容:
# 加载 SVN 模块 (通常已由 a2enmod 完成,这里确保)
LoadModule dav_svn_module /usr/lib/apache2/modules/mod_dav_svn.so
LoadModule authz_svn_module /usr/lib/apache2/modules/mod_authz_svn.so
DAV svn
SVNParentPath /var/www/svn # 指向仓库的父目录
# 认证配置 (基本认证)
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /etc/subversion/passwd # 用户密码文件存放位置
Require valid-user
# 授权配置 (可选但推荐)
AuthzSVNAccessFile /etc/subversion/authz # 权限控制文件
关键配置项说明:
SVNParentPath /var/www/svn: 指定所有仓库的父目录。Apache 会自动将
AuthType Basic: 使用 HTTP 基本认证。
AuthName: 认证域提示。
AuthUserFile: 存放用户名和加密密码的文件路径。
Require valid-user: 要求有效用户才能访问。
AuthzSVNAccessFile: 定义更细粒度权限(基于路径、用户/组)的文件路径。
创建用户密码文件
sudo htpasswd -c /etc/subversion/passwd username1 # -c 选项只在第一次创建文件时使用
sudo htpasswd /etc/subversion/passwd username2 # 后续添加用户去掉 -c
系统会提示你为每个用户设置密码。
(可选但推荐) 创建和配置权限文件 (authz)
创建文件:
sudo nano /etc/subversion/authz
编辑内容示例:
[groups]
developers = user1, user2
admins = user3
[/] # 根目录,指所有仓库
* = r # 所有人只读 (匿名访问,可选)
@developers = rw # developers 组读写
[my_project:/] # 指定仓库 my_project 的根目录
@developers = rw
@admins = rw
user4 = r # 单独用户 user4 只读
[my_project:/secret] # my_project 仓库下的 secret 目录
@admins = rw
* = # 其他人无权限 (禁止访问)
保存文件,并确保 Apache 用户 (www-data) 有读取权限。
启用配置并重启 Apache
sudo a2ensite svn.conf # 如果你新建了 svn.conf 文件
sudo systemctl reload apache2 # 或 sudo systemctl restart apache2
获取仓库 URL
仓库 URL 格式通常是:http://<服务器名或IP地址>/svn/my_project 或 https://<服务器名或IP地址>/svn/my_project (如果配置了 SSL)。
🧪 三、测试与使用仓库
安装 SVN 客户端
Windows: 推荐 TortoiseSVN (集成到文件管理器)。
Linux: 安装 subversion 包 (sudo apt install subversion) 使用命令行 svn。
macOS: 通常自带 svn 命令行,或使用 Cornerstone 等图形客户端。
检出仓库 (Checkout)
命令行:
svn checkout http://your-server/svn/my_project my_project_working_copy
(会提示输入在 passwd 文件中设置的用户名和密码)
TortoiseSVN: 在空白文件夹右键 -> SVN Checkout...,输入仓库 URL 和目标路径。
添加文件、提交更改 (Commit)
在工作拷贝中添加、修改或删除文件。
命令行:
svn add filename
svn commit -m "提交说明"
TortoiseSVN: 在工作拷贝内右键 -> SVN Commit...,选择要提交的文件,填写日志信息。
📦 四、备份仓库 (重要!)
使用 svnadmin dump:
svnadmin dump /var/www/svn/my_project > my_project_backup_$(date +%Y%m%d).svndump
将生成的 .svndump 文件安全存储。
恢复:svnadmin load /path/to/new/repository < my_project_backup.svndump
使用 svnadmin hotcopy:
svnadmin hotcopy /var/www/svn/my_project /path/to/backup/my_project_$(date +%Y%m%d)
创建仓库的完整热拷贝(在运行时也可以进行,但最好在低负载时操作)。这个拷贝本身就是一个有效的仓库。
文件系统备份: 在 SVN 服务停止时,直接备份整个仓库目录 (/var/www/svn/my_project)。不推荐在服务运行时直接复制文件系统。
📌 总结
Windows (简便): 安装 VisualSVN Server -> 创建仓库 -> 配置用户权限 -> 获取 URL -> 客户端检出使用。
Linux (灵活/生产): 安装 subversion, apache2, libapache2-mod-svn -> 创建仓库 -> 配置 Apache (svn.conf) -> 创建用户 (htpasswd) -> (可选)配置细粒度权限 (authz) -> 重启 Apache -> 客户端检出使用。
务必进行仓库备份!
权限配置 对于多用户协作至关重要,请根据团队结构认真规划。
选择哪种方式取决于你的操作系统偏好、技术熟悉度和团队规模需求。VisualSVN Server 在 Windows 上提供了极佳的开箱即用体验,而 Apache 方案在 Linux 上更标准且功能强大灵活。💻🔧