检出Subversion存储库时出现错误(svn:您的.svn / tmp目录可能缺失或损坏;)

8

我正在尝试检出一个完整的Subversion代码库,包括所有分支和标签:

svn co svn+ssh://path/to/project

这个过程运行了一段时间,但在分支检出期间,我遇到了以下错误:

svn: Your .svn/tmp directory may be missing or corrupt; run 'svn cleanup' and try again
svn: Can't open file 'project\branches\BRANCH\source\java\com\bS\.svn\tmp\text-base\Event.java.svn-base': The system cannot find the path specified.

所以我尝试手动检出分支:

svn co svn+ssh://path/to/project/branches/BRANCH

这个命令可以正常运行,我可以获取到分支。然后我可以将该分支复制到完整项目的branches目录中,并继续进行checkout操作。但是在其他分支上,它一直遇到这个问题。

有人知道为什么我无法将该分支作为整个项目的一部分进行checkout,但我可以单独检出它吗?


你尝试过运行 svn cleanup 吗? - Michael Kopinsky
注释:除非您知道自己在做什么(即知道如何创建浅层检出),否则不应该将包含所有分支和标签的项目顶层检出。如果项目有一千个标签,那么您的检出将包含该项目的一千个副本。请检出主干或特定分支。 - Wim Coenen
@Wim Coenen 谢谢。我只是想创建一个 SVN 存储库的本地副本,以便在不损坏任何数据的情况下尝试将其转换为 Mercurial。现在我改变了策略,通过从主服务器创建一个转储并将其加载到新创建的本地存储库中来创建我的本地副本。 - DaveJohnston
4个回答

7

您可以通过在svn命令的参数中指定完整限定路径来解决这个问题。例如,不要使用:

c:\dev> svn co http://repoman.example/svn/myproj/trunk myproj

试一试

c:\dev> svn co http://repoman.example/svn/myproj/trunk c:\dev\myproj

由于某些原因,路径长度限制只适用于相对路径。(参见链接)

1
这对我起作用了。很好,因为我已经在驱动器的根目录下了,没有办法缩短检出路径。 - user170934

6
好的,我已经找到了自己问题的答案,至少是解决方案。原来这与路径长度有关。在上面的问题中,我编辑了路径名称以不公开公司代码的详细信息,但实际上它是一个非常长的文件,并且它位于相当深度嵌套的目录中。
当我单独检查分支时,我将其检查到硬盘上较高级别的目录中,它可以工作。我尝试直接将分支检出到我为项目创建的分支目录中,但它也失败了,所以我想这一定与路径有关。
现在,我正在将整个项目检出到D:\ ProjectDir中,一切似乎都进行得更加顺利了。我想Subversion对路径长度有限制,因此它无法获取某些所需文件。
*更新:限制为255个字符。结果,在我的情况下,路径长度为269个字符。所以只需要向上提升1个目录级别就足以解决问题。

2
你在使用Windows,对吧?最大路径长度是一个很大的Windows问题。我曾经看到过利用这个隐藏的垃圾软件。Windows资源管理器和反恶意软件无法看到这些文件,但它们确实存在。讽刺的是,Windows可以处理这些长路径,NTFS也可以处理这些路径。然而,Windows资源管理器和基本的文件打开/关闭库却不能。你可以使用//路径进行编程技巧,以解决这些问题,但没有人使用它们。为什么微软仍然在Windows中保留这个虚假限制,任何人都猜不透。特别是因为.NET使用长路径名。 - David W.
那种解决方法并不是很有用,因为有时候你没有“上升一级”的余地。我建议使用绝对路径而不是相对路径在你的检出链接中,就像Victor的解决方案(稍后发布)一样。 - Hoàng Long

2
请检查以下命令: find . -iname '.svn' -exec mkdir {}/tmp \;

该命令会在所有文件夹中查找名为“.svn”的文件夹,并在每个匹配的文件夹中创建一个名为“tmp”的文件夹。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接