Не вдалося виконати робочу копію XXX, заблоковану та очищену у SVN


582

Я отримую цю помилку, коли роблю svn update:

Робоча копія XXXXXXXX заблокована. Виконайте команду "Очищення"

Коли я запускаю очищення, я отримую

Під час очищення не вдалося обробити такі шляхи: XXXXXXXX

Як я вийду з цієї петлі?


5
Я отримав і це повідомлення. Надані відповіді виглядали трохи стомлюючими (особливо з найбільш голосовими). Я щойно закрив VS і перезапустив рішення, і я зміг перевірити все на відмінно.
oscilatingcretin

Після коментаря eakkas видалити записи з таблиці WORK_QUEUE за допомогою менеджера SQLLite Firefox виправили проблему для мене.
цепелін

12
Є проста відповідь, просто перевірте варіант, "зламати замки", і це очистить вашу робочу копію
Фархан

Відповіді:


517

Одним із підходів було б:

  1. Копіюйте відредаговані елементи в інше місце.
  2. Видаліть папку, що містить проблемний шлях.
  3. Оновіть папку, що містить, за допомогою Subversion.
  4. Скопіюйте свої файли назад або з’єднайте зміни за потребою.
  5. Здійснити

Іншим варіантом буде видалити папку верхнього рівня та перевірити ще раз. Сподіваємось, це не дійшло до цього.


123
+1 для вас, щоб вирішити не лише проблему ОП (і мою), а й надання 5 кроків, які, здається, вирішують будь-яку проблему svn. -1 до підриву для необхідних таких обхідних шляхів.
pxl

34
Хоча це технічно працює, це такий поганий спосіб зробити в порівнянні з видаленням замків, на які він заслуговує скорочення.
Юкка Далбом

8
Я не можу зробити крок 3, тому що ... "Робоча копія вже заблокована"
Євгеній

20
Розгляньте пораду від BradS "Для мене фокусом було запустити" очищення svn "у верхній частині моєї робочої копії, а не в папці, де я працював увесь час до появи проблеми".
Марко

5
Для тих, хто використовує Tortoise SVN, ви можете запустити очищення в кореневій папці каталогу виїзду та примусити перервати блокування. Крім того, ви можете попросити його видалити неперевершені файли. Потім візьміть оновлення.
Обаїд

476

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


зазвичай працює, але більше не впевнений, чи це тому, що я перейшов до SVN 1.7
Populus

4
це працювало для мене з клієнтом під керуванням 1.7, хоча сервер все ще 1.6.x
Марк Хосан

Працював для мене на 1.7, високо оцінив
scarpacci

1
Я поєднав підказку з відповіді Intu з цією: знайдіть батьківську папку, у якій папка .svn має "замок", а потім запустіть там "svn очищення". Це працювало для мене.
rob74

5
Це працює для мене набагато швидше, ніж спосіб Чака. Тому для цього варто спробувати зробити це спочатку.
goamn

210

Подивіться у свою .svnпапку, там буде файл, який називається lock. Видаліть цей файл, і ви зможете оновити. У .svnкаталозі кожного підкаталогу може бути більше файлів блокування . Їх також потрібно буде видалити. Це можна зробити як пакет досить просто з командного рядка з напр

find . -name 'lock' -exec rm -v {} \;

Зауважте, що ви вручну редагуєте файли в .svnпапці. Їх помістили не просто так. Ця причина може бути помилкою, але якщо ні, то ви можете пошкодити локальну копію.

ДЖЕРЕЛ: http://www.svnforum.org/2017/viewtopic.php?p=6068


8
+1 Я думаю, що це набагато кращий підхід, ніж відповідь на даний момент з найбільш високою оцінкою - мені неприємно спочатку копіювати файли в іншому місці, щоб уникнути цієї (поширеної!) Проблеми. Моє спричинено інструментом генерації коду, який генерує файли з такою ж назвою, що хтось інший уже додав у SVN. Моє погано, що не "svn up" спочатку я гадаю ...
alpian

44
Це більше не працює з Tortoise / SVN 1.7 (або, принаймні, я не міг знайти жодного файлу блокування, оскільки зараз існує централізована БД з метаданими).
pesche

10
ось швидкий однолінійний файл, який повинен рекурсивно видаляти всі блокування, починаючи з поточного каталогу:find . | grep ".svn/lock" | xargs rm
Jesse

1
З SVN 1.7 відповідь @ BradS видається більш ефективною. Ця відповідь не спрацювала для мене, і це зробив Брэдс.
Іра Бакстер

1
У моєму випадку файлу блокування ніде не можна знайти.
Тім МБ

106

У моєму випадку я вирішив це, видаливши запис вручну в таблиці SQLite ".svn \ wc" в блоці запису WC_LOCK.

Я відкрив файл "WC" за допомогою редактора SQLite і виконав

delete from WC_LOCK

скріншот, що показує всі записи, видалені з WC_LOCK

Після коментаря eakkas вам може знадобитися також видалити всі записи з WORK_QUEUEтаблиці.


1
Це працювало для мене на Subversion 1.7.5 для Windows. Завантажена звідси пробна версія SQLite Expert: sqliteexpert.com/download.html . Запустіть оператор sql "delete" вище на вкладці SQL.
М Кац

Це набагато краще, лише одна різниця полягає в тому, що я натиснув червону кнопку (-)
Rohit Srivastava

3
Безкоштовний DI SQL Spy також зробив би свою хитрість: yunqa.de/delphi/doku.php/products/sqlitespy/index
Івелін Миколаїв

12
Це також працювало для мене, але мені також потрібно було очистити записи в таблиці
WORK_QUEUE

6
Не вийшло, видаливши елемент з WC_LOCK - те, що працювало, було переглядати вміст блобу мого елемента WORK_QUEUE і досить впевнений, що це файл проблеми - я видалив файл із браузера репо, а потім видалив елемент робочої черги - після цього провели прибирання та повернулися до справи!
GregM

95

Найпростіший спосіб коли-небудь:

  1. Перейти до каталогу Parent (Папка) з проекту .
  2. Натисніть правою кнопкою миші
  3. Натисніть TortoiseSVN, потім натисніть Очистити ...
  4. Діалогове вікно очищення з’явиться автоматично
  5. Виберіть Clean up working copy status, Break locks, Fix time stamps, Vacuum pristine copies, Refresh shell overlays,Include externals
  6. Натисніть OK

Ви успішно зробили свою роботу.

Перевірте знімки екрана для ознайомлення.

Перший крок:

введіть тут опис зображення

Другий крок: Увімкніть параметр "Блокування блокування" (другий прапорець у спливаючому вікні очищення) введіть тут опис зображення

Сподіваюся, що це вам дуже допоможе.


10
у моєму випадку варіанту "Блокування блокування" було достатньо, можливо спробуйте спочатку лише цей
Донателло

Хороша відповідь. У мене був випадок «діалогової сліпоти» з цим і ніколи не перевіряв параметри очищення. Історично склалося, що "навігація до коріння та очищення" використовувалася для роботи, але я думаю, що в моєму випадку було достатньо зламати замки ..
Філ Купер

1
Працював і для мене!
Даніель Сільва

Не думав, що "зламувати замки" це зроблять, тому що я не робив жодних замків. Але, мабуть, він порушує svn-внутрішні замки, що спричинили цю проблему. Дякую!
башер

Не працювало для мене 😦
Войовничий шимпанзе

48

Колега на роботі постійно бачить це повідомлення, і для нього це тому, що він видалив каталог під контролем версій SVN, не видаляючи його з SVN, а потім створив новий каталог на своєму місці, не під контролем версій, з тим самим ім'ям.

Якщо це ваша проблема ...:

Існують різні способи виправити це залежно від того, як / чому було замінено каталог.

У будь-якому випадку вам, ймовірно, потрібно буде:

A) Перейменуйте існуючий каталог у тимчасове ім'я

В) Зробити SVN для відновлення каталогу, видаленого з файлової системи, але не з SVN

Звідти ви й хотіли б

A) Скопіюйте відповідні файли в каталог, який було видалено

B) Якщо у вас відбулася значна зміна вмісту в каталозі, видаліть SVN на оригіналі, зробіть і перейменуйте новий каталог на потрібне ім'я, після чого додайте SVN, щоб отримати цей під контролем версій.


1
Ваш другий крок B) здається мені дуже поганою ідеєю, оскільки це порушить історію редагування елементів оригінального каталогу, які зберігаються в новій версії.
Дунаріл

Дуже погані речі траплялися, коли людина видаляла каталог з версією файлової системи, але не з SVN. Відповідь вище не може бути ідеальним відновленням, але це відновлення.
Teemu Leisti

34

Для мене жодне з перерахованих вище рішень не спрацювало. Я знайшов рішення, зламавши замки. Коли я виконував очищення svn, я вибрав "Break Locks" разом із "Очистити стан робочої копії".

введіть тут опис зображення


Для мене працював зламаний замок із браузера Torpoise SVN repo. Порушення блокування перевіреної папки нічого не робило.
Bhargava Mummadireddy

23

Цей працював на мене.

  1. Перейдіть до кореневої папки,
  2. Клацніть правою кнопкою миші та очищення
  3. Перевірте всі доступні варіанти
  4. Натисніть ОК

Після очищення це дозволить вам оновити до останньої версії.


2
Це працює і для мене. Вам потрібно перевірити всі доступні варіанти (6 записів у моїй версії), щоб продовжити Очищення; вона виходить з ладу, якщо просто перевірити параметри [Очистити стан робочої копії] та [Включити зовнішні].
Вінсент Джіа

1
Це повністю спрацювало для мене ... просто клацнувши правою кнопкою миші на проекті> Команда> Очищення. Не довелося видаляти жодну рядок із SQL в .svn і нічого іншого. Просто це зробило роботу. Дякую!
msqar

Це працювало і для мене у версії 1.7.4 TortoiseSVN. Я пішов із типовими прапорцями, які були представлені
slm

Я допомагав мені сьогодні, але мені не потрібно було перевіряти всі доступні варіанти. Останні три, які скасовують мої зміни, я не перевіряв, і все одно він працював. Дивіться також stackoverflow.com/a/35192644/460775
EMBarbosa

1
Це працювало для мене. Я тільки що перевірив Clean up working copy statusі Breaks locksтаInclude externals
Phiber

11

Для мене це була насправді вина Черепахи. Черепаха просто поскаржилася "не можу очистити, запустити очищення", але коли я запустив командний рядок (очищення svn), він чітко сказав мені, що не може видалити деякі файли, які використовуються, рішення яких було очевидним. Як тільки я закрив Visual Studio (який зберігав файли відкритими), тоді очищення спрацювало чудово.

Інші програми також можуть тримати файли відкритими в РЕПО, викликаючи цю проблему. Excel, який тримає xls відкритим, був винуватцем в іншому випадку, тому може бути розумним закрити всі програми, які можуть використовувати що-небудь в репо або навіть перезавантажити, щоб змусити програми закритись та повторити спробу очищення.


7

У мене виникла ця проблема, оскільки зовнішні папки не хочуть пов’язуватись із наявною папкою. Якщо ви додасте лінію властивості svn: externals, де адресатом є існуюча папка (у версії або без версії), ви отримаєте помилку заблокованої копії SVN Woring Copy. Тут очищення також скаже вам, що з усім все в порядку, але все ж оновлення не буде працювати.

Рішення: Видаліть тривожну папку з сховища та проведіть оновлення в кореневій папці, де встановлено властивість svn: externals. Це створить папку і все знову буде добре.

Ця проблема виникла у мене, оскільки svn: externals для файлів вимагає керування версією цільової папки. Після того як я помітив, що це не працює в різних сховищах, я перемінився із зовнішніх файлів у зовнішню папку і потрапив у цей безлад.


6

Найпростіший спосіб зробити це - показати приховані папки, а потім відкрити папку .SVN. Ви повинні побачити нульовий файл КБ з назвою "замок", видалення це вирішить проблему


5

Я зіткнувся з точно такою ж проблемою, використовуючи SVN 1.7, і жодне з вищезгаданих виправлень не працювало.

Найперше, переконайтеся, що ви створюєте резервну копію всього відредагованого вмісту.

Провівши пару годин (не перезавантажував усе, оскільки моя гілка перевищує 6 Гб), я виявив, що в папці .svn вашого відділення є файл db під назвою "wc".

Відкрийте файл db за допомогою будь-якого db-менеджера (я використовував плагін менеджера sqlite для firefox) та перейдіть до таблиці WC_LOCK. Ця таблиця містить записи для придбаних замків. Видаліть записи з таблиці, і ви закінчите :)


незважаючи на те, що це був майже дублікат попередньої відповіді, я дав вам голос, тому що ви згадали плагін менеджера Firefox SQLite.
ембрайт

3

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


1
Я не зміг знайти файл блокування, як у попередніх відповідях, але це працювало для мене :)
сернські

3

Якщо ви працюєте на машині Windows, перегляньте сховище через браузер, і ви, можливо, побачите два файли з однаковим іменем файлу, але використовуючи різні регістри. Subversion залежить від регістру, і Windows - це не так, що ви можете заблокувати, коли Windows думає, що витягує той самий файл, а Subversion - ні. Видаліть дублікати імен файлів у сховищі та повторіть спробу.


3

Я зробив це, просто створивши нову папку, перевіривши проект, скопіювавши оновлені файли в нову папку.

Це було зафіксовано за допомогою свіжої каси.


Я робив те саме. (Я відклав першопричину до того, щоб AnkhSVN возився зі своєю робочою копією. AnkhSVN тепер видалено).
Scotty.NET

2

Ви використовуєте TortoiseSVN та щойно оновлені? У мене була ця проблема раніше, коли я переходив з 1,4 до 1,5 і не перезавантажувався. (Спробуйте перезавантажити).

Причина, яку вам потрібно перезавантажити, полягає в тому, що файл кешу стає все більш фанк.

В іншому випадку, щоб просто перейти, експортуйте цю робочу копію в нову папку (не копіюйте приховані папки .svn), повторно оформити проект і перенести весь код назад, а потім продовжувати виконувати.


Це трапилося і зі мною, тобто мені просто потрібно було перезавантажити
Меттью Лок

2

просто видаліть папки .svn, а потім запустіть очищення у батьківській директорії. Працює чудово !!


3
У SVN 1.7 це не працюватиме, оскільки вгорі є лише одна .svn папка. Якщо видалено, додаток до сховища видаляється.
AnneTheAgile

2

У версіях під Mac OS: Дія -> Очищення робочої копії блокується на ...


2

У мене часто трапляється таке питання. Моя схема, яка викликає проблеми з очищенням.

  1. Я відкриваю файл зображення в переглядачі.
  2. Я видаляю файл / папку зображень.
  3. Я намагаюся зробити / оновити

Закриття програми перегляду зображень, де відкритий файл відкритий, вирішує проблему. Можливо, інше програмне забезпечення може заблокувати очищення аналогічно.

В загальному. Я вважаю, що перезапуск комп'ютера може допомогти в таких випадках.


1

SVN зазвичай оновлює свою внутрішню структуру (.svn / prop-base) файлів у папці до отримання фактичних файлів із сховища. Після отримання файлів це буде очищено. Часто помилка видається через те, що "оновлення" не вдалося або передчасно скасувалося під час оновлення.

  1. Перевірте, чи будь-які файли перераховані в .svn / prop-base каталог
  2. Видаліть файли, які не знаходяться в папці
  3. Прибирати
  4. Оновлення

Тепер оновлення має працювати.


1

Була така ж проблема, тому що я експортував папку в папку, керовану версією. Довелося видалити папку з TortoiseSVN, потім видалити папку з файлової системи (TortoiseSVN не любить неперевершені підпапки ... чому б не ???)


Я повинен додати, що я експортував папку до тієї самої папки .. ось як ви перевернули поперед. версії з папками.

1

Почніть пошук .... Блокування ... Виберіть усі перелічені файли та видаліть .. виправлено


1

слід зробити наступне:

svn статус | греп ". L" | sed 's /.* (. *) $ / \ 1 /' | awk '{довжина друку ($ 1), $ 1}' | сортувати -nr | awk '{print "pushd" $ 2 "; очищення svn; popd"}' | ш


1

Не видаляйте своє рішення!

у папці .svn у вас є файл з назвою блокування, він довжиною 0 байтів

Ви можете видалити всі ці файли з усіх .svn папок у своєму рішенні, і це спрацює

Це спрацювало в моєму випадку


Це найпростіше рішення! Працював для мене
Натан

Так, на жаль, це не працює для останньої версії SVN. Для останньої версії вам потрібно видалити її, оскільки файлу блокування вже немає. здається, що файлів більше немає, є ціла інша структура папок. Якщо хтось знає, чи є щось, що все-таки можна змінити способом, подібним до описаного вище, будь ласка, поділіться цим з нами.
Пара

1

Інверсія файлів на місці та нова перевірка того ж місця вирішила для мене цю проблему.

У TortoiseSVN, щоб здійснити інверсію на місці, перетягніть правою рукою папку кореня робочої копії зі списку файлів на себе у дереві каталогів та виберіть зі спливаючого меню пункт "Експорт SVN-версій сюди". TortoiseSVN помічає, що пункт призначення збігається з джерелом, і пропонує розвернути робочу копію.

Після перевертання зробіть новий замовлення в ту саму папку (яка тепер містить неперевершену копію всіх файлів, які ви мали). TortoiseSVN попередить вас, що ви перевіряєтесь у наявну папку, але можете продовжити.

Після цього очищення, оновлення та інші операції працювали без перешкод. Оскільки обидва вищезазначені етапи зберігають локальні модифікації, втрати інформації не повинно бути (але резервне копіювання робочої копії до цього може бути гарною ідеєю).

Одне попередження: Якщо робоча копія містить змішані версії або невідомі зміни властивостей, ця інформація буде втрачена. Для мене це нечасте явище, і зважаючи на вибір пошкодженої робочої копії або втрати невмілих змін властивостей, я схильний вибирати останні.


1

У мене була ця проблема, коли "очищення" працювало, але "оновлення" продовжувало б виходити з ладу. Вирішенням цього завдання було видалення відповідної папки за допомогою Провідника Windows, а не видалення TortoiseSVN (яке позначає видалення як щось, що потрібно скопіювати у сховище, а потім я зробив "замовлення", щоб по суті "оновити" папку з репозиторію.

Більше інформації про різницю між видаленням O / S та SVN видаленням тут: http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-rename.html

Зокрема:

Коли ви TortoiseSVN → Видалити файл, він вилучається з робочої копії негайно, а також відмічається для видалення в сховищі при наступному фіксації.

І:

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


1

Якщо ви працюєте в Linux, спробуйте це:

find "/the/path/to/your/directory" -name .svn -type d | xargs chmod 0777 -R

Потім запустіть cleanupкоманду в цьому каталозі, а потім спробуйте оновити.


1

Щоб вирішити свою проблему, я зробив наступне:

  1. Перейменовано папку, яка порушує праворуч, поставивши перед ім'ям папки "_".
  2. Зробили "Очищення" батьківської папки.
  3. Перейменовано папку, яка ображає, повертається до оригінальної назви.
  4. Зробив зобов’язання.

1

У провіднику рішень клацніть правою кнопкою миші проект, у відкритому підменю натисніть на підрив та виберіть очищення. Це вирішить проблему, як це було для мене. Сподіваюся, це спрацює.


1

Щоб зробити прибирання

  1. Видаліть папку .svn.

  2. Зробіть svncheckout у кореневій папці.

  3. Спробуйте виконати операцію очищення.

Це вирішило мою проблему.

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