代码之家  ›  专栏  ›  技术社区  ›  Amitabh

svn Error: a versioned directory of the same name already exists

  •  9
  • Amitabh  · 技术社区  · 14 年前

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

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

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

    5 回复  |  直到 11 年前
        1
  •  10
  •   the_mandrill    11 年前

    如果您在分支上创建了一个目录(即使我认为您还没有签入该目录),但同时也有人在主干上创建了一个同名目录,那么您经常会看到这种情况。所以当你从一个分支切换到另一个主干时,它会试图检查主干目录的版本,但是它不能,因为它已经存在,所以它不想破坏你的版本。

    编辑:

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

    编辑2:

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

        2
  •  3
  •   Chris Thornton    14 年前

    我怀疑\path \ to \ the \目录在分支中不存在,但在主干中确实存在。可能是新加在后备箱上的?当您切换时,SVN认为应该将它添加到您的本地目录中,因为它不在(应该是)您要切换的分支中。但它还是在那里。这可能是先前开关没有正确检查的结果。也就是说,你以前做过这个开关,然后当你从后备箱切换回分支时,你没有清理积垢。所以现在有了剩余的目录,它不希望看到它。

        3
  •  2
  •   ryanprayogo    14 年前

    也许吧 Path/To/The/Directory 您当前的分支中不存在,但它确实存在于主干中?

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

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

    作为两个不同的目录。这通常发生在某人更改目录名的情况下。

        4
  •  2
  •   Jesper Rønn-Jensen    12 年前

    一个简单的解决方案是 svn switch --force 旗帜。

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

    svn switch --force ^/trunk
    
        5
  •  0
  •   datico    11 年前

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

    • SVN将目录切换到存储库中的正确路径(如果它没有指向那里)。
    • 将目录中的.svn隐藏文件夹移动到某个安全位置(桌面)。
    • SVN清理并更新父目录。 更新可能会在某些子目录上导致相同的错误。忽略这一点。
    • 将在目录中创建一个新的.svn隐藏文件夹。将原来的.svn隐藏文件夹移回目录中,覆盖新.svn文件夹的现有内容。 我不记得我是因为什么错误才这么做的,还是因为我有预感,不管怎样,这似乎是个骗局。
    • SVN再次更新目录。
    • 哇!

    注意,在一个系统上至少有一次,这个技巧会导致显示所有子目录/文件?.从子目录中删除.svn文件夹,然后再次清理/更新父目录。

    不知道这是什么巫毒,但我承诺改变和更新后的各种系统,他们似乎都很高兴。

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

    /foo是一个svn:external到/newfoo/bar,这个安排需要撤销,所以/newfoo/bar被移动并重命名为/foo。

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