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

当我执行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 .时,我仍然得到这个消息。

168501 次浏览

试着用武力解决冲突

svn resolve --accept=working PATH

短版:

$ 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

完成了。

如果你没有在冲突目录内做任何更改,你也可以rm -rf conflicts_in_here/,然后svn up。这至少对我有用。

我也有同样的问题,我发现

$ 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

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

您可以强制将本地目录恢复到svn。

 svn revert -R your_local_path

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

例:

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

当你选择决议辞职时,你得到的状态为:

 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 .