如何解决“本地编辑,更新后传入删除”消息


293

当执行a时svn status .,我得到以下信息:

!     C auto-complete-config.elc
      >   local edit, incoming delete upon update
!  +  C auto-complete.elc
      >   local edit, incoming delete upon update
!  +  C popup.elc
      >   local edit, incoming delete upon update
!  +  C fuzzy.elc
      >   local edit, incoming delete upon update

基本上,这些文件不应该在存储库中。开发人员已将其删除。然后,我认为我是svn rm ...在错误之后对事实进行了处理(应该这样做svn update .)。

所以现在,当我这样做时svn status .,我会收到这些树冲突消息。

我在这里找到了该文档但不确定如何根据该文档“合并”它。

如何摆脱它们?

我认为我的工作副本与存储库同步。不知道为什么这些消息显示。据我所知,应该删除这些文件并删除它们。我曾尝试过svn update .svn revert .但是当我这样做时仍然收到此消息svn status .


1
lesmana的答案也适用于该消息"local missing or deleted or moved away, incoming dir edit upon merge"
战争黑猩猩

Answers:


434

简洁版本:

$ svn st
!  +  C foo
      >   local edit, incoming delete upon update
!  +  C bar
      >   local edit, incoming delete upon update
$ touch foo bar
$ svn revert foo bar
$ rm foo bar

如果冲突是有关目录,而不是文件,然后替换touchmkdir,并rmrm -r


注意:以下情况也可以使用相同的步骤:

$ svn st
!     C foo
      >   local delete, incoming delete upon update
!     C bar
      >   local delete, incoming delete upon update

长版:

当您在其他人删除文件并先提交后编辑文件时,会发生这种情况。作为良好的svn公民,您需要在提交之前进行更新。现在您有冲突。意识到删除文件是从工作副本中删除文件的正确做法。现在,svn不再是内容,而是抱怨本地文件丢失,并且存在冲突的更新,最终希望看到文件已删除。干得好SVN。

如果svn resolve不行,不管什么原因,你可以做到以下几点:

初始情况:本地文件丢失,更新冲突。

$ svn st
!  +  C foo
      >   local edit, incoming delete upon update
!  +  C bar
      >   local edit, incoming delete upon update

重新创建冲突的文件:

$ touch foo bar

如果冲突与目录有关,则替换touchmkdir

新情况:要添加到资源库的本地文件(是的,svn,无论您说什么),更新仍然存在冲突。

$ svn st
A  +  C foo
      >   local edit, incoming delete upon update
A  +  C bar
      >   local edit, incoming delete upon update

将文件恢复为svn喜欢的状态(即已删除):

$ svn revert foo bar

新情况:svn未知的本地文件,更新不再冲突。

$ svn st
?       foo
?       bar

现在我们可以删除文件:

$ rm foo bar

如果冲突与目录有关,则替换rmrm -r

svn不再抱怨:

$ svn st

做完了


8
当目录冲突时也可以使用。代替touch foo bar而是执行mkdir foomkdir bar。其他一切都一样。
Vipin Johney

您可以svn st | grep ! | cut -f 7 -d' ' | xargs touch用作接触所有丢失文件的衬板
Tibor Blenessy 2013年

请记住,对于目录也要这样做rm -r foo bar(或者rmdir foo bar在Windows上,或者如果您喜欢Windows)。
trysis

这个答案救了我的理智。谢谢。
山姆

159

尝试使用解决冲突

svn resolve --accept=working PATH

谢谢。这似乎是正确的解决方案。(之前不知道“ resolve”选项。我将其标记为答案。尽管由于某种原因,该选项对我不起作用,可能是因为我的工作副本树已损坏或什么都没有...最终我解决了它仅通过删除目录,并做了更新。
Xah李

1
最初它对我不起作用,因此我在一个临时文件夹中签出了svn分支的另一个副本。然后我删除了引起冲突的PATH并提交了更改。之后,我返回到原始副本并运行此命令。它处理了消息“ PATH的已解决冲突状态”,该方法非常
有用

我的理解是,原始文件是否已删除都没有关系,因为“解决”仅适用于工作副本。
govi 2012年

对我来说是完美的解决方案
SergioÁlvarez2013年

20

我刚遇到同样的问题,我发现

$ svn revert foo bar

解决了问题。

svn resolve对我不起作用:

$ svn st
!  +  C foo
      >   local edit, incoming delete upon update
!  +  C bar
      >   local edit, incoming delete upon update

$ svn resolve --accept working
svn: Try 'svn help' for more info
svn: Not enough arguments provided

$ svn resolve --accept working .

$ svn st
!  +  C foo
      >   local edit, incoming delete upon update
!  +  C bar
      >   local edit, incoming delete upon update

$ svn resolve --accept working foo
Resolved conflicted state of 'foo'

$ svn st
!  +    foo
!  +  C bar
      >   local edit, incoming delete upon update

2

如果你还没有发生冲突的目录中的任何改变,你也可以rm -rf conflicts_in_here/svn up。这至少对我有用。


1

您可以强制将本地目录还原为svn。

 svn revert -R your_local_path

谢谢你,还帮我解决A + C path/to/dir> local dir edit, incoming dir delete or move upon update
RAM237

0

因此,您可以只还原已删除的文件,但要记住,如果您正在使用设置了工程文件的任何类型的项目(例如iOS),还原文件会将其添加到系统文件夹结构中,而不是工程文件结构中。在这种情况下,可能需要其他步骤


0

当我们尝试合并来自错误目录的另一个分支更改时,经常会发生此问题。

例如:

Branch2\Branch1_SubDir$ svn merge -rStart:End Branch1
         ^^^^^^^^^^^^
   Merging at wrong location

执行时引发的冲突是:

Tree conflict on 'Branch1_SubDir'
   > local missing or deleted or moved away, incoming dir edit upon merge

而当你选择q退出分辨率,你的地位:

 M      .
!     C Branch1_SubDir
      >   local missing or deleted or moved away, incoming dir edit upon merge
!     C Branch1_AnotherSubDir
      >   local missing or deleted or moved away, incoming dir edit upon merge

显然,这意味着合并包含与Branch1_SubDir和相关的更改Branch1_AnotherSubDir,并且无法在内部找到这些文件夹Branch1_SubDir(显然目录不能位于其内部)。

首先如何避免此问题:

Branch2$ svn merge -rStart:End Branch1
 ^^^^
Merging at root location

简单的解决办法针对此问题,对我的工作:

svn revert -R .
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.