如何解决“本地编辑,更新时传入删除”消息
Posted
技术标签:
【中文标题】如何解决“本地编辑,更新时传入删除”消息【英文标题】:How to resolve "local edit, incoming delete upon update" message 【发布时间】:2010-11-30 20:03:02 【问题描述】:当我执行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 .
时仍然收到此消息。
【问题讨论】:
lesmana 的回答也适用于消息"local missing or deleted or moved away, incoming dir edit upon merge"
【参考方案1】:
短版:
$ 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 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
完成。
【讨论】:
这也适用于目录冲突。用 mkdir foo 和 mkdir bar 代替 touch foo bar。其他一切都一样。 你可以使用svn st | grep ! | cut -f 7 -d' ' | xargs touch
作为一个衬垫来触摸所有丢失的文件
记住目录也可以rm -r foo bar
(或者rmdir foo bar
在Windows上或者如果你喜欢Windows)。
这个答案挽救了我的理智。谢谢。【参考方案2】:
尝试使用解决冲突
svn resolve --accept=working PATH
【讨论】:
谢谢。这似乎是正确的解决方案。 (以前不知道“解决”选项。我将其标记为答案。虽然,由于某种原因对我不起作用,可能是因为我的工作副本树已损坏或诸如此类......最后我解决了它只需删除目录并进行更新。 它最初对我不起作用,所以我在一个临时文件夹中检查了另一个 svn 分支的副本。然后我删除了导致冲突的 PATH 并提交了更改。之后我回到我的原始副本并运行这个命令。它与消息“已解决 PATH 的冲突状态”一起工作,谢谢 :) 我的理解是,如果原始文件被删除或不在存储库中,这无关紧要,因为“解决”仅适用于工作副本。【参考方案3】:我刚遇到同样的问题,我发现了
$ 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
【讨论】:
【参考方案4】:如果您没有在冲突目录中进行任何更改,您也可以先rm -rf conflicts_in_here/
,然后再svn up
。这至少对我有用。
【讨论】:
【参考方案5】:您可以强制将本地目录恢复为 svn。
svn revert -R your_local_path
【讨论】:
谢谢,还帮我解决了A + C path/to/dir
和> local dir edit, incoming dir delete or move upon update
【参考方案6】:
因此,您可以只恢复已删除的文件,但请记住,如果您正在处理具有已设置项目文件的任何类型的项目(如 ios),则恢复文件会将其添加到您的系统文件夹结构中,但不会添加到您的项目中文件结构。如果您在这种情况下,可能需要额外的步骤
【讨论】:
【参考方案7】:当我们尝试合并来自错误目录的另一个分支更改时,通常会发生此问题。
例如:
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 .
【讨论】:
以上是关于如何解决“本地编辑,更新时传入删除”消息的主要内容,如果未能解决你的问题,请参考以下文章