看来 Subversion 配置中的某些错误操作可能导致 Subversion 镜像被破坏。详细信息:我们在主服务器上托管了一组 Subversion 存储库,然后使用 snvsync 镜像到两个异地服务器。所有事务都使用 HTTPS 完成,因此所有三台服务器上的 Apache 都配置为允许通过 HTTPS 访问主服务器和镜像服务器。上周五,我在主服务器上设置了一个新存储库,但在新存储库的 Apache 配置中,我将 SVNPath 设置为与现有存储库相同。几个小时后,我修复了该错误。我不完全确定我现在看到的错误是由于那个拼写错误造成的,还是只是巧合,但无论是什么原因,实际拥有该 SVNPath 的存储库在 svnsync 尝试期间报告了错误,现在该存储库的两个镜像中至少有一个文件丢失。这是我现在尝试在该镜像上执行 svnsync 时收到的消息:
svnsync: '/Repo-proxy-sync/path/to/missing/file/MissingFile.pm' path not found
签出镜像的最新修订版可确认该文件不存在。丢失的文件最初是在主存储库的修订版 #16166 中提交的。回顾 svnsync 日志,似乎该修订版已干净地提交给镜像(在创建新存储库之前):
Fri Aug 21 06:03:20 CDT 2015
Committed revision 16166.
Copied properties for revision 16166.
早上 8 点刚过,错误就开始出现了。我还怀疑我重启 Apache 来应用新配置可能是一个因素。我一整天看到的错误中有一条消息专门针对修订版本 #16166。
Fri Aug 21 08:01:58 CDT 2015
svnsync: Server sent unexpected return value (500 Internal Server Error) in response to OPTIONS request for 'http://master-ip/Repo'
Fri Aug 21 09:00:02 CDT 2015
svnsync: Server sent unexpected return value (500 Internal Server Error) in response to PROPFIND request for '/Repo/!svn/bln/16166'
Fri Aug 21 10:00:01 CDT 2015
svnsync: Server sent unexpected return value (500 Internal Server Error) in response to PROPFIND request for '/Repo'
Fri Aug 21 14:00:01 CDT 2015
svnsync: Server sent unexpected return value (500 Internal Server Error) in response to OPTIONS request for 'http://master-ip/Repo'
尽管存在错误,但主存储库似乎没有问题;我对最新修订版运行了“svnadmin verify”,包括在创建其他存储库之前和修复其配置之后提交的几个修订版。所有修订版都干净。第二个异地镜像在同步受影响的存储库时没有遇到任何问题,目前拥有最新修订版,没有丢失文件。
目前,坏镜像位于修订版本 #16168。是否可以强制将镜像退回几个修订版本,例如退回到 #16165,然后允许同步再次进行?还是我必须从头开始重建镜像?
答案1
我只能完全重建镜像。16,000 多次提交跨越半个地球并不是一个愉快的体验,但至少这是一个可行的解决方案。感谢所有阅读的人!