SVN镜像仓库同步版本不一致问题求助
解决SVN镜像仓库同步不一致及校验和错误问题
一、修正手动提交导致的同步元数据不一致
手动向Mirror导入增量破坏了svnsync的同步状态记录,需先修正元数据:
- 查看Mirror仓库的同步进度记录:
记录svnsync认定的已同步版本号(记为svn propget --revprop -r 0 svn:sync/last-merged-rev <Mirror仓库URL>R_sync)。 - 查看Mirror仓库的实际HEAD版本:
记录实际最新版本号(记为svn info <Mirror仓库URL> | grep RevisionR_actual)。 - 更新同步元数据,让svnsync认可当前HEAD为已同步版本:
执行此操作的用户必须拥有Mirror仓库的版本属性修改权限(即同步专用用户)。svn propset --revprop -r 0 svn:sync/last-merged-rev R_actual <Mirror仓库URL>
二、修复校验和不匹配错误(E200014)
这是同步失败的根源,需定位并修复具体版本的文件:
- 重新执行同步并查看详细日志,定位出错的文件和版本:
日志会明确显示哪个版本的哪个文件出现校验和不匹配。svnsync sync <Mirror仓库URL> --verbose - 从Source仓库导出该版本的正确增量,修复Mirror仓库:
- 登录Mirror服务器,进入仓库所在目录,用
svnadmin verify确认错误位置:svnadmin verify <Mirror本地仓库路径> - 从Source仓库导出出错版本的增量dump:
svnadmin dump <Source本地仓库路径> -r <出错版本>:<出错版本> --incremental > fix_rev.dump - 将dump文件导入Mirror仓库:
svnadmin load <Mirror本地仓库路径> < fix_rev.dump
- 登录Mirror服务器,进入仓库所在目录,用
- 尝试逐个版本同步,验证修复效果:
若单个版本同步成功,再逐步同步后续版本。svnsync sync <Mirror仓库URL> --revision <出错版本>:<出错版本>
三、恢复自动同步机制
修复完成后,重新确保Source的提交后钩子正常工作:
- 检查Source仓库的
hooks/post-commit脚本,确保内容如下(替换为实际参数):#!/bin/sh REPOS="$1" REV="$2" svnsync sync <Mirror仓库URL> --username <同步专用用户> --password <同步用户密码> >> /var/log/svnsync_sync.log 2>&1 - 给脚本添加可执行权限:
chmod +x <Source仓库路径>/hooks/post-commit
四、后续预防措施
- 定期执行仓库完整性校验:
svnadmin verify <Source仓库路径> svnadmin verify <Mirror仓库路径> - 严格限制Mirror仓库权限:仅允许同步专用用户执行写入操作,禁止其他用户的任何修改权限(包括版本属性修改)。
- 同步日志持久化:将svnsync的输出写入日志文件,方便后续快速排查问题。
内容的提问来源于stack exchange,提问作者Elyahu
相关产品推荐
相关产品推荐

