svnadmin dump和load是唯一能100%保留所有修订版本号、提交时间、作者、日志及二进制内容的可靠方式;需关闭服务后全量导出、环境一致安装、复制权限配置,并严格按步骤导入校验。

直接复制仓库文件夹不可行——SVN仓库不是普通文件集合,而是包含完整版本历史、权限配置和钩子脚本的结构化数据。用 svnadmin dump 和 svnadmin load 是唯一能100%保留所有修订版本号、提交时间、作者、日志及二进制内容的可靠方式。
导出旧库:确保全量、无损、可验证
在旧服务器上,以管理员身份打开命令行(推荐进入 VisualSVN Server 的 bin 目录),执行:
svnadmin dump "D:\Repositories\MyProject" > D:\backup\MyProject.dump- 如需验证完整性,可加
--quiet避免干扰,或后续用svnadmin verify检查 dump 文件 - 若仓库极大(>10GB),建议分段导出:
svnadmin dump -r 0:1000、-r 1001:2000等,再合并或分批导入 - 务必关闭 VisualSVN Server 服务后再执行 dump,避免写入冲突导致数据不一致
准备新服务器:环境一致是稳定前提
新服务器不是“装个SVN就行”,关键点在于兼容性与权限继承:
- 安装相同主版本的 VisualSVN Server(例如旧服为 5.2.2,新服至少装 5.2.x 最新版;不建议跨 5.x → 6.x 直接迁移)
- 创建空仓库时路径必须与旧库逻辑一致:
svnadmin create "E:\Repositories\MyProject" - 不要手动修改新仓库的
db\目录,一切由load命令自动重建 - 提前将旧服务器的
conf\authz(权限)、conf\passwd(用户)、hooks\(钩子脚本)一并复制到新仓库对应位置,否则权限全失
导入与校验:版本号零偏差的关键操作
导入不是简单“扔进去”,它严格还原原始修订树:
- 执行:
svnadmin load "E:\Repositories\MyProject" - 成功后,
svnlook youngest "E:\Repositories\MyProject"应返回与旧库完全相同的最新版本号(如 r12874) - 用
svnlook history -l 10 "E:\Repositories\MyProject"快速核对前10次提交的作者、路径、时间是否一一对应 - 如有报错(如“Invalid revision”),通常是 dump 文件损坏或路径引用错误,勿跳过重试
客户端切换:让开发无感过渡
服务端迁移完成,但客户端仍连旧地址——必须主动更新工作副本指向:
- TortoiseSVN 用户:右键工作目录 → Relocate → 输入新仓库 URL(如
https://svn-new.company.com/svn/MyProject) - 命令行用户:
svn switch --relocate https://svn-old.company.com/svn/MyProject https://svn-new.company.com/svn/MyProject . - 切勿使用
svn update或重新 checkout —— 这会丢失本地未提交更改,且无法继承原工作副本的修订版本锚点 - 通知团队统一在维护窗口后首次提交前执行 relocate,避免混用新旧地址造成混乱

















