SVN 405 方法不允许

122

我不小心在SVN中删除了一个文件夹,随后立即又添加了回来。这导致了一个问题,我的解决方案最终将该文件夹从我的本地副本以及服务器副本中完全删除。我可以在任何其他文件或文件夹上进行更新和提交,但如果我尝试创建具有相同名称的文件夹、添加并提交它,就会出现以下错误:

svn:服务器发送了意外的返回值(405方法不允许),响应MKCOL请求'/svn/www/!svn/wrk/9de0d765-2203-456c-af16-58e792ec7ac0/trunk/htdocs/solutions/medical'

我已运行无数次清理、提交、更新等操作,但无法解决此问题。有什么想法吗?

请注意,我无法重命名顶级文件夹。


我试图在尝试删除一个子目录以便正确忽略它的同时做同样的事情。不知何故,它自己解决了,我真的不知道哪些元素的神秘组合巧合地允许了这一点,所以我放弃了我的问题。我的新问题是:为什么我们不只是全部使用 git - icedwater
11个回答

170

我猜测你正在尝试添加的文件夹 已经存在 于SVN中。你可以通过将文件检出到另一个文件夹并查看trunk是否已有所需文件夹来确认。


1
我已经在另一个检出的版本上进行了验证。为什么我的工作副本无法更新,我无法确定。 - roadsunknown
1
这里的情况也是如此,但我不得不在一个单独的文件夹中检出该文件夹(或者更确切地说,我将其重命名为“foo”,然后进行了svn up,并将其取回,包括“已删除”的文件夹,尽管我成功地提交了删除它的操作)。 - Kalle
1
@Shaji:我理解你的情况。但是我如何才能因为这个错误仍然保持承诺呢?或者有其他方法可以做到吗?请告诉我。谢谢。 - Huy Tower
1
在文件夹上执行 SVN 更新,然后再次尝试提交。 - Alex R
这是一个很烦人的错误。我从Github上检出了一个新的代码库并提交了一个新的文件夹,但它总是显示相同的错误。我尝试了你提供的解决方案,但它没有起作用。 - emeraldhieu

56

我最快解决的方法是复制受影响的文件夹,用另一个名称提交它。然后使用svn mv duplicateFolder originalFolder命令。非常简单。

因此,将folder1复制为folder1Copy:

svn delete folder1
svn add folder1Copy

提交并更新:

svn mv folder1Copy/ folder1/

再次提交即可解决问题。


6
这对我非常有效,比处理第二个工作副本要简单得多。 - Justin
希望 commit & update 不是在Unix中字面上的命令行,尝试同时执行两个操作。 - LarsH
1
厉害了,如果您来到 Sunnyvale 并且找到我,我会请您喝咖啡。 - Michael Voznesensky

10

我的“消失”的文件夹是 libraries/fof

如果我删除了它,然后运行更新,它就不会显示出来。

cd libaries
svn up

(什么也没发生)。

但是更新为实际名称:

svn update fof

问题解决了并且更新了。因此,我将手动tar归档的工作副本覆盖到它上面并重新提交了。最简单的解决方案。


同意这是最简单的。只需执行“svn up [文件夹]”而不是“svn up”。 - Dimitris
这个解决方案对我起作用了。谢谢。 - Miguel Rentes

4

我在自己的仓库中解决了这个问题。我在Windows上使用TortoiseSVN,所以我不确定这个命令在命令行上如何执行,但是以下是我所做的:

有问题的文件夹叫做 lib,需要添加。

  • 首先,我撤销了添加操作,使得SVN不再关注它。
  • 然后,我使用Windows上下文菜单将其重命名(改为libs,这并不重要),添加它,并成功提交。
  • 最后,我使用TortoiseSVN的上下文菜单将其改回lib,再次提交。

3

我曾遇到类似的问题。最终我选择了从头开始重新安装,但这样做会导致我的SVN历史记录丢失。不过至少我解决了这个麻烦的错误。

以下是我实际执行的命令序列,可能不是最佳的执行顺序,但应该可以帮助您解决问题:

cp -rp target ~/other/location/target-20111108
svn rm target --force
cp -rp ~/other/location/target-20111108 target-other-name
cd target-other-name
find . -name .svn -print | xargs rm -rf
cd ..
svn add target-other-name
svn ci -m "Re-re-re-re-re-re-re-re-re-re import target"
svn mv target-other-name target
svn ci -m "Re-re-re-re-re-re-re-re-re-re import target"

这是唯一确定的方法。 - TomDestry

3
我刚刚也遇到了这个问题,并通过以下方式解决。我在这里记录下来,希望对其他人有用。
场景: 1. 在提交代码之前,版本号为100。 2. (别人提交了代码...版本号增加到199) 3. 我(忘记运行“svn up”)提交了代码,现在我的版本号是200。 4. 我运行“svn up”时出现了错误。
解决方法: 1. $ mv current_copy copy_back #将当前代码备份 2. $ svn checkout current_copy #重新检出 3. $ cp copy_back/ current_copy #恢复您的修改

1
如果您使用code.google.com来托管您的Subversion仓库。 您知道以下事情,对吧?
If you plan to make changes, use this command to check out the code as yourself using HTTPS:

# Project members authenticate over HTTPS to allow committing changes.
svn checkout https://.../svn/trunk/ user-...

When prompted, enter your generated googlecode.com password.
Use this command to anonymously check out the latest project source code:

# Non-members may check out a read-only working copy anonymously over HTTP.
svn checkout http://.../svn/trunk/ ...-read-only

你提到的错误是因为你正在使用“非成员可以通过HTTP匿名检查只读工作副本”的状态。因此,你目前无法提交或执行任何操作。
你必须使用“项目成员通过HTTPS进行身份验证以允许提交更改”的功能。
现在应该没问题了。

0

我因为将URL地址替换为以“/”结尾的新地址而出现了这个错误。我的意思是在REPOSITORY表中的.svn文件夹中的wc.db数据库记录。

当我删除“/”符号时,错误消失了。


0

这意味着您尝试放置在svn上的文件夹/文件已经存在于那里。我的建议是,在执行任何操作之前,只需右键单击文件夹/文件,然后单击repo-browser。通过这样做,您将能够查看svn上已经存在的所有文件/子文件夹等。如果所需的文件/文件夹不存在于svn上,则只需删除(备份后)要添加的文件,然后运行更新。


0

我遇到了同样的问题,并通过以下方式解决:

  1. 将文件夹复制到另一个位置。
  2. 从复制的文件夹中删除 .svn 文件夹。
  3. 右键单击原始文件夹,选择“SVN Checkout”。
  4. 如果您找不到(3),则您的情况与我的不同。
  5. 查看 REPO-BROWSER 上的目录是否正确。在我的情况下,这是问题的原因。
  6. 检出
  7. 将文件从复制的文件夹中取回到原始目录中。
  8. 提交。

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