2

我有远程 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)和测试版(1.7)相同的颠覆客户端。全部给出完全相同的错误。此外,我可以成功签出“损坏的”存储库:最新修订版、有问题的修订版 (12893)、之前的修订版 (12892) 和之后的修订版 (12894),没有任何错误。

更新:回答更多评论:svn log 显示在修订版 12892 中,文件夹 'to' 已从移动/repo/other_project/trunk/source_path/repo/project_name/trunk/path

4

2 回答 2

7

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

这里有一些其他的想法:

  • 如何访问源存储库?file:// http:// 等。如果是 http://,您可以尝试从使用 Neon 的默认 HTTP 库更改为 Serf,看看它是否仍然存在问题。您可以通过在运行 svnsync 命令时添加 --config-option=servers:global:http-library=serf 来做到这一点。值得一试。

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

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

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

更新:问题已通过使用svnrdumpsubversion 1.7 RC2 中的新实用程序解决。

于 2011-09-13T20:25:57.160 回答
0

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

每次我在使用 svnrdump 后尝试加载特定版本时,都会收到以下错误;

... svnadmin:E160004:文件系统损坏

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

svndumpfilter 排除 /project_name/trunk/path < rev12892.dmp > pruned_dump_file

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

于 2019-10-18T00:51:45.370 回答