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

时间:2010-11-30 20:03:03

标签: svn

当我做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 .时,我收到了这些树冲突消息。

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

如何摆脱它们?

我认为我的工作副本与存储库同步。不知道为什么这些消息会显示出来。据我所知,这些文件应该删除并删除。我尝试了svn update .svn revert .但我仍然在svn status .时收到此消息。

7 个答案:

答案 0 :(得分:410)

简短版本:

$ 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

如果冲突是关于目录而不是文件,则将touch替换为mkdir,将rm替换为rm -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

如果冲突与目录有关,请将touch替换为mkdir

新情况:要添加到存储库的本地文件(是的,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

如果冲突与目录有关,请将rm替换为rm -r

svn不再抱怨:

$ svn st

完成。

答案 1 :(得分:158)

尝试使用

解决冲突
svn resolve --accept=working PATH

答案 2 :(得分:19)

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

$ 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

答案 3 :(得分:2)

如果您未在冲突的目录中进行任何更改,您还可以rm -rf conflicts_in_here/,然后svn up。这至少对我有用。

答案 4 :(得分:0)

所以你可以恢复你删除的文件,但是请记住,如果你正在使用设置项目文件(如iOS)处理任何类型的项目,恢复该文件会将其添加到系统文件夹结构中但不会添加到项目中文件结构。如果你是这种情况可能需要额外的步骤

答案 5 :(得分:0)

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

 svn revert -R your_local_path

答案 6 :(得分: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_SubDirBranch1_AnotherSubDir相关的更改,并且在Branch1_SubDir内找不到这些文件夹(显然目录不能在其内部)

如何首先避免此问题:

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

此问题的最简单修复对我有用:

svn revert -R .