什么导致SVN错误“不是工作副本”?

225

最近我们的 Subversion(SVN)服务器已更改,我们进行了 svn switch 操作。

由于工作副本中有大量未版本化的资源,工作副本被锁定,我们开始逐个文件夹地对所有在 SVN 下的文件夹进行切换,这一过程运行得非常良好。

但是,在存储库的最高层级中,当我尝试更新文件时,会出现错误提示: svn: Working copy '.' locked。尝试清理也无济于事,会导致类似于 svn: 'content' is not a working copy directory 的错误。

重新检出绝不是一个选项。还有什么其他方法可以清理并释放锁定,并完成 svn switch 过程呢?


对于遇到此错误的R用户:https://github.com/wch/r-source/wiki#adding-svn-information - isomorphismes
25个回答

133

如果你在执行递归的 svn cleanup 命令时收到“不是工作副本”(not a working copy)错误提示,那么很可能你有一个子目录本应该是工作副本(即顶层的 .svn 目录表示如此),但是这个子目录缺失自己的 .svn 目录。

在这种情况下,你可以移动或删除该目录,然后执行本地更新。要删除该目录,请:

rm -rf content
svn checkout content

警告: rm -rf 会永久删除文件夹内容。

如果出现 not a working copy 错误,意味着 Subversion 在 content 子目录中找不到适当的 .svn 目录。请检查一下 content 中是否存在 .svn 目录。

最理想的解决方案是进行全新的 checkout,如果可能的话。


1
我同意,最好进行全新的检出操作,而不是试图将你的工作副本与仓库一起移动。 - Tigraine
2
我的问题是,我已经迁移到了一个新的服务器,并恢复了尚未提交的工作文件系统的备份,并使用svnadmin过滤掉了我不再需要的旧项目。因此,我的存储库包含了我需要的所有信息,但具有新的UUID。在这种情况下,我只需打包更改后的文件,获取新的检出,然后解压缩即可。 - Drarok
你在第一段提出的建议在我的系统(W7 + Cygwin)上不起作用。相反,使用rm和svn update解决了问题。 - Jukka Dahlbom
19
警告:rm -rf 命令会永久删除 content 文件夹,请在执行之前备份。 - KrishPrabakar

48

我曾经遇到过类似的情况 (svn: 'papers' is not a working copy directory),只是我的解决方法有所不同,因此我想分享一下我的处理经验(简化版):

$ svn add papers
svn: Can't create directory 'papers/.svn': Permission denied

糟糕!修复权限...然后执行以下操作:

$ svn add papers
svn: warning: 'papers' is already under version control
$ svn st
~     papers
$ svn cleanup
svn: 'papers' is not a working copy directory

即使移动文件并运行svn up(这对于提问者来说有效)也无法解决问题。以下是我所做的:

$ mv papers papers_
$ svn cleanup
$ svn revert papers
Reverted 'papers'
$ mv papers_/ papers
$ svn add papers

那个起作用了。


6

我通过以下方法解决了这个问题:

  1. 复制受影响的文件夹的备份
  2. SVN还原受影响的文件夹
  3. 从备份中粘贴文件

在我的情况下,问题是由于删除了 .svn 文件导致的。


如何做到?请简要说明。 - Anand Savjani

5
也许你只是复制了一个文件夹树,并试图添加最底层的文件。
SVN
|_
  |
  subfolder1
       |
       subfolder2   (here you get an error)

在这种情况下,您需要提交上一级目录。


3
如果您在新目录中创建了一个文件,而不是使用'svn add newdir/newfile',请改为使用'svn add newdir',因为您需要添加该目录。所有目录内的文件将默认添加。

3

解决方法:

重命名不是“工作副本”的目录。 重新检出/更新/还原此目录。 将文件从重命名的目录移动到新目录。 提交更改。

原因:

您对.svn目录下的某些文件进行了更改,这破坏了“工作副本”。


1
@peter-mortensen,15年前的回复被你进行了一次委婉的编辑,是吗?感谢你的编辑和提供精确时间链接。但其实这并不是必要的 :-P - abatishchev
1
哇:他在几乎每个答案/评论中都这样做了...维基百科超链接等。在15年前的帖子上进行声望/积分收集。 - Andy Needham

1
在 svn diff 操作中,我也遇到了这个问题。它是由于文件路径不正确导致的。你应该添加'./'来表示当前文件目录。

关于“当前文件目录”:您是指当前工作目录吗? - Peter Mortensen

1
我尝试将子文件夹中的.svn文件夹复制到根文件夹中。它可以工作!!!

1

这是我所做的:

  1. 将 trunk 重命名为 trunk_
  2. 创建一个新文件夹 trunk
  3. 重新检出并在检出几个文件后中断该过程
  4. 将文件从 trunk_ 移动到 trunk 中
  5. 执行 svn cleanup
  6. 执行 svn update。这将更新文件状态,然后所有文件都将有版本号。

1

同样的,我需要更新一个“contrib”文件夹:

  1. 将旧文件夹移出,
  2. 复制新文件夹
  3. 将每个(在我的情况下只有三个)新文件夹中的 .svn 文件夹复制进去。

在我的情况下,问题也是由于删除了 .svn 文件夹。

问题已解决。


在使用Eclipse插件进行SVN清理约4小时后,我发现了这个问题 - 真是美好的时光!工作副本被锁定了 - 不,它没有,Eclipse的开发人员需要提供更好的提示信息,谢谢。 - Darth Jon

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