【问题标题】:SVN commit failed: Directory out of dateSVN 提交失败:目录已过期
【发布时间】:2011-03-18 22:09:26
【问题描述】:

我有一个看起来很简单但很难解决的问题。删除目录后出现上述错误。我还没有找到解决冲突的解决方案。它是这样发生的:

svn 添加目录 svn 添加目录/文件1 svn 提交 svn 添加目录/文件2 svn 提交 svn删除目录 svn 提交 --> 提交失败 --> 目录 '/dir' 已过期

明显的解决方案'svn update'不起作用。在 svn update 之后,下一次提交失败:

提交失败 目录“/dir”仍然存在冲突。

同时我找到了一个解决方案,但是有点麻烦:

svn resolve --accept 工作目录 svn commit --> 仍然失败 svn更新 svn commit --> 仍然失败 svn resolve --accept 工作目录 svn commit --> 没问题!

两个问题: - 任何人都可以解释这种行为,因为我对此非常好奇 - 这个问题出现在 perl 脚本中,情况要复杂得多。谁能给我一个简单的解决方案,在 perl 脚本中是“可行的”?

【问题讨论】:

    标签: svn commit


    【解决方案1】:

    只需创建一个svn update,然后你的提交就可以工作了。

    【讨论】:

    • 打败我。除此之外,更新应该是您正常工作流程的一部分。我通常在提交之前更新。
    • 这是我想到的显而易见的解决方案之一。但是在 svn update 我得到: svn commit --> '\dir' 仍然存在冲突
    • 但是 'svn update' 会删除你工作目录中的更改,所以你所有的工作都将被删除,然后没有任何东西可以提交。我说的对吗?
    • svn update 不会删除任何更改。它将存储库中的更改与您的本地更改合并,以便稍后提交。但它永远不会删除任何更改。
    • 如果您想知道:我是 5 分钟前进行最后一次提交的人,没有人拥有提交权限,但 svn update 仍然有效......随便。
    【解决方案2】:

    如果我正确理解颠覆,问题是这样的:

    Subversion 分别跟踪每个文件和 目录 的当前版本。 每当提交对文件的更改时,repo 中父目录的修订版就会更改,但您的工作副本仍然具有旧修订版中的目录。

    因此,在您的方案中,添加文件后,repo 中的父目录的修订版本高于您的工作副本。 当您尝试删除使用过时版本的目录时。

    解决:

    在添加文件之后,但在删除目录之前执行svn update

    一般来说,如果您不想引入其他任何人的更改,您可以将更新限制在目录本身:svn up --depth empty dir

    【讨论】:

    • 非常感谢@Stephen Friedrich - 只是想指出,在对整个目录执行svn mv 时(这就是我写这篇文章的原因),添加和删除同时发生步;不幸的是,在这种情况下似乎无法应用“在添加文件后,但在删除目录之前执行 svn 更新”。但是,对我有用的是手动删除“旧”目录(使用rm -rf),然后再次提交。干杯!
    【解决方案3】:

    进行更新、清理然后提交。

    【讨论】:

      【解决方案4】:

      我想出了一个简单的方法来解决 Eclipse 上的问题:

      Right click on your project -> Team -> Update to HEAD
      

      然后按照相同的方式提交。

      Right click on your project -> Team -> Commit
      

      【讨论】:

        【解决方案5】:

        你只需要更新然后提交

        【讨论】:

        • 这是我想到的显而易见的解决方案之一。但是在 svn update 我得到: svn commit --> '\dir' 仍然存在冲突
        【解决方案6】:

        在进行最终提交之前,您是否尝试过svn up dir

        【讨论】:

        • 这是我想到的显而易见的解决方案之一。但在 svn update 我得到: svn commit --> '\dir' 仍然存在冲突
        【解决方案7】:

        为了解决这个问题,我使用了 'svn revert ' 然后再次提交,这应该删除 then do 'svn delete ' 中的内容并再次提交。我在尝试重命名目录时遇到了这个问题,但希望这能奏效。

        【讨论】:

          【解决方案8】:

          我在新工作区面临的类似问题:

          $ svn delete dir/file
          D         dir/file
          $ svn ci -m "comment1"
          Deleting       dir/file
          $ svn delete dir/
          D         dir
          $ svn ci -m "comment2"
          Deleting       dir
          svn: Commit failed (details follow):
          svn: Item 'dir' is out of date
          

          为了解决这个问题,我重新更新了源代码并使用了“删除 URL”命令:

          $ svn delete --force https://server/path.../dir
          $ svn update
          

          【讨论】:

            【解决方案9】:

            当您要提交一个文件并且同一文件也在 SVN 中更新时,就会发生这种情况。然后它就会发生冲突。所以你要做的就是复制你的更改并恢复文件。然后再次粘贴您的代码。然后你可以毫无问题地提交。

            【讨论】:

            • 在这种情况下,您不需要将代码粘贴回去,更新应附加任何更改,而不会中断您的工作副本(除非存在冲突)
            • @Prodigle 是的,你是对的,但有时当两个人 d=更改同一行代码时会发生冲突
            • 这就是为什么你有一个差异工具;P
            【解决方案10】:

            尝试在服务器上提交一个测试目录。 通常,当您从 SVN 删除任何存储库并且如果包含多个文件时,SVN 会记录更改但它处于暂停状态或更改需要时间来反映。 不用担心,只需等待几分钟,它就会开始反映。 尝试提交测试目录。 干杯。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2012-05-06
              • 2013-11-01
              • 2018-02-12
              • 2013-10-24
              • 1970-01-01
              • 1970-01-01
              • 2015-02-26
              • 1970-01-01
              相关资源
              最近更新 更多