2010-07-21 146 views
39

我有一个问题,看起来很简单,但很难解决。删除目录后,我收到了提到的错误。我还没有找到解决冲突的解决方案。这是如何发生的:SVN提交失败:目录已过期

 
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脚本中是'可行'?

回答

58

只要做一个svn update然后你的提交应该工作。

+2

打我给它。另外,更新应该是您正常工作流程的一部分。我通常在提交之前更新。 – hometoast 2010-07-21 10:52:36

+0

这是我想到的一个明显的解决方案。但是在svn更新之后,我得到:svn commit - >'\ dir'仍然存在冲突 – 2010-07-21 11:19:12

+0

,但是'svn update'会删除工作目录中的更改,因此您所有的工作都将被删除,然后再提交。我对吗? – VextoR 2011-09-01 13:54:29

1

你只需要更新,然后提交

+1

这是我想到的明显解决方案之一。但在svn更新后,我得到:svn commit - >'\ dir'仍然存在冲突 – 2010-07-21 11:19:37

1

你有没有做最后的承诺之前试过svn up dir

+1

这是我想到的一个明显的解决方案。但是SVN更新后,我得到:SVN提交 - >“\目录”处于冲突 – 2010-07-21 11:27:30

57

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

颠覆跟踪最新的版本号为每个文件和目录分别。 无论何时提交文件更改,父目录的修订都会在回购中发生变化,但工作副本仍旧在其旧版本中具有该目录。

因此,在添加文件之后,您的方案中回购库中的父目录具有比您的工作副本更高的修订版。 当您尝试删除在过时的版本上工作的目录时。

要解决:

做一个svn update添加文件后,但删除目录之前。

一般情况下,如果您不想引入其他人的更改,可以将更新限制到目录本身:svn up --depth empty dir

+0

非常感谢的是,@Stephen弗里德里希 - 只是想说明,这样做'整个目录的SVN mv'时(这是什么给我带来了到这篇文章),添加和删除发生在一个步骤中;不幸的是,似乎“在添加文件之后进行svn更新,但是在删除目录之前”不能在这种情况下应用。然而,对我而言,工作是手动删除'旧'目录(使用rm -rf),然后再次提交。干杯! – sdaau 2011-11-18 04:30:47

+0

我会很乐意提出这个答案,使其达到顶峰。 – Brandon 2014-10-07 18:06:21

+0

@Stephen Friedrich,如果您在意大利贝加莫附近发生问题,请致电我欠你一顿晚餐...... – 2016-09-07 07:37:10

0

为了解决这个问题,我使用了'svn revert',然后再次执行提交,它应该删除当时执行'svn delete'中的内容并再次提交。我得到这个问题试图重命名一个目录,但希望这将工作。

0

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

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