【问题标题】:SVN Error - Not a working copySVN 错误 - 不是工作副本
【发布时间】: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'

有什么想法吗?

【问题讨论】:

标签: svn


【解决方案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】:

    我解决了

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

    在我的情况下,问题是由于删除了 .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”文件夹:

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

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

            解决了。

            【讨论】:

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

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

            【讨论】:

              【解决方案10】:

              这就是我所做的:

              1. 将中继重命名为中继_
              2. 创建一个新文件夹trunk
              3. 检出少量文件后重新检出并中断进程
              4. 将文件从trunk_移动到trunk
              5. 做 svn 清理
              6. 进行 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

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

                              希望对你有帮助。

                              【讨论】:

                                【解决方案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,删除整个文件夹。它对我有用。

                                          【讨论】:

                                            猜你喜欢
                                            • 1970-01-01
                                            • 1970-01-01
                                            • 1970-01-01
                                            • 2011-03-12
                                            • 1970-01-01
                                            • 2011-05-12
                                            • 2011-08-17
                                            • 1970-01-01
                                            相关资源
                                            最近更新 更多