Как разрешить сообщение «локальное редактирование, входящее удаление при обновлении»

293

Когда я делаю 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 ..

Ха Ли
источник
1
Ответ Лесманы также работает для сообщения"local missing or deleted or moved away, incoming dir edit upon merge"
Воинственный Шимпанзе

Ответы:

434

Укороченная версия:

$ 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

Готово.

lesmana
источник
8
Это также работает, когда конфликт для каталога. Вместо сенсорной панели foo делайте mkdir foo и mkdir bar . Все остальное тоже самое.
Випин Джонни
Вы можете использовать svn st | grep ! | cut -f 7 -d' ' | xargs touchкак один вкладыш для прикосновения ко всем отсутствующим файлам
Tibor Blenessy
Помните, для каталогов также делать rm -r foo bar(или rmdir foo barна Windows или, если вам нравится Windows).
trysis
Этот ответ спас мое здравомыслие. Спасибо.
Сэм
159

Попробуйте разрешить конфликт, используя

svn resolve --accept=working PATH
zellus
источник
Спасибо. это кажется правильным решением. (не знал о параметре «разрешить» раньше. Я пометил его как ответ. Хотя, по какой-то причине у меня не сработало, возможно, потому что мое дерево рабочих копий было повреждено или еще что-то ... в конце концов, я решил просто удалив
каталог
1
Изначально у меня это не сработало, поэтому я извлек другую копию ветки svn во временной папке. Затем я удалил PATH, вызвавший конфликт, и зафиксировал изменения. После этого я вернулся к своей исходной копии и выполнил эту команду. Работает с сообщением «Разрешено конфликтующее состояние PATH». Это работает, спасибо :)
Durin
Насколько я понимаю, это не имело бы значения, если оригинал был удален или нет в хранилище, потому что «разрешение» работает только на рабочей копии.
Гови
идеальное решение для меня
Серхио Альварес,
20

Я только что получил эту же проблему, и я обнаружил, что

$ 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
sligocki
источник
2

Если вы не внесли никаких изменений в конфликтующий каталог, вы можете сделать это rm -rf conflicts_in_here/и тогда svn up. Это сработало для меня по крайней мере.

Ты делаешь
источник
1

Вы можете принудительно вернуть ваш локальный каталог в SVN.

 svn revert -R your_local_path
Гордон Ма
источник
Спасибо, также помог мне решить A + C path/to/dirи> local dir edit, incoming dir delete or move upon update
RAM237
0

Таким образом, вы можете просто вернуть удаленный файл, но помните: если вы работаете с любым типом проекта с установленным файлом проекта (например, iOS), возврат файла добавит его в структуру вашей системной папки, но не в структуру файла вашего проекта. дополнительные шаги могут потребоваться, если вы в этом случае

CWineland
источник
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 .
Саурав Саху
источник