2010-08-30 312 views
118

我不小心删除了SVN中的文件夹,并立即将其添加回来。我遇到了这个问题,我的解决方案最终从我的本地副本以及服务器副本中完全删除文件夹。我可以做更新,而不会对任何其他文件或文件夹的问题提交,但如果我尝试创建一个文件夹具有相同的名称,添加和承诺,它给了我下面的错误:SVN 405方法不允许

svn: Server sent unexpected return value (405 Method Not Allowed) in response to MKCOL request for '/svn/www/!svn/wrk/9de0d765-2203-456c-af16-58e792ec7ac0/trunk/htdocs/solutions/medical'

我已经运行无数的清理,提交,更新等等。没有什么能够解决问题。想法?

仅供参考,我没有重命名顶级文件夹的选项。

+0

我试图删除一个子目录,所以我可以忽略它。不知何故,它解决了自己,我不知道什么是这些元素的奥秘组合,因此我放弃了我的问题。我的新版本是:为什么我们不只是使用'git'? – icedwater 2013-08-01 02:28:18

回答

169

我的猜测是你试图添加的文件夹已经存在在SVN中。您可以通过将文件签出到不同的文件夹来确认是否已经有了所需的文件夹。

+1

我在另一个签出版本上进行了验证。为什么我的工作副本不会更新,我无法确定。 – roadsunknown 2010-08-31 23:14:19

+1

这里也是这种情况,但我不得不在一个单独的文件夹中检查文件夹(或者更确切地说,我将它重命名为“foo”并将svn提升并返回,包括“已删除”文件夹,尽管我成功了承诺删除它。) – Kalle 2012-03-28 22:22:24

+1

@Shaji:我理解你的情况。但是,由于这个错误,我仍然可以承诺吗?或者无论如何,请告诉我。谢谢。 – 2014-06-27 07:47:01

3

我刚刚在我自己的存储库中修复了这个问题。我在Windows上使用TortoiseSVN的,所以我不知道到底是什么命令,这相当于在命令行上,但这里是我所做的:

有问题的文件夹名为lib,这是由于以复加。

  • 首先我解开加,让SVN不再关注 吧。
  • 然后,我使用Windows上下文菜单将其重命名为libs,这并不重要,添加它并成功提交。
  • 最后,我使用TortoiseSVN的上下文菜单(这可能很重要)将其重命名为lib,并再次提交。
3

我刚才也遇到了这个问题,并用这种方法解决了这个问题。所以我把它记录在这里,我希望它对其他人有用。

场景:

  1. 之前,我提交的代码,修改:100
  2. (别人提交的代码...修改增加至199)
  3. 我(忘了运行 “SVN了” ,)提交代码,现在我的修订版本:200
  4. 我运行“svn up”。

发生错误。

解决方案:

  1. $ MV current_copy copy_back#将当前的代码复制
  2. $ svn签current_copy#检查它再次
  3. $ CP copy_back/current_copy#恢复您的修改
56

我修复它的最快捷方式是复制受影响的文件夹,并使用替代名称进行提交。然后svn mv duplicateFolder originalFolder。挺容易。

因此,采取文件夹1,并作出folder1Copy:

svn delete folder1 
svn add folder1Copy 

提交和更新:

svn mv folder1Copy/ folder1/ 

再次提交,它的固定。

+6

这对我来说很好,比处理第二份工作拷贝简单得多。 – Justin 2012-05-25 01:39:19

+0

尝试了很多东西,这工作:D干杯大耳朵 – 2012-07-10 08:58:58

+0

希望'提交和更新'不是一个文字命令行...在Unix中,将尝试并行执行两个。 – LarsH 2012-10-04 17:40:57

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" 
+0

+1为'从轨道上运行' – weaveoftheride 2012-12-06 11:43:30

+0

这是唯一可以确定的方法。 – TomDestry 2014-05-29 19:32:36

0

当前加入目录已经在存储库中提交。因此,删除存储库中的目录并再次提交相同的目录。

10

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

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

cd libaries 
svn up 

(什么也没有发生)。

但与实际名称更新:

svn update fof 

的伎俩,它已更新。所以我将我的(手动tar归档的)工作副本展开并重新发布。简单的解决方案。

+0

同意这是最简单的。只需做“svn up [folder]”而不是“svn up”。 – Dimitris 2013-08-16 14:20:09

+0

该解决方案适用于我。谢谢。 – 2015-08-13 14:16:45

0

我遇到了同样的问题,并能够通过解决它:

  1. 将文件夹复制到另一个地方。
  2. 从复制的文件夹
  3. 删除.svn文件右键单击原始文件夹,并选择“SVN结帐”
  4. 如果你不能找到(3),那么你的情况比我的不同。
  5. 查看REPO-BROWSER上的目录是否正确。对我而言,这是原因。
  6. 结账
  7. 从复制的文件夹中取回文件到原始目录中。
  8. 提交。
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 

您刚才提到的错误正是您使用的Non-members may check out a read-only working copy anonymously over HTTP状态。因此,你目前无法承诺或做任何事情。

你必须使用Project members authenticate over HTTPS to allow committing changes的东西。

现在就好了。

0

这意味着您试图放在svn上的文件夹/文件已经存在。我的建议是,在做任何事之前,只需右键单击文件夹/文件并单击回购浏览器。通过这样做,您将能够看到svn上已经存在的所有文件/子文件夹等。如果所需的文件/文件夹不存在于svn中,那么您只需删除(在进行备份后)您要添加的文件,然后运行更新。