【问题标题】:"Phantom" directories in an SVN repositorySVN 存储库中的“幻影”目录
【发布时间】:2012-07-04 05:09:47
【问题描述】:

我以某种方式设法使 SVN 存储库进入错误状态。我已经移动了一个目录,现在我无法在新位置提交它。

svn status而言,目录未知(目录名称为type)。

$ svn状态 ?类型

当我尝试添加目录时,服务器说它已经存在。

$ svn 添加类型 svn: 警告: 'type' 已经在版本控制之下

如果我尝试更新目录,它又消失了。

$ svn 更新类型 svn:'。'不受版本控制

如果我尝试提交它,服务器会抱怨它的旧父目录不再存在。

$ svn commit type -m "移动类型" svn:提交失败(详情如下): svn: '/prior/trunk/src/nyu/prior/cvc3/theorem_prover/expression' 路径未找到

为了增加神秘感,目录的内容被标记为已修改。

$ svn 状态类型 A+型 M + 类型/IntegerType.java M + 类型/BooleanType.java M + 类型/Type.java M + 类型/RationalRangeType.java M + 类型/RationalType.java M + 类型/IntegerRangeType.java

如果我尝试从目录中更新,我会得到这个。

$ cd 类型 $ svn更新 svn:两个没有目标的顶级报告

从目录中提交会产生与上述相同的path not found 错误。

发生了什么,我该如何解决?

编辑:@Rob Oxspring 发现了我:我在 Eclipse 中移动东西太激进了。

更新:我接受@Rob Oxspring 的“不要那样做/重新开始”的回答并接受他的建议。如果有人能告诉我,我仍然很感兴趣:(a) 上述错误消息 的含义 是什么以及 (b) 如何真正修复 问题。

【问题讨论】:

    标签: svn


    【解决方案1】:

    在我看来type 是由一些支持 Subversion 的复制命令创建的,然后使用不支持 Subversion 的副本移动到当前目录。以我的经验,当包重构操作在 Eclipse 中链接在一起而没有在两者之间提交时,通常会发生这种事情。通常,当您复制/移动本地复制/移动的文件或文件夹时,Subversion 不能很好地处理它,尽管我认为 1.5 版可能会更好地处理它。

    为避免将来发生这种情况,请在这些步骤之间提交。如果您想隐藏中间提交,那么我建议您在分支上进行多步重构,然后在您之后的单个提交中将更改合并回主线。

    如果不是太多工作,那么我建议您返回一个干净的工作副本并重做您的更改,并在每个步骤之后提交。如果您很乐意丢失历史记录,即允许新的IntegerType.java 根本不链接到旧的IntegerType.java,那么您可以采用 BCS 建议的方法:

    • 将更改的文件移动到某个临时位置,删除所有 .svn 目录
    • 将您的工作副本更新为干净的工作状态
    • 将更改复制回您想要的位置
    • 提交生成的工作副本

    【讨论】:

      【解决方案2】:

      修复许多 SVN 错误的简单方法是通过操作系统将整个目录移走,更新以获取它的另一个干净副本,然后将您使用其他工具(WinMerge 等)更改的任何内容合并。

      在那之后,你可以做任何你想做的事,但要正确地做:)。

      【讨论】:

        【解决方案3】:

        您是从使用操作系统命令复制/移动目录开始的,还是从 SVN 开始的?如果您只是通过操作系统复制文件,您仍然会有包含指向旧位置的 SVN 信息的隐藏文件夹。

        【讨论】:

        • 谢谢。这个答案让我意识到我做了什么(尽管我使用 Eclipse 来移动目录。你会认为 Eclipse 会正确地做到这一点。清理起来真是一团糟,但你让我朝着正确的方向前进。保存了我的生活。
        【解决方案4】:

        我建议,删除(在 subversionso 之外使用 rm 或类似的),上面 test 的目录,然后在那里运行 svn update。

        也就是说,如果您不想像其他人建议的那样获得全新的工作副本,这可能是最安全的方法。

        【讨论】:

          【解决方案5】:

          我也遇到了同样的问题。我通过从受影响的文件夹中删除 .svn 文件夹来修复它。

          【讨论】:

            【解决方案6】:

            我的经验是,有时本地副本与存储库不同步。我通常通过上本地目录树来解决这个问题,从有问题的目录开始,并尝试在每个步骤中进行清理和更新。

            【讨论】:

              【解决方案7】:

              发生的情况是您检查了一个文件夹,然后在本地 'svn add'ed 和/或修改了该文件夹中的某些内容,但在您提交更改之前,原始文件夹已被移动(或删除)来自 SVN 存储库。

              您需要做的就是将当前的结帐切换到 SVN 存储库中的新位置。因此,假设您从 path/to/folder1/foo 中检出 foo 文件夹,并且该 foo 已移动到 path/to/foo,您只需要运行:

              $ svn switch path/to/foo
              

              就是这样... ;-)

              【讨论】:

              • 这听起来很合理。不幸的是,我现在没有一个工作副本来测试它...... ;-)
              猜你喜欢
              • 2013-07-25
              • 2011-04-14
              • 1970-01-01
              • 2018-11-19
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多