我对远程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}}
答案 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