直接用 svnadmin upgrade 命令可升级老旧仓库格式,但必须先备份、停服并检查磁盘空间,再执行升级和 verify 验证;失败时应改用 dump/load 分段重建。

直接用 svnadmin upgrade 命令就能完成老旧仓库格式升级,但必须配合备份、验证和兼容性检查,否则容易出问题。
确认当前仓库版本与SVN程序匹配
老旧仓库(如1.3、1.4、1.6)往往无法被新版 svnadmin 直接识别。先查清现状:
- 运行
svnadmin --version看当前 svnadmin 版本(比如 1.14) - 进入仓库目录,查看
db/format文件内容:若为2或3,说明是极老格式(pre-1.5);5或6表示较新但可能未适配当前客户端 - 用旧版 svnadmin(如 1.6.x)执行
svnadmin verify /path/to/repo,确认是否能正常读取——若报错“Unknown FS format”,说明格式已不兼容
强制升级前必须做的三件事
svnadmin upgrade 不会校验数据完整性,跳过准备步骤极易导致仓库不可用:
-
完整备份:用当前能识别该仓库的 svnadmin 版本执行
svnadmin dump /path/to/repo > repo-full.dump - 停掉所有访问:确保 svnserve 或 Apache 已停止,无人在提交或更新
- 检查磁盘空间:upgrade 过程中会生成临时文件,建议保留 ≥2倍仓库大小的空闲空间
执行升级并验证有效性
升级本身是一条命令,但后续验证决定成败:
- 运行
svnadmin upgrade /path/to/repo(注意:路径必须指向仓库根目录,不是 conf 或 hooks 子目录) - 成功后,
db/format内容应变为8(对应 SVN 1.10+)或更高,且db/uuid文件保持不变 - 立即验证:
svnadmin verify /path/to/repo—— 若报错,说明升级失败或数据损坏,需回退到 dump 文件重建 - 用客户端测试:
svn info svn://your-server/repo和svn list svn://your-server/repo,确认可正常访问历史版本
升级失败时的兜底方案
如果 upgrade 报错(常见于 BDB 后端或损坏 revision),不要反复重试,改用 dump/load 流程:
- 用旧版 svnadmin 分段 dump(避开损坏 revision):
svnadmin dump -r 0:1234 > part1.dump,再svnadmin dump -r 1236:HEAD --incremental > part2.dump - 新建空仓库:
svnadmin create /new/repo - 用新版 svnadmin load:
svnadmin load /new/repo ,再 <code>svnadmin load /new/repo - 手动迁移 conf/passwd、conf/authz 等配置文件,注意权限字段语法是否变更(如 1.10+ 支持正则权限)











