如何克服svn“过时”错误?


336

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

我已经签出了最新版本(据我所知)。svn st -u除了mv命令外,没有其他区别。


11
您是否尝试了svn?
Sklivvz

3
一个简单的问题避免者是:如果删除文件夹和内容,请先仅删除内容,即svn,然后再删除文件夹,然后再次svn。
Fattie 2014年

Answers:


636

我有时在Windows上使用TortoiseSVN来获得此功能。对于我来说,解决方案是svn update目录,即使没有要下载或更新的修订版。它对元数据起到了一定作用,从而神奇地对其进行了修复。


4
我更改了文件夹的svn:ignore属性,并开始获取过时错误。但是正如您所说,只需对其进行更新即可。
Sushant

4
当我尝试更新该目录时,出现“ svn:两个没有目标的顶级报告”的另一个原因是讨厌SVN。使用git时,我从来没有像移动目录这样的基本操作遇到过这种愚蠢的问题。
Dan Dascalescu 2010年

使用版本GUI时,我的父文件夹上出现“过期”错误。我更新了父文件夹,然后提交而没有错误。
milesmeow 2010年

1
这也是由更改svn引起的:对我而言忽略,并且svn update对其进行了修复。谢谢!
内森·史威文

8
在Subclipse中,使用“团队->更新为HEAD”。和我一起工作很好。
NeoRamza 2014年

42

在尝试了所有明显的操作以及此处的一些其他建议之后,没有任何运气,Google搜索导致了该链接(该链接不再起作用)-Subversion说:您的文件或目录可能已过期

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

什么也没做就为我工作。


做到了!谢谢!有人对这种情况如何发生以及如何避免它有任何建议?
杰西·巴纳姆

为我工作。我最终不得不删除所有“ all-wcprops”文件:find。-name all-wcprops -exec rm -rf {} \;
彼得·霍夫

我想您应该能够通过svn工具和选项解决此问题,而无需删除结构中的文件
2014年

+1,这是唯一对我有用的东西。其他解决方案则没有。
克莱顿·杜克斯

9
AINT工作对我来说,有没有all-wcprops在内部文件.sv目录
ulkas

39

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


4
Subversion实际上会先复制然后删除,这与在此处删除并添加非常不同。
SnakE

37

我发现这对我有用:

svn update
svn resolved <dir>
svn commit

为我工作,svn update以前没有做过,但是我有一个情况想要避免更新。(所以我只是解决了问题并做出了承诺,它确实起作用了)
BornToCode 2013年

这一直是我的处境之道,无济于事。谢谢!
texasdave

14

试图更新本地副本,并还原有问题的项目,但仍然出现“过期”错误。这样做是出于某种原因:

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

11

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

1)在“团队同步”透视图中,右键单击文件夹>覆盖和更新
2)再次删除该文件夹
3)提交并感到高兴


5

谢谢。这就为我解决了。svn update --force /路径到文件名/

如果本地目录中的最新文件相同,则不会出现提示。如果文件不同,则会提示输入tf,mf等...选择mf(我的文件已满)可确保没有内容被覆盖,并且在完成后可以提交。

Jay CompuMatter



4

就像@ Alexander-Klyubin建议的那样,在存储库中移动。它还将更快,尤其是如果您要移动大量数据时,因为您不必再​​次通过网络传输所有这些数据。

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

应该很好


我在一个svn up; svn mv命令系列中遇到了这个问题,这很好地解决了问题。谢谢。
DopeGhoti

3

在执行命令之前,先删除您的文件或路径,然后进行更改

sudo rm -r /path/to/dir/

之后:

svn up and commit or delete 



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.

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的博客



1

我将目录移到本地计算机进行安全保存,然后svn删除了愚蠢的目录,然后提交了。当我尝试从本地计算机添加文件夹时,它仍然引发错误(当我尝试重命名文件夹时,SVN移动执行了相同的操作)。所以我还原了,然后我做了一个mkdir DIRNAME,添加并提交。然后,我在其中添加了内容并提交,它起作用了。


1
我会避免更改存储库内容(svn删除),因为我的本地结帐已被损坏。
拉尔斯·诺钦斯基

1

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


1

如果曾经解决过类似的问题,只需简单地签出一个新的工作副本并替换为.svn目录,并使用此新签出的副本抛出提交错误。在我的情况下,原因是在存储库损坏并从备份还原后,工作副本指向的是还原的存储库中不存在的修订。还出现“项目过时”错误。在提交之前更新工作副本并不能解决问题,但是如上所述替换.svn可以解决问题。


1

我做到了,它为我工作:
1.备份您的文件。您可以简单地将代码复制到文本文件中。
2.右键单击要提交的文件>>团队>>显示历史记录。3.在“显示历史记录”面板中,您将看到该文件的所有修订版。右键单击文件的最新修订>>获取修订:它将覆盖您的本地更改。
4.现在,将您的代码与具有备份文件的最新文件合并(步骤1)。
5.同步并提交新合并的文件。


1

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

如果 out of date错误通常在正常情况下不应发生,则在运行commit时,它可能表明您使用的是过时且不受支持的Subversion 1.7或更旧的客户端或服务器。

您应该升级服务器和客户端以解决该问题。请参见相关的Subversion 1.9发行说明条目:通过HTTPv1提交时出现“过时”错误


1
Windows上的TortoiseSVN 1.8.8甚至发生了这种情况。更新到1.9有帮助。
Martin Pecka '16

1

错误是因为您没有更新该特定文件,而是先更新然后才可以提交该文件。


1

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

在Eclipse>窗口>显示视图> 历史记录中,我看到该文件不是最新的修订版,尽管我多次进行了SVN“覆盖和更新” /“还原” /删除文件并签出。

所以我去了Package Explorer>右键单击文件> Replace with> Repository中的Latest

历史记录视图中的另一个外观显示该文件现在处于最新修订版中。



0

当我使用主干中的文件更新了较早版本的分支时,发生了这种情况。我使用Windows资源管理器从主干结帐文件夹中复制文件夹,并将其粘贴到发行分支结帐文件夹的Eclipse视图中。现在,Windows资源管理器已配置为不显示以“。”开头的“隐藏”文件,因此我没有将所有不正确的.svn文件粘贴到发行分支签出文件夹中。h!

我的解决方案是删除损坏的Eclipse项目,再次将其检出,然后更仔细地复制新文件。我还更改了Windows以显示“隐藏”文件。


0

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


0

就我而言,仅删除本地版本并重新签出新副本是解决方案。


0

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


0

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


0

只需将svn升级到命令行,或者如果您在Windows中,请选择svn更新选项。

  • 完成此操作后,您就可以进行其他操作,例如提交和执行其他操作。

0

当我尝试committrunk目录中获取时,才得到此信息。svn updatetrunk目录执行操作无法解决错误;但是,svn update从父目录(该.svn目录所属的目录)进行操作确实解决了该错误。

我对发生的事情的猜测(其中,用例可能是“ svn:E160024:资源已过期;请尝试更新”的多种原因):到trunk,都有一个branches目录。我拉着branches/branch-1master从GitHub。这样做svn update从父目录(也就是我的工作拷贝的根),而不是trunk似乎已经做了branchestrunk。当我试图commit再次时,没有错误。

但是,正如我上面所说,这可能是许多其他情况中的一种。

旁注:与其他人的建议不同,我认为在.svn目录中手动播放不是一个好主意。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.