你如何克服svn'过时'的错误?

时间:2008-09-17 21:38:51

标签: svn

我一直在尝试在Subversion中将目录结构从一个位置移动到另一个位置,但是我收到Item '*' is out of date提交错误。

我已检出最新版本(据我所知)。除了mv命令之外,svn st -u没有任何差异。

30 个答案:

答案 0 :(得分:617)

我有时会在Windows上使用TortoiseSVN。对我来说,解决方案是svn update目录,即使没有下载或更新的修订版。它对元数据做了些什么,它神奇地修复了它。

答案 1 :(得分:40)

在尝试了所有显而易见的事情以及其他一些建议之后,没有任何运气,谷歌搜索导致了这个链接(链接不再起作用) - Subversion says: Your file or directory is probably out-of-date

简而言之,诀窍是转到 .svn目录(在包含违规文件的目录中),然后删除“all-wcprops”文件

在没有其他事情的情况下为我工作。

答案 2 :(得分:39)

我相信这个问题来自.svn文件。它在旧父母,新父母或旧父母中是不正确的。我会尝试回到你的起点。使用导出来获取文件夹的干净副本。将干净的副本移动到新位置,然后使用添加和删除来执行移动。这是手动执行SVN所做的事情,但它可能有用。

答案 3 :(得分:31)

我发现这对我有用:

svn update
svn resolved <dir>
svn commit

答案 4 :(得分:14)

尝试更新本地副本,并还原有问题的项目,但仍然出现“过期”错误。这有点原因:

svn update --force /path/to/dir/or/file

答案 5 :(得分:10)

我在几个文件夹中遇到了同样的问题,这就是我要做的事情:

1)在“团队同步”透视图中,右键单击文件夹&gt;覆盖和更新
2)再次删除文件夹
3)承诺并且快乐

答案 6 :(得分:5)

谢谢。那只是为我解决了。 svn update --force / path to filename /

如果本地目录中的最近文件相同,则没有提示。如果文件不同,它会提示输入tf,mf等...选择mf(我的全部)确保没有任何内容被覆盖,我可以在完成时提交。

杰 CompuMatter

答案 7 :(得分:5)

我设法通过点击更新按钮来解决它

答案 8 :(得分:4)

就像@ Alexander-Klyubin建议的那样,在存储库中进行移动。它也会更快,特别是如果您要移动大量数据,因为您不必再​​通过网络传输所有数据。

svn mv https://username@server/svn/old/ https://username@server/svn/new/

应该可以正常工作

答案 9 :(得分:3)

使用删除文件或路径 在执行命令之前执行更改的bk

sudo rm -r /path/to/dir/

之后:

svn up and commit or delete 

答案 10 :(得分:2)

你确定你已经检查了头部而不是较低版本吗?另外,您是否已完成更新以确保获得最新版本?

http://svn.haxx.se/users/archive-2007-01/0170.shtml上就此进行了讨论。

答案 11 :(得分:2)

如果你正在使用github svn网桥,很可能是因为github方面发生了一些变化。解决方案很简单,你只需要运行svn switch,它可以让它正确找到自己,然后更新,一切都会工作。只需从结帐的根目录运行以下内容

svn info | grep Relative 
svn switch path_from_previous_command
svn update

svn switch `svn info | grep Relative | sed 's_.*: __'`
svn update

此解决方案的基础来自Lee Preimesberger's blog

答案 12 :(得分:2)

直接在存储库中执行移动。

答案 13 :(得分:2)

至少还有一个原因是消息“过时”错误。在我的例子中,问题是.svn / dir-props是通过运行“svn propset svn:ignore -F .gitignore”创建的。首次。删除.svn / dir-props似乎是一个坏主意并且可能导致其他错误,因此最好使用“svn propdel”来清理错误的“svn propset”。

# Normal state, works fine.
> svn commit -m"bump"  
Sending        eac_cpf.xsl
Transmitting file data .
Committed revision 509.

# Set a property, but forget to commit.
> svn propset svn:ignore -F .gitignore .
property 'svn:ignore' set on '.'

# Edit a file. Should have committed before the edit.
> svn commit -m"bump"                   
Sending        .
svn: Commit failed (details follow):
svn: File or directory '.' is out of date; try updating
svn: resource out of date; try updating

# Delete the property.
> svn propdel svn:ignore .              
property 'svn:ignore' deleted from '.'.

# Now the commit works fine.
> svn commit -m"bump"     
Sending        eac_cpf.xsl
Transmitting file data .
Committed revision 510.

答案 14 :(得分:1)

尝试直接改变.svn。没有任何帮助,所以这是我的解决方案。

在Eclipse中&gt;窗口&gt;显示视图&gt; 历史记录我看到该文件不是最新版本,但我制作了多个svn“覆盖和更新”/“恢复”/删除文件和结帐。

所以我去了Package Explorer&gt;右键单击文件&gt; 替换为&gt;最新的存储库

“历史记录视图”中的另一个视图显示该文件现在位于最新版本。

答案 15 :(得分:1)

错误是因为您没有更新该特定文件,首先更新然后只能提交文件。

答案 16 :(得分:1)

将您的服务器和客户端升级到Subversion 1.9。

如果out of date错误在正常情况下不会随机发生,则在运行commit时,可能表示您使用的是过时且不受支持的Subversion 1.7或更早版本的客户端或服务器。

您应该升级服务器和客户端以解决问题。请参阅相关的Subversion 1.9发行说明条目: "Out of date" errors when committing over HTTPv1

答案 17 :(得分:1)

我这样做了,它对我有用:
1.备份文件。您只需将代码复制到文本文件即可 2.右键单击要提交的文件&gt;&gt;团队&gt;&gt;显示历史。 3.在&#34;显示历史&#34;面板您将看到该文件的所有修订版。右键单击文件的最新修订版&gt;&gt;获得修订:它将覆盖您当地的更改 4.现在,将您的代码与备份文件中的最新文件合并(步骤1)。
5.同步并提交新合并的文件。

答案 18 :(得分:1)

&#34;清理&#34;它会让你走上正轨。

右键单击svn文件夹并单击“清理”,如果出现该错误,请执行此操作。

答案 19 :(得分:1)

如果曾经通过简单地签出一个新的工作副本并替换.svn目录来解决类似的问题,该目录会使用这个新签出的错误抛出提交错误。我的理由是,在存储库损坏并从备份还原后,工作副本指向已还原的存储库中不存在的修订。还有“项目过期”错误。在提交之前更新工作副本并没有解决这个问题,但是如上所述替换了.svn。

答案 20 :(得分:1)

删除了几个包含某些文件的目录后,我随机收到了这个错误。我通过Netbeans删除了目录,并意识到它实际上没有删除它们。它似乎只删除了目录中的所有内容,并删除了对Netbeans中目录的引用。但它们仍然存在于文件系统中。确保它们已从文件系统中删除并再次尝试提交。

答案 21 :(得分:1)

我将dir移动到我的本地机器上以便保管,然后svn删除了愚蠢的目录,然后提交了。当我尝试从本地机器添加文件夹时,它仍然抛出错误(当我尝试重命名文件夹时,SVN移动做了同样的事情)。所以我还原了,然后我做了一个mkdir DIRNAME,添加并提交了。然后我添加了内容并提交了,并且它有效。

答案 22 :(得分:1)

您是使用svn mv还是mv移动它?我认为仅使用mv可能会导致此问题。

答案 23 :(得分:0)

在我的情况下,只删除本地版本并重新签出新副本是一种解决方案。

答案 24 :(得分:0)

我刚收到此错误。我建议您首先检查您的服务器上是否有原始文件。有时,更改不会在您的本地文件夹中进行。 如果这是您的情况,只需删除您的文件夹并再次结帐。

答案 25 :(得分:0)

要解决这个问题,我需要将问题还原到文件,并更新我的工作副本,之后我再次修改了文件,在这些步骤之后,错误不再发生了。

答案 26 :(得分:0)

我在commit目录中尝试trunk时得到了这个。从svn update目录执行trunk并未解决错误;但是,从父目录(svn update目录所属的位置)执行.svn确实解决了错误。

我对发生的事情的猜测(其中一个用例,可能有多种原因导致这个“svn:E160024:资源过期;尝试更新”):一直到trunk,有一个{{ 1}}目录。我从GitHub中将branches拉入branches/branch-1。除master之外,从父目录(即我的工作副本的根目录)而不是svn update执行trunk似乎已在branches中执行了某些操作。当我再次尝试trunk时,没有错误。

然而,正如我上面所说,这可能是许多其他案例之一。

旁注:与某人建议的不同,我不相信在commit目录中手动播放是个好主意。

答案 27 :(得分:0)

我在尝试提交某些文件时遇到此错误,只是它是我工作副本中不存在的文件/文件夹。我真的不想经历移动文件和重新检查的麻烦,最后,我最终编辑了.svn / entries文件并删除了有问题的目录引用。

答案 28 :(得分:0)

当我使用来自主干的文件更新早期版本的分支时发生这种情况。我使用Windows资源管理器从我的trunk checkout文件夹中复制文件夹,然后将它们粘贴到我发布分支checkout文件夹的Eclipse视图中。现在Windows资源管理器配置为不显示以“。”开头的“隐藏”文件,因此我忘记了所有不正确的.svn文件被粘贴到我的发布分支checkout文件夹中。卫生署!

我的解决方案是吹走受损的Eclipse项目,再次检查它,然后更仔细地复制新文件。我还更改了Windows以显示“隐藏”文件。

答案 29 :(得分:-1)

更有意思的是:

1)我将修改代码复制到记事本中。 2)接下来,更新文件。 3)在更新的文件中复制记事本的代码。 4)在svn中提交。