核心迁移思路
迁移的核心思想是:安全、完整、无缝地将旧服务器的“数据”和“用户认证”信息迁移到新服务器。

- 数据迁移:将版本库(
repository)文件从旧服务器复制到新服务器。 - 用户认证迁移:将旧服务器的用户名和密码/权限配置迁移到新服务器,这取决于你使用的认证方式(SVN自带的
svnserve或 Apache HTTP Server)。
迁移前准备
确定迁移方案
根据你的当前 SVN 服务器架构,选择合适的迁移路径:
| 当前服务器环境 | 推荐迁移方案 | 说明 |
|---|---|---|
| SVN + svnserve (独立服务) | 直接文件复制 | 最简单、最直接的方法,直接复制版本库文件,并在新服务器上用相同的配置启动 svnserve。 |
| SVN + Apache (HTTP/S 协议) | 文件复制 + Apache 配置同步 | 除了复制版本库,还需要将 Apache 的配置文件(如 httpd.conf, authz, htpasswd)同步到新服务器。 |
| SVN + VisualSVN Server (图形化界面) | 使用 VisualSVN Server 迁移工具 | 最推荐、最安全的方法,VisualSVN Server 提供了专门的备份和恢复功能,可以完美迁移服务器配置。 |
评估停机时间
- 完全停机迁移:最简单,但业务会中断,适用于非核心或可接受短暂中断的场景。
- 在线/零停机迁移:更复杂,但用户几乎无感知,适用于核心业务系统。
本指南主要介绍最常用的 完全停机迁移,因为它最可靠且易于操作。

准备新服务器
- 操作系统:建议新服务器的操作系统版本与旧服务器保持一致或更高,以避免兼容性问题。
- 安装 SVN 软件:在新服务器上提前安装好相同版本的 SVN 客户端和服务器端软件。
- 对于
svnserve:安装Subversion。 - 对于 Apache:安装
Subversion和Apache HTTP Server。 - 对于 VisualSVN Server:安装
VisualSVN Server。
- 对于
- 规划目录结构:在新服务器上规划好 SVN 版本库的存放路径(
D:\SVN\Repos),并确保该目录有足够的磁盘空间。
备份旧服务器
在开始任何操作前,务必备份旧服务器!
- 版本库备份:这是最重要的数据。
- 配置文件备份:
svnserve:svnserve.conf文件。- Apache:
httpd.conf,authz,htpasswd等所有相关配置文件。 - VisualSVN Server:整个 VisualSVN Server 的安装目录或其自带的备份功能。
详细迁移步骤 (以最常见的 svnserve 为例)
假设你的旧服务器是 Windows Server,使用 svnserve 作为服务器,版本库位于 D:\svn\repos。

第一步:在旧服务器上停止 SVN 服务
- 打开“服务”管理界面(
services.msc)。 - 找到名为
SVNService(或类似名称) 的服务。 - 右键点击,选择“停止”。
- 确认:所有通过 SVN 访问该服务器的客户端都会连接失败,这表示迁移窗口已开启。
第二步:备份旧服务器的版本库
虽然前面建议备份,但这是最后也是最关键的一次数据提取。
- 打开命令提示符(CMD)。
- 使用
svnadmin hotcopy命令创建一个版本库的“热备份”,这个命令可以在 SVN 服务运行时进行,但我们已经停止了服务,所以用svnadmin dump也可以,但hotcopy更快且包含所有钩子脚本。svnadmin hotcopy "D:\svn\repos\MyProject" "C:\backup\MyProject_backup"
D:\svn\repos\MyProject是你的版本库路径。C:\backup\MyProject_backup是备份目标路径。
- 将这个备份文件夹(
MyProject_backup)复制到新服务器上,或者打包后通过网络传输。
第三步:复制版本库到新服务器
- 在新服务器上,创建与旧服务器相同的版本库目录结构,
D:\SVN\Repos。 - 将上一步备份的
MyProject_backup文件夹,完整地复制到新服务器的D:\SVN\Repos目录下。- 重要:直接复制
hotcopy出来的整个文件夹,而不是进入该文件夹再复制内容,这能保证权限和目录结构完整。 - 复制完成后,你的新服务器版本库路径应为
D:\SVN\Repos\MyProject_backup,你可以根据需要重命名它为MyProject。
- 重要:直接复制
第四步:在新服务器上配置 SVN 服务
-
创建
svnserve.conf配置文件:- 在版本库目录(
D:\SVN\Repos\MyProject)下,找到conf文件夹。 - 编辑
svnserve.conf文件,确保其内容与旧服务器完全一致,特别是以下部分:[general] # 匿名用户无权限 anon-access = none # 认证用户有读写权限 auth-access = write # 指定密码数据库文件路径 password-db = passwd # 指定权限控制文件路径 authz-db = authz # 使用 realms,建议与仓库名一致 realm = MyProject Repository
- 在版本库目录(
-
创建
passwd和authz文件:passwd:将旧服务器版本库conf文件夹下的passwd文件内容,复制到新服务器的对应文件中,这个文件存储了用户名和密码(明文或MD5)。authz:同样,将旧服务器的authz文件内容复制过来,这个文件定义了用户和组的访问权限。
-
创建
svnserve服务:- 打开新服务器的命令提示符(CMD),以管理员身份运行。
- 执行以下命令来创建一个新的 SVN 服务:
sc create SVNService binPath= "C:\Program Files\CollabNet Subversion Server\svnserve.exe --service --root D:\SVN\Repos" start= auto depend= Tcpip
binPath:请根据你实际安装的svnserve.exe路径进行修改。--root D:\SVN\Repos:非常重要,这个参数告诉svnserve在哪个根目录下查找所有版本库。start= auto:设置为开机自启。depend= Tcpip:表示该服务依赖于 TCP/IP 协议。
第五步:启动新服务器上的 SVN 服务
- 在新服务器的“服务”管理界面(
services.msc)中,找到刚刚创建的SVNService。 - 右键点击,选择“启动”。
- 检查服务状态:确保服务已成功启动,并且没有报错。
第六步:客户端验证
- 更新客户端配置:通知所有 SVN 用户,将他们客户端工具(如 TortoiseSVN、IDE 插件)中的仓库 URL 从旧服务器的地址更改为新服务器的地址。
- 旧地址:
svn://旧服务器IP/MyProject - 新地址:
svn://新服务器IP/MyProject
- 旧地址:
- 测试连接:让用户尝试从新地址检出(Checkout)或更新(Update)项目。
- 系统会提示输入用户名和密码。
- 使用旧服务器上的凭据进行登录。
- 成功:如果能正常连接、检出文件,并显示最新的版本号,说明迁移成功。
- 失败:检查防火墙设置、
svnserve服务是否运行、svnserve.conf和passwd/authz文件配置是否正确。
第七步:旧服务器处理
在确认新服务器稳定运行一段时间(例如一天)后,可以安全地处理旧服务器:
- 停止并删除 SVN 服务。
- 备份并归档旧版本库数据(以防万一)。
- 关闭或重新分配旧服务器。
针对不同方案的额外说明
SVN + Apache 迁移
- 数据迁移:同上,使用
svnadmin hotcopy复制版本库。 - 配置迁移:
- 将旧服务器 Apache 的整个配置目录(通常是
Apache24\conf)复制到新服务器。 - 关键:修改新服务器 Apache 的
httpd.conf文件,确保其中的LoadModule,Location,SVNPath等路径指向新服务器上的版本库位置。 - 确保
authz和htpasswd文件路径正确。
- 将旧服务器 Apache 的整个配置目录(通常是
- 启动服务:在新服务器上启动 Apache 服务。
VisualSVN Server 迁移 (推荐)
这是最简单、最不容易出错的方法。
-
在旧服务器上创建备份:
- 打开 VisualSVN Server Manager。
- 右键点击你的服务器名称,选择 "All Tasks" -> "Backup"。
- 选择备份位置,并勾选 "Backup server settings"(非常重要,这会备份所有用户、权限和仓库配置)。
- 开始备份,会生成一个
.visb备份文件。
-
在新服务器上恢复:
- 在新服务器上安装相同版本或更高版本的 VisualSVN Server。
- 打开 VisualSVN Server Manager。
- 右键点击服务器名称,选择 "All Tasks" -> "Restore"。
- 选择你刚才创建的
.visb备份文件。 - 按照向导完成恢复,VisualSVN Server 会自动恢复所有仓库、用户、组和权限配置。
-
验证:
- 恢复完成后,VisualSVN Server 服务会自动重启。
- 客户端只需将仓库 URL 从旧服务器地址改为新服务器地址即可,无需任何其他操作。
常见问题与排查
-
问题:客户端连接新服务器时提示“Could not connect to server”。
- 排查:
- 新服务器防火墙是否放行了 SVN 端口(默认
3690)? - 新服务器
svnserve服务是否正在运行? - 在新服务器上用
telnet 新服务器IP 3690测试端口是否可达。
- 新服务器防火墙是否放行了 SVN 端口(默认
- 排查:
-
问题:客户端提示“Authentication failed”。
- 排查:
- 用户名或密码是否错误?(区分大小写)
- 新服务器版本库
conf/passwd文件中是否有该用户? conf/svnserve.conf文件中password-db指向的路径是否正确?
- 排查:
-
问题:客户端提示“Authorization failed”。
- 排查:
- 用户是否有权限访问该仓库?
- 新服务器版本库
conf/authz文件中的路径和权限规则是否配置正确?检查[groups]和仓库路径下的用户权限。
- 排查:
-
问题:迁移后文件版本号不正确或历史丢失。
- 排查:最可能的原因是备份或复制时数据不完整。务必使用
svnadmin hotcopy或svnadmin dump,而不是简单地复制文件,检查备份文件的大小是否与原仓库相当。
- 排查:最可能的原因是备份或复制时数据不完整。务必使用
希望这份详细的指南能帮助你顺利完成 SVN 服务器的迁移!
