Як вирішити повідомлення про "локальне редагування, вхідне видалення після оновлення"


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.

Повинен 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 revert foo bar

Нова ситуація: локальні файли, не відомі svn, оновлення більше не суперечать.

$ svn st
?       foo
?       bar

Тепер ми можемо видалити файли:

$ rm foo bar

Якщо конфлікт стосується каталогів, замініть rmнаrm -r .

svn більше не скаржиться:

$ svn st

Зроблено.


8
Це також працює, коли конфлікт стосується Директорії. Замість touch foo bar зробіть mkdir foo та mkdir bar . Все інше те саме.
Віпін Джонні

ви можете використовувати svn st | grep ! | cut -f 7 -d' ' | xargs touchяк один вкладиш для дотику до всіх відсутніх файлів
Tibor Blenessy

Пам'ятайте, що для каталогів це також робиться rm -r foo bar(або rmdir foo barв Windows, або якщо вам подобається Windows).
трис

Ця відповідь врятувала мою розсудливість. Дякую.
Сем

159

Спробуйте вирішити конфлікт, використовуючи

svn resolve --accept=working PATH

Дякую. це здається правильним рішенням. (раніше не знав про варіант "вирішити". Я позначив це як відповідь. Хоча, чомусь не працював для мене, ймовірно, тому, що моє дерево робочої копії було пошкоджене чи що-небудь ... врешті-решт я його вирішив просто видаливши реж і виконати оновлення.
Xah Lee

1
Спочатку це не працювало для мене, тому я перевірив ще одну копію відділення svn у тимчасовій папці. Потім я видалив PATH, що викликав конфлікт, і вчинив зміни. Після цього я повернувся до своєї оригінальної копії і запустив цю команду. Він працював із повідомленням "Вирішено конфліктний стан PATH" Це працює, дякую :)
Дурін

Я розумію, що це не мало б значення, якби оригінал був видалений або не був у сховищі, оскільки "вирішити" працює лише на робочій копії.
govi

ідеальне рішення для мене
Серхіо Альварес

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

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), повернення файлу додасть його до вашої системної папки, але не до вашої структури файлу проекту. Якщо у цьому випадку ви знаходитесь, можуть знадобитися додаткові кроки


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 .
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.