SVN 错误 - 不是工作副本

Posted

技术标签:

【中文标题】SVN 错误 - 不是工作副本【英文标题】:SVN Error - Not a working copy 【发布时间】:2010-09-27 07:43:24 【问题描述】:

最近我们的svn服务器发生了变化,我们做了一个svn切换。

由于工作副本有大量未版本化的资源,工作副本被锁定,我们开始逐个文件夹切换 svn 下的所有文件夹,效果很好。

但是在存储库的最顶层,当我尝试更新文件时,我得到 svn: Working copy '.'锁定错误和清理也无济于事。当我进行清理时,我会收到这样的错误 - svn: 'content' is not a working copy directory

新鲜结帐根本不是一种选择。还有其他方法可以清理和释放锁并完全切换吗?

编辑: JesperE回答的最后一段

如果您在收到“非工作副本”时 做一个递归的“svn清理”我 猜测是你有一个目录 这应该是一个工作副本(即 顶层的 .svn 目录 这么说),但它缺少自己的 .svn 目录。在这种情况下,你 可以尝试删除/移动它 目录,然后进行本地更新

似乎是存储库中问题的解决方案。我已经确定了这些文件夹并单独对这些特定文件夹进行了新的检查,哇,锁定在随后的清理中被释放!非常感谢 JesperE !!

但是,我仍然无法弄清楚 svn switch 错误,它现在看起来像,

svn:存储库位于 'svn://repourl/reponame/文件夹名' 有 uuid 'm/reponame',但是 WC 有'b5b39681-0ff6-784b-ad26-2846b9ea8e7d'

有什么想法吗?

【问题讨论】:

对于遇到此错误的 R 用户:github.com/wch/r-source/wiki#adding-svn-information 【参考方案1】:

如果您在执行递归svn cleanup 时得到“不是工作副本”,我的猜测是您有一个应该是工作副本的目录(即顶层的.svn 目录是这样说的),但是它缺少自己的.svn 目录。在这种情况下,您可以尝试仅删除/移动该目录,然后进行本地更新(即rm -rf content; svn checkout content)。

如果你得到一个not a working copy 错误,这意味着Subversion 找不到合适的.svn 目录。查看contents中是否有.svn目录

如果可能的话,理想的解决方案是重新结帐。

【讨论】:

我同意,请重新结帐,而不是尝试将您的工作副本与 repo 一起移动。 我的问题是我已经迁移到新服务器并恢复了我的文件系统备份,但工作尚未提交,并使用 svnadmin 过滤掉我不再需要的旧项目。所以我的存储库包含我需要的所有信息,但有一个新的 UUID。在这种情况下,我只是将更改的文件 tar,重新签出,然后解压缩。 您在第一段中的建议不适用于我的系统(W7+Cygwin)。而是 rm & svn update 做到了。 警告: rm -rf 永久删除文件夹 content。在执行之前进行备份。【参考方案2】:

我以不同的方式遇到了类似的情况 (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

甚至将papers 移开并运行svn up(对OP 有效)也无法解决问题。这是我所做的:

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

成功了。

【讨论】:

【参考方案3】:

我解决了

    复制受影响文件夹的备份 SVN 还原受影响的文件夹 从备份中粘贴回文件

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

【讨论】:

怎么做?请简要说明【参考方案4】:

也许您只是复制了文件夹树并尝试添加最低的一个。

SVN
|_
  |
  subfolder1
       |
       subfolder2   (here you get an error)

在这种情况下,您必须在上层提交目录。

【讨论】:

【参考方案5】:

解决方法: 重命名不是“工作副本”的目录 再次签出/更新/恢复此目录 将文件从重命名目录移动到新目录 提交更改

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

【讨论】:

【参考方案6】:

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

【讨论】:

【参考方案7】:

我刚得到“不是工作副本”,对我来说,原因是 Unix 上的 Automouter。 只需一个新的“cd /path/to/work/directory”就可以了。

【讨论】:

【参考方案8】:

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

    将旧文件夹移出, 复制了新的 将 .svn 文件夹复制到每个(在我的例子中只有三个)新文件夹中。

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

解决了。

【讨论】:

使用 Eclipse 插件进行 SVN 清理大约 4 小时后发现这个 - 好时光!工作副本已锁定 - 不,不是,请为 Eclipse 人员提供更好的信息,谢谢。【参考方案9】:

我尝试将 .svn 文件夹从子文件夹粘贴到根文件夹。好用!!!

【讨论】:

【参考方案10】:

这就是我所做的:

    将中继重命名为中继_ 创建一个新文件夹trunk 检出少量文件后重新检出并中断进程 将文件从trunk_移动到trunk 做 svn 清理 进行 svn 更新。这将更新文件的状态,然后您的所有文件都将被版本化。

【讨论】:

【参考方案11】:

我在svn diff操作中也遇到这个问题,是文件路径不正确造成的,需要加'./'表示当前文件目录。

【讨论】:

【参考方案12】:

在尝试从大型 svn 项目中检查部分源代码时遇到同样的错误

svn co --depth empty svn://tug.org/texlive/trunk/Build
cd Build
svn update --set-depth infinity --parents ./source/texk/web2c

这里--parents是成功的关键

【讨论】:

【参考方案13】:

svn: 'svn://repourl/reponame/foldername' 的仓库有 uuid 'm/reponame',但 WC 有 'b5b39681-0ff6-784b-ad26-2846b9ea8e7d'

每个 subversion repo 都有一个唯一的标识符 (uuid)。 Subversion 使用它来确保 repo 在执行切换等操作时实际上是相同的。您可能应该将服务器上的 uuid 更改为与以前相同。

【讨论】:

更改服务器上的 uuid - 怎么做? 老实说,我不知道,我只是假设它可以做到。你在 Subversion Book 上查过吗?【参考方案14】:

可能是工作副本格式不匹配?它在 svn 1.4 和 1.5 之间发生了变化,更新的工具会自动转换格式,但旧的工具不再适用于转换后的副本。

【讨论】:

【参考方案15】:

您必须已从您的项目中删除了一个 SVN - 基础文件(它们是只读文件)。因此,您会收到此错误。

再次签出新项目,使用“Winmerge”将旧 SVN 项目的更改(如果有)与新项目合并,并在最近签出时提交更改。

【讨论】:

【参考方案16】:

@JesperE mentions 您需要更改 uuid。以下内容应该可以帮助您实现这一目标。

在 SVN 1.5+ 上,您可以执行 svnadmin setuuid;然后您可以使用 svnlook uuid 检查它是否已正确设置。在早期版本的 SVN 上,这是一个更难的过程。见http://chestofbooks.com/computers/revision-control/subversion-svn/Managing-Repository-UUIDs-Reposadmin-Maint-Uuids.html

此外,“m/reponame”的 UUID 看起来很可疑。我相信它应该是一个十六进制格式的数字,就像工作副本的一样,所以也许这个动作会全面改善:-)

[我最初对@JesperE's answer 发表了评论,但创建此答案是为了使其对人们更明显,对谷歌更有帮助。从那以后,我删除了我的 cmets。 ]

【讨论】:

【参考方案17】:

遇到同样的问题,原来我们在同一台机器上安装了 Slik 1.6.2 和 Tortoise。 Tortoise 已更新(并已更新工作副本)但 Slik 没有,因此 Tortoise 工作正常,但命令行失败:

svn: '.'不是工作副本目录

删除 Tortoise 和 Slik,然后在启用命令行工具的情况下重新安装 Tortoise 为我解决了这个问题。

【讨论】:

【参考方案18】:

对于 mac :- 从服务器端结帐,然后将打开一个新窗口以从本地计算机中选择目录,而不是将所有代码放在选定的文件夹中,然后打开 svn 本地端并添加并提交项目

【讨论】:

【参考方案19】:

今天早上我发现了同样的问题/FILE_NAME/ is not a working copy,我花了两个多小时来解决它。经过长时间的 RND 和 Google,我找到了一些解决方案,那就是 CHECKOUT

    CHECKOUTSUBVERSION 到本地作为新项目。 更改 java 文件中的一些代码并提交项目。 它对我有用。

希望对你有帮助。

【讨论】:

【参考方案20】:

最近我在使用其他开发者 Mac 我有同样的情况,问题是;首先,我需要输入 get repo path to terminal 但我没有,它会显示您的用户名和密码是什么。

【讨论】:

【参考方案21】:

我刚刚遇到了 .svn 目录位于另一台机器上的 nfs 服务器上的情况,并且 nfs 客户端没有运行文件锁定服务 (lockd)。

svn: E155007: '/mnt/svnworkdir' is not a working copy

在 nfs 客户端主机上启动 lockd 后,这种情况就消失了。

似乎当 subversion 无法锁定文件时,它可能会提供更好的错误消息。这是颠覆 1.10.0

【讨论】:

【参考方案22】:

我从同一个项目到不同的位置进行了新的结帐,然后从中复制了 .svn 文件夹并替换为我的旧 .svn 文件夹。之后调用 svn update 函数,一切都正确同步到最新状态。

【讨论】:

【参考方案23】:

我有这个确切的错误。我注意到我在错误的目录中。一旦我恢复到 SVN 中继目录,问题就解决了。

【讨论】:

【参考方案24】:

我在我的代码上执行 mvn release:prepare 时看到了这个错误。就我而言,我已经将项目从 SVN 迁移到 Github,并从 Github 克隆了源代码。但是在我的 pom.xml 文件中,我错过了将 SCM 位置从 SVN URL 更新到 Github URL,从而导致工作目录之间的不匹配。

更正到 Github 位置的 URL 帮助我解决了这个问题。

【讨论】:

【参考方案25】:

删除本地计算机中存在的 .svn 文件夹。按 windows 图标并输入 .svn,删除整个文件夹。它对我有用。

【讨论】:

以上是关于SVN 错误 - 不是工作副本的主要内容,如果未能解决你的问题,请参考以下文章

SVN 升级工作副本

SVN 中的工作副本 XXX 被锁定并且清理失败

maven 发布:由于 1.7 svn 工作副本准备失败(预计 1.6)

SVN 出现如下错误 怎么解决?

重新创建SVN wc.db.

可以强制 SVN 将目录视为工作副本吗?