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

问题描述 投票:0回答:7

当我做

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 .
时,我仍然收到此消息。

svn
7个回答
451
投票

简短版:

$ 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

touch
是创建空文件的常见 UNIX 习惯用法。其核心
touch
用于更新文件时间戳。但作为副作用,如果文件不存在,它会创建空文件。


注意:同样的步骤也适用于以下情况:

$ 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

完成。


161
投票

尝试使用

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

21
投票

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

$ svn revert foo bar

解决了问题。

svn 解析对我不起作用:

$ 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

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 .
© www.soinside.com 2019 - 2024. All rights reserved.