如果完整文件名超过256个字符,svn命令行实用程序将不起作用

如果完整文件名超过256个字符,svn命令行实用程序将不起作用,svn,Svn,如果生成的某些文件的完整文件名太长,我无法使用svn实用程序从命令行创建工作副本。 但我可以成功地从Ortoisesvn或Subclipse创建工作副本。 为什么?作为一种解决方法,您可以将工作副本替换为驱动器号,以缩短路径长度: C:\Users\Me\SVN\My\Cool\Repository\With\A\Very\Long\Path> subst S: . C:\Users\Me\SVN\My\Cool\Repository\With\A\Very\Long\Path> S

如果生成的某些文件的完整文件名太长,我无法使用svn实用程序从命令行创建工作副本。
但我可以成功地从Ortoisesvn或Subclipse创建工作副本。

为什么?

作为一种解决方法,您可以将工作副本替换为驱动器号,以缩短路径长度:

C:\Users\Me\SVN\My\Cool\Repository\With\A\Very\Long\Path> subst S: .
C:\Users\Me\SVN\My\Cool\Repository\With\A\Very\Long\Path> S:
S:> svn up

这实际上不是svn客户端的限制,而是windows控制台的限制:相对路径在扩展时不能超过MAX_PATH(254)个字符

和这里的一些评论不同,svn开发人员忘记MAX_PATH并不是疏忽。因为:如果传递的是完整路径而不是相对路径,那么这些命令将起作用

因此,与其

cd C:\some\...\very\long\path
svn up .


如果您的命令行实际上是Cygwin bash,那么您可能会遇到以下错误:


实际上,Cygwin无法处理长度超过255个字符的路径。(除了Stefan的答案:这里既不可能有绝对路径,也不可能有相对路径。)Cygwin 1.7(自半年以来一直是beta版)似乎解决了这个问题。

而不是在当前目录中执行以下操作:

svn co http://xxx/repo1
如下所示为其提供完整的目标路径:

svn co http://xxx/repo1 E:\abc\pqr\xyz\abc\pqr\xyz\repo1

我在Ubuntu系统上遇到了同样的问题,当时我试图签出一个文件名很长的存储库。但是,我发现我的问题与我的家庭硬盘的加密有关,如下所述:

所以我们需要在项目中的所有目录中执行此操作(svn up path)?是的,或者通过真正缩短路径(重命名)或在子文件夹上使用SUBST,然后将SUBSTAD驱动器用作path.Argh,将路径缩短到254个字符以下。我很抱歉。现在我甚至不能再删除这个答案了。不,不是Cygwin。我使用svn从远处或从cmd.Works!非常感谢。我认为这是windows文件系统的限制。这对我来说也很有效-即使尝试了注册表编辑以使用长文件路径,它仍然失败。
svn co http://xxx/repo1 E:\abc\pqr\xyz\abc\pqr\xyz\repo1