svn错误:已存在同名的版本目录

svn错误:已存在同名的版本目录,svn,windows-7,tortoisesvn,Svn,Windows 7,Tortoisesvn,我正在尝试将本地文件夹从分支切换到主干。我得到以下错误 Failed to add directory 'Drive:\Path\To\The\Directory' a versioned directory of the same name already exists 这个问题的解决方案是什么?我怀疑\Path\To\the\目录不存在于分支中,但存在于主干中。可能是新加的吧?当您切换时,SVN认为应该将其添加到您的本地目录中,因为它不(应该)在您要切换的分支中。但它还是在那里。这可能是由

我正在尝试将本地文件夹从分支切换到主干。我得到以下错误

Failed to add directory 'Drive:\Path\To\The\Directory'
a versioned directory of the same name already exists

这个问题的解决方案是什么?

我怀疑\Path\To\the\目录不存在于分支中,但存在于主干中。可能是新加的吧?当您切换时,SVN认为应该将其添加到您的本地目录中,因为它不(应该)在您要切换的分支中。但它还是在那里。这可能是由于之前的切换没有正确的检查。i、 你以前做过这个切换,然后当你从主干切换回分支时,你没有清理积垢。所以现在剩下的目录已经存在,它不希望看到它。

可能
Path/to/the/directory
在当前分支中不存在,但它确实存在于主干中

另一个可能的问题是,当SVN服务器运行区分大小写的OS(*nix)时,您使用的是Windows。在这种情况下,SVN服务器将考虑:

Path/To/The/Directory
Path/To/The/directory

作为两个不同的目录。这通常发生在有人对目录名进行大小写更改时。

如果您在分支上创建了目录(即使我认为您没有签入),但同时有人也在主干上创建了相同名称的目录,则通常会看到这种情况。所以,当您从一个分支切换到另一个主干时,它会尝试签出该主干的目录版本,但它无法签出,因为它已经存在,所以它不想丢弃您的目录版本

编辑:

解决此问题的最佳方法是在工作副本中重命名此目录,然后进行更新。更新后,您可以决定是否需要将内容复制到新创建的目录中

编辑2:


没有一种SVN自动解决此问题的好方法。听起来像是您在工作副本(当前已在分支上签出)中创建了此文件夹,而其他人在主干上创建了此名称的文件夹。当你切换时,它试图创建新的目录,但它不能,因为你已经有了一个。我认为唯一的解决方法是暂时重命名目录,然后切换,然后比较两个目录的内容,看看是否有额外的文件需要添加或合并。

一个简单的解决方案是使用
svn switch
--force
标志

例如,切换到分支后,当我切换回主干时,我看到了错误。这解决了我的问题:

svn switch --force ^/trunk

要在保留目录的同时修复此错误,我发现以下技术有效:

  • SVN将目录切换到存储库中的正确路径(如果它尚未指向该路径)
  • 将目录中的.svn隐藏文件夹移动到某个安全位置(桌面)
  • SVN清理并更新父目录。更新可能会在某些子目录上导致相同的错误。忽略这一点
  • 将在目录中创建一个新的.svn隐藏文件夹。将原始.svn隐藏文件夹移回目录中,覆盖新.svn文件夹的现有内容。 我不记得我这样做是因为一些错误,还是出于直觉……无论如何,它似乎起到了作用
  • SVN再次更新目录
请注意,在一个系统上至少有一次,此技巧会导致所有子目录/文件显示?。从子目录中删除一个.svn文件夹并再次清理/更新父文件夹就成功了

我不知道这是什么巫毒,但我后来进行了更改并更新了各种系统,他们似乎都很高兴

仅供参考,由于一种不寻常的情况,我进入了这种状态:

/foo是一个svn:external to/newfoo/bar,这种安排需要撤销,因此/newfoo/bar被移动并重命名为/foo

  • 我删除了/pointing/foo上的svn:external属性并提交
  • 我使用TortoiseSVN的存储库浏览器首先将/newfoo/bar移动到/bar,然后将/bar重命名为/foo
  • 本地副本上的SVN更新首先导致错误消息,即当/foo存在时(或类似情况下),/foo指向/newfoo/bar
  • I SVN将/foo切换到新路径/foo
  • 现在SVN更新导致“同名版本目录已存在”错误

此答案未能给出问题的正确解决方案。你知道如何解决这个问题吗?(我目前遇到了这个问题,我最好的解决办法是进行一次干净的结帐,这非常耗时)我遇到了重命名不是一个好选择的情况。有办法修理吗?