当我做
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 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
完成。
尝试使用
解决冲突svn resolve --accept=working PATH
我刚刚遇到了同样的问题,我发现了
$ 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
如果您尚未在冲突目录中进行任何更改,您也可以先
rm -rf conflicts_in_here/
,然后svn up
。这至少对我有用。
您可以强制将本地目录恢复到 svn。
svn revert -R your_local_path
因此,您可以恢复已删除的文件,但请记住,如果您正在处理具有设置项目文件的任何类型的项目(如 iOS),恢复文件会将其添加到您的系统文件夹结构中,但不会添加到您的项目文件结构中。如果您处于这种情况,可能需要采取额外的步骤
当我们尝试合并来自错误目录的另一个分支更改时,经常会发生此问题。
例如:
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 .