当我做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…事后误操作(应该做SVN更新的。相反)。

现在,当我执行svn status .时,我得到这些树冲突消息。

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

如何摆脱它们?

我认为我的工作副本与存储库是同步的。不知道为什么这些信息显示。据我所知,这些文件应该被删除。我尝试了svn update。和SVN还原。但我仍然得到这条消息时,我做svn状态..


当前回答

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

Ex:

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 .

其他回答

试着用武力解决冲突

svn resolve --accept=working PATH

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

Ex:

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 .

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

短版:

$ 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解决不了,无论出于什么原因,都可以采取以下措施:

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

$ 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

完成了。

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

 svn revert -R your_local_path