Svnsync无法同步存储库

时间:2011-09-07 10:26:09

标签: svn svnsync

我对远程Subversion存储库具有读取权限,我想通过svnsync克隆它。同步开始正常并且进展顺利,但接近结束时我得到的错误如下:

Transmitting file data ...svnsync: File not found: transaction '12893-qyy', path
 '/project_name/trunk/path/to/file.cpp'

我可以成功查看有问题的修订版,以前的修订版和下一版。所有文件都已到位。我检查了有问题的文件的日志 - 它的文件夹在以前的版本中被移动到这个地方。

是否可以强制svnsync忽略此错误并继续同步?我没有对存储库的管理员访问权限,所以我无法修复它。

更新:回答评论:我检查了相同的颠覆客户端作为服务器使用(1.6.6),最新的稳定(1.6.17)和beta版本(1.7)。 All给出完全相同的错误。另外,我可以成功地检出“断”库:最新版本,修订版中的问题(12893),修订之前(12892)和修订后(12894),没有任何错误

更新:应答更多的评论:svn的日志显示在修订12892夹 '至' 是从移动/repo/other_project/trunk/source_path {成{1}}

2 个答案:

答案 0 :(得分:7)

鉴于您可以在此之前和之后检出修订,我猜您没有任何存储库损坏。 svnsync通过“重放”事务来工作,而不是镜像数据或类似的东西。因此,可能存在阻止其重放事务的错误。我猜想有关该提交的事情已经触发了一个错误。您可以运行svn log -c 12893 -v来更详细地查看修订版。我猜它有一些东西就像一个导致问题的'R'eplace。您可以收集信息并将其发送到users@subversion.apache.org,以便对其进行分析并希望得到修复。

以下是其他一些想法:

  • 如何访问源存储库? file:// http:// etc.如果它是http://您可以尝试从使用默认的Neon HTTP库更改为Serf并查看它是否仍有问题。您可以通过在运行它时将-config-options = servers:global:http-library = serf添加到svnsync命令来实现。值得一试。

  • 查看是否可以转储修订版。 svnadmin dump -r12892:12893 --incremental reposname>转储文件

  • 如果您可以转储修订版,然后加载,您可以使用svnadmin load手动将其加载到目标存储库中。

  • 如果您可以加载修订版,那么您可以手动修复svnsync的属性,以便它知道它执行了该修订。 svn ps --revprop -r0 svn:sync-last-merged-rev 123893 url:// to / mirror

更新:通过使用subversion 1.7 RC2中的新svnrdump实用程序解决了这个问题。

答案 1 :(得分:0)

要添加到上面的响应中,解决我的问题的最后一招是使用svndumpfilter命令排除损坏的节点。

每次使用svnrdump后尝试加载特定的修订版时,都会出现以下错误;

... svnadmin:E160004:文件系统已损坏 svnadmin:E200014:读取表示形式时校验和不匹配:    预期:77ec72e82afddd1cb8d2c63760cf4dbb      实际:f34fb5883dffffec3cd59a69f8a2cb99

如果已将修订的转储创建为rev12892.dmp,则可以排除路径,例如。 “ / project_name / trunk / path”如下;

  

svndumpfilter排除/ project_name / trunk / path pruned_dump_file

有关svndumpfilter命令的详细信息,请参见svn红皮书:http://svnbook.red-bean.com/en/1.7/svn.ref.svndumpfilter.commands.c.exclude.html