14

[赏金系统违背我的意愿自动选择的答案]

我正在使用 subclipse,并且总是在 Eclipse 中删除一个文件夹并尝试提交它时,会出现以下错误:

svn: Item <folder> is out of date
svn: DELETE of <folder>: 409 Conflict (http://myintranet)

通过命令行删除和提交工作正常,但是通过 subclipse 执行它有什么问题?还有人遇到这个问题吗?

(我在 Ubuntu 9.10 和 10.04;最后一个 Eclipse 版本;和 subclipse 1.4 中遇到了这个问题——因为 subclipse 的下一个版本有更多的错误)

--updated:当我删除文件夹而不是文件时

4

7 回答 7

39

Subclipse FAQ没有解决这个问题吗?

每当您在错误消息中看到“过期”时,这意味着存储库中项目的修订版本比本地工作副本中的副本更新解决方案总是运行更新,以便您的工作副本与存储库保持同步,然后再次提交(假设更新没有产生任何冲突)

  • 对于文件,这通常很容易理解这是如何发生的以及为什么会发生。
  • 但是,Subversion 也会对文件夹进行版本控制,而且通常是文件夹最常发生此问题。
    Subversion 不允许您删除/重命名文件夹或更改其版本化属性,除非文件夹的本地副本位于存储库中文件夹的 HEAD 修订版中。

您的下一个问题可能是:
“好吧,我也许可以理解,但是为什么我的文件夹已经过时了?我是唯一在这个存储库中工作的人。

这是一个有效的问题,答案在于 Subversion 的工作方式。
当您提交对文件的更改时,工作副本中文件的修订版会在提交完成时更新为新修订版,但不会更新该文件的父文件夹的版本。
这是因为该文件夹中的其他文件可能已经添加/删除,并且在您运行更新之前,该文件夹并不是真正的新版本。
这称为“混合修订工作副本”。

总之,答案总是进行更新,以便将文件夹或文件更新到其HEAD修订版。


关于“混合修订工作副本”:

一种特殊的灵活性是能够拥有一个工作副本,其中包含混合了不同工作修订号的文件和目录。

Subversion 的基本规则之一是“推动”动作不会导致“拉动”,反之亦然。
仅仅因为您已准备好向存储库提交新更改并不意味着您已准备好接收其他人的更改。

事实是,每次运行 svn commit 时,您的工作副本都会包含一些修订版本
您刚刚提交的内容被标记为具有比其他所有内容更大的工作修订版。在几次提交之后(中间没有更新),您的工作副本将包含完整的修订版本

(这就是为什么,我相信,您无法在删除文件夹的后续提交中重现您的“过时”消息:您的更新确实解决了“混合修订”状态。)

混合修订有局限性

您不能提交对未完全更新的文件或目录的删除
如果存储库中存在更新版本的项目,您的删除尝试将被拒绝,以防止您意外破坏尚未看到的更改。

于 2010-05-20T20:42:32.643 回答
6

我认为如果您在此之前更新它应该可以工作..它确实对我有用

于 2010-05-10T18:53:20.047 回答
3

有一个简单的解决方案,无需安装一些额外的软件。我也有这个“问题”,你可以做的是:

1) 打开 SVN 存储库视图 2) 转到您要删除的文件夹并将其删除 3) 返回 java 视图 4) 更新您实际删除的项目中的文件夹/更新您的项目也应该有效

这解决了我的问题,因为更新只检索了我删除的文件

于 2011-07-13T11:13:38.820 回答
2

汤姆,

您可能想尝试 TortoiseSVN,并手动更新项目工作区。在硬盘中找到项目目录的位置,然后尝试 TortoiseSVN(或命令行,如果它是您的偏好)进行更新。

这个问题的一个常见原因是在没有“通知”SVN 的情况下删除目录。例如,如果您使用操作系统而不是使用 SVN 手动删除目录,则会遇到此问题。

如果您在安装 subversion 插件之前删除了该目录,但该项目已存在于存储库中,您将尝试此问题。在这种情况下,一个解决方案是重新创建目录,更新/提交,然后再次删除目录。

祝你好运。

于 2010-05-10T19:07:21.797 回答
2

Subclipse 有很多这样的问题。它工作 90% 的时间,然后它就不能正常工作!我正在使用 subclipse,因为它很好地集成到了 eclipse 中,当我遇到问题或 svn 中需要一些更大的动作(比如合并一些分支)时,我使用 Tortoisse。

我有像你这样的目录的东西。然后我就像@luiscolorado 建议的那样运行 TortoiseSVN,它有帮助。Tortoise 是一个非常棒的工具(它有很多很棒的功能,可以用于区分、应用补丁、获取补丁等等。)。

今天我删除文件时遇到问题,有人更改了同一个文件!然后 subclipse 显示冲突(到目前为止一切正常),所以我想恢复!但是随后缺少还原按钮(在冲突模式下消失!)所以我必须进行合并,并且合并不起作用,会引发某种错误。我没有费心去阅读(也许我应该阅读并将它作为一个 bug 提交给 subclipse 维护者;-(),我知道乌龟会工作,你知道吗,它工作了。有一个 REVERT 选项。

所以@Tom Brito,试试命令行,试试 Tortoisse,然后你可以查看 subclipse 更改日志并提交错误。我认为 subclipse 只是忘记向我们展示一些目录更改和更新(或者它被设计为不这样做?),但我可能错了。

于 2010-11-30T15:12:30.937 回答
2

我对此的解决方案是

  1. 删除文件夹中的所有项目
  2. 提交到存储库
  3. 将文件夹更新为 HEAD
  4. 在 Eclipse 中删除文件夹
  5. 提交到存储库

也许有点麻烦,但它总是有效的

于 2011-02-22T20:39:30.063 回答
0

在相同情况下唯一的工作方式是通过命令行。子剪辑仍然不完美..

于 2010-07-29T13:08:16.583 回答