SVN提交失败:目录已过期

时间:2010-07-21 10:49:54

标签: svn commit

我有一个看似非常简单但很难解决的问题。删除目录后,我收到了上述错误。我还没有找到解决冲突的解决方案。这是它发生的方式:

svn add dir
svn add dir/file1
svn commit
svn add dir/file2
svn commit
svn delete dir
svn commit
--> commit failed  
--> Directory '/dir' is out of date

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

Commit failed
Directory '/dir' remains in conflict.

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

svn resolve --accept working dir
svn commit --> still fails
svn update
svn commit --> still fails
svn resolve --accept working dir
svn commit --> NO PROBLEM!

两个问题: - 任何人都可以解释这种行为,因为我对它很好奇 - 在更复杂的情况下,perl脚本中会出现此问题。任何人都可以在perl脚本中为我提供一个简单的“doable”解决方案吗?

10 个答案:

答案 0 :(得分:77)

只需制作一个svn update,然后您的提交即可。

答案 1 :(得分:58)

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

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

因此,在添加文件后的场景中,repo中的父目录的修订版本高于工作副本。 当您尝试删除处理过期版本的目录时。

要解决:

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

通常,如果您不想引入任何其他人的更改,则可以将更新限制为目录本身:svn up --depth empty dir

答案 2 :(得分:3)

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

答案 3 :(得分:2)

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

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

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

Right click on your project -> Team -> Commit

答案 4 :(得分:1)

您只需要更新然后提交

答案 5 :(得分:1)

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

答案 6 :(得分:0)

为了解决这个问题,我使用'svn revert'然后再次执行提交,这应该摆脱当时执行'svn delete'中的内容并再次提交。我在尝试重命名目录时遇到了这个问题,但希望这会有效。

答案 7 :(得分:0)

我面对新工作空间的类似问题:

$ 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

答案 8 :(得分:0)

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

答案 9 :(得分:0)

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