旧SVN工作副本执行svn upgrade报E235000:如何排查?
旧SVN工作副本升级失败的排查方案
问题场景
翻出2010年以来未维护的旧SVN工作副本,执行svn status等命令时触发以下错误:
svn: E155036: Please see the 'svn upgrade' command”
svn: E155036: The working copy at '/Users/pll/backups/2010/My Old Repository'
is too old (format 10) to work with client version '1.14.2 (r1899510)' (expects format 31). You need to upgrade the working copy first.
其中一个副本执行svn upgrade成功并顺利转为Git,但其他副本执行该命令时报错:
svn: E235000: Unable to upgrade '/Users/pll/backups/2010/My Old Repository' at line 1817
核心困境:无法通过svn info获取原始仓库URL(所有命令均要求先升级工作副本),且3个独立副本报错行号一致;Mac OS 12.5.1下无法安装≤1.7版本SVN,安装1.8版本后报错行号变为1740,问题仍存在。
排查与解决步骤
一、直接从工作副本提取仓库URL
无需执行svn info,直接读取工作副本的元数据文件:
- 进入工作副本根目录,打开
.svn/entries文件(旧版本SVN的文本格式元数据),仓库URL通常位于文件开头几行。 - 若
.svn/entries为二进制格式,使用SQLite工具读取.svn/wc.db:
执行命令sqlite3 .svn/wc.db进入数据库,再执行以下查询获取仓库信息:SELECT value FROM wc_prop WHERE propname='svn:wc:ra_server_uuid'; SELECT * FROM repos;
二、修复工作副本元数据损坏
多个副本同一行报错,大概率是元数据损坏:
- 用1.8版本SVN执行清理命令:
svn cleanup --remove-unversioned --remove-ignored /Users/pll/backups/2010/My Old Repository,清理无效文件后重新尝试svn upgrade。 - 检查报错行号对应的元数据文件(如
.svn目录下的某文件),确认是否存在文件名特殊字符、文件损坏或权限问题,修复后再升级。 - 尝试强制升级:
svn upgrade --force /Users/pll/backups/2010/My Old Repository,跳过部分校验步骤。
三、分版本逐步升级
避免跨大版本直接升级,通过Docker容器规避系统兼容性问题:
- 拉取包含SVN 1.7版本的镜像,将工作副本目录挂载到容器内。
- 在容器中执行
svn upgrade,将工作副本格式从10升级到13(1.7对应格式)。 - 换用SVN 1.8容器,执行
svn upgrade升级到29格式。 - 最后用本地1.14版本SVN完成最终升级。
四、手动迁移文件到新仓库
若上述方法均失败,直接提取文件内容迁移:
- 复制工作副本中所有非
.svn目录的文件到新目录,保留文件修改时间与权限。 - 用之前获取的仓库URL重新检出干净的工作副本,将复制的文件覆盖进去,再按需提交到Git。
内容的提问来源于stack exchange,提问作者PLL
相关产品推荐
相关产品推荐

