Рабочая копия XXX заблокирована, и очистка не удалась в SVN


582

Я получаю эту ошибку, когда я делаю svn update:

Рабочая копия XXXXXXXX заблокирован. Пожалуйста, выполните команду «Очистка»

Когда я запускаю очистку, я получаю

При очистке не удалось обработать следующие пути: XXXXXXXX

Как мне выйти из этого цикла?


5
Я тоже получил это сообщение. Полученные ответы выглядели немного утомительно (особенно голосование с наибольшим количеством голосов). Я просто закрыл VS и повторно открыл решение, и я смог проверить все в порядке.
колеблющийся

После комментария к eakkas, чтобы удалить записи из таблицы WORK_QUEUE с помощью Firefox SQLLite Manager, я решил эту проблему.
Цеппелин

12
Есть простой ответ, просто отметьте опцию «сломать блокировки», и это очистит вашу рабочую копию
Фархан

Ответы:


517

Один из подходов заключается в следующем:

  1. Скопируйте отредактированные элементы в другое место.
  2. Удалите папку, содержащую проблемный путь.
  3. Обновите содержащую папку через Subversion.
  4. Скопируйте ваши файлы обратно или объедините изменения по мере необходимости.
  5. совершить

Другим вариантом будет удалить папку верхнего уровня и проверить снова. Надеюсь, до этого не дойдет.


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

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

8
Я не могу выполнить шаг 3, потому что ... «Рабочая копия уже заблокирована»
Евгений

20
Примите во внимание совет от BradS: «Для меня хитрость заключалась в том, чтобы запустить svn cleanup вверху моей рабочей копии, а не в папке, где я работал все время до возникновения проблемы».
Марко

5
Для тех, кто использует Tortoise SVN, вы можете запустить очистку в корневой папке каталога извлечения и принудительно отключить блокировку. Кроме того, вы можете попросить его удалить неверсионные файлы. Тогда возьми обновление.
сказал

476

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


обычно работает, но не работает, не уверен, что это потому, что я обновился до SVN 1.7
Populus

4
у меня это работало с клиентом под управлением 1.7, хотя сервер все еще 1.6.x
Марк Хосанг

Работал для меня на 1.7 очень ценится
scarpacci

1
Я соединил подсказку из ответа Intu с этим: найдите родительскую папку, в которой есть файл «lock» в папке .svn, затем запустите там «svn cleanup». Это сработало для меня.
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 (или, по крайней мере, я не смог найти файл блокировки, так как теперь есть централизованная БД с метаданными).
Пеще

10
Вот быстрый однострочный текст, который должен рекурсивно удалять все блокировки, начиная с текущего каталога:find . | grep ".svn/lock" | xargs rm
Джесси

1
С SVN 1.7 ответ @ BradS кажется более эффективным. Этот ответ не работал для меня, и BradS сделал.
Ира Бакстер

1
В моем случае файл блокировки нигде не найден.
Тим MB

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 "Удалить" выше на вкладке SQL.
М Кац

Это намного лучше, только одно отличие состоит в том, что я нажал красную кнопку (-)
Рохит Шривастава

3
Бесплатный DI SQL Spy также поможет
Ивелин Николаев,

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

6
Не сработало, удалив элемент из WC_LOCK - что работало, так это просмотр содержимого BLOB-объекта моего элемента WORK_QUEUE и, разумеется, это был файл проблемы - я удалил файл из браузера репозитория, а затем удалил элемент work_queue - после этого провёл уборку и вернулся в бизнес!
ГрегМ

95

Самый простой способ:

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

Вы успешно выполнили свою работу.

Проверьте снимки экрана для вашей справки.

Первый шаг:

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

Второй шаг: включите опцию «Разблокировать блокировку» (второй флажок во всплывающем окне очистки) введите описание изображения здесь

Надеюсь, это вам очень поможет.


10
в моем случае достаточно было использовать опцию «Break Lock», возможно, сначала попробуйте только с этим
Donatello

Хороший ответ. У меня был случай «диалоговой слепоты» с этим и я никогда не проверял параметры очистки. Исторически сложилось так, что «переход к рутину и очистке» работал, но я полагаю, что в моем случае было достаточно взломать блокировки
Фил Купер,

1
У меня тоже сработало!
Даниэль Сильва

Я не думал, что «сломать замки» сделает это, потому что я не делал никаких замков. Но, по-видимому, это нарушает svn-внутренние блокировки, которые вызывали эту проблему. Спасибо!
Башер

У меня не получилось 😦
Воинственный шимпанзе

48

Коллега на работе постоянно видит это сообщение, и для него это происходит потому, что он удалил каталог под управлением версией SVN, не удаляя его из SVN, а затем создал новый каталог на своем месте, не под управлением версией, с тем же именем.

Если это ваша проблема ...

Есть разные способы исправить это, в зависимости от того, как / почему каталог был заменен.

В любом случае вам, вероятно, потребуется:

А) Переименуйте существующий каталог во временное имя

Б) Вернуть SVN, чтобы восстановить каталог, удаленный из файловой системы, но не из SVN

Оттуда вы бы либо

A) Скопируйте соответствующие файлы в каталог, который был удален

B) Если вы имели существенное изменение содержания в каталоге, выполните команду SVN удалить на оригинале, фиксации, и переименовать ваш новый каталог обратно до нужного имени, а затем с помощью SVN добавить , чтобы получить , что один под контролем версий.


1
Ваш второй шаг B) кажется мне очень плохой идеей, поскольку он нарушил бы историю изменений для элементов исходного каталога, которые хранятся в новой версии.
Дунарил

Очень плохие вещи случались, когда человек удалял версионный каталог из файловой системы, но не из SVN. Ответ выше не может быть идеальным восстановлением, но это восстановление.
Теему Лейсти

34

Для меня ни одно из вышеперечисленных решений не сработало. Я нашел решение, взломав замки. Когда я выполнил svn cleanup, я выбрал «Break Locks» вместе с «Очистить статус рабочей копии».

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


У меня взломанный замок от Tortoise SVN работал в репо-браузере. Взлом блокировки на извлеченной папке ничего не сделал.
Бхаргава Муммадиредди

23

Этот работал для меня.

  1. Перейдите в корневую папку,
  2. Щелкните правой кнопкой мыши и очистите
  3. Проверьте все доступные варианты
  4. Нажмите ок

После очистки это позволит вам обновить до последней версии.


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

1
Это полностью сработало для меня ... просто щелкнув правой кнопкой мыши по проекту> Команда> Очистка. Не нужно было удалять ни строки из SQL в .svn, ни что-либо еще. Просто это сделал работу. Спасибо!
msqar

Это сработало и для меня в версии 1.7.4 TortoiseSVN. Я пошел с флажками по умолчанию, которые были представлены.
ОДС

Помог мне сегодня, но мне не нужно было проверять все доступные варианты. Последние три, которые отменяют мои изменения, я не проверял, и все равно работало. См. Также stackoverflow.com/a/35192644/460775
EMBarbosa

1
Это сработало для меня. Я только что проверил Clean up working copy statusи Breaks locksиInclude externals
Фибер

11

Для меня это была вина Черепахи. Черепаха только что жаловалась, что «не может очистить, запустить очистить», но когда я запустил командную строку (svn cleanup), она ясно сказала мне, что не может удалить некоторые файлы, которые использовались, решение которых было очевидным. Как только я закрыл Visual Studio (которая держала файлы открытыми), очистка работала нормально.

Другие программы также могут держать файлы открытыми в репо, вызывая эту проблему. Excel с открытым xls был виновником в другом случае, поэтому может быть целесообразно закрыть все программы, которые могут использовать что-либо в репозитории, или даже перезагрузиться, чтобы заставить программы закрыться, а затем повторить попытку очистки.


7

У меня была эта проблема, потому что внешние папки не хотят быть связаны в существующую папку. Если вы добавите строку свойств svn: externals, где местом назначения является существующая (версионная или не версионная) папка, вы получите ошибку заблокированной копии SVN Woring Copy. Здесь очистка также скажет вам, что все в порядке, но обновление не будет работать.

Решение. Удалите тревожную папку из хранилища и обновите ее в корневой папке, в которой установлено свойство svn: externals. Это создаст папку, и все будет хорошо снова.

Эта проблема возникла у меня, потому что svn: externals для файлов требует, чтобы папка назначения контролировалась версией. После того, как я заметил, что это не работает в разных репозиториях, я переключился с внешних файлов на внешнюю папку и попал в этот беспорядок.


6

Самый простой способ сделать это - показать скрытые папки, а затем открыть папку .SVN. Вы должны увидеть файл нулевого КБ с именем «lock», удалив его, это решит проблему


5

Я столкнулся с точно такой же проблемой, используя SVN 1.7, и ни одно из упомянутых выше исправлений не сработало.

Прежде всего, убедитесь, что вы сделали резервную копию всего отредактированного контента.

Потратив пару часов (не перезагружая все, так как размер моей ветки превышает 6 ГБ), я обнаружил, что в папке .svn вашей ветви есть файл db с именем "wc".

Откройте файл БД с помощью любого менеджера БД (я использовал плагин sqlite для менеджера Firefox) и перейдите к таблице WC_LOCK. Эта таблица будет содержать записи для полученных блокировок. Удалите записи из таблицы, и все готово :)


хотя это был в значительной степени дубликат предыдущего ответа, я проголосовал за то, что вы упомянули плагин менеджера SQLite для Firefox.
ehambright

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

следующее должно сделать:

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


1

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

в папке .svn у вас есть файл с именем lock длиной 0 байт

Вы можете удалить все эти файлы из всех папок .svn в вашем решении, и это будет работать

В моем случае это сработало


Это самое простое решение! Работал для меня
Натан

Да, к сожалению, это не работает для последней версии SVN. Для последней версии вы должны удалить ее, потому что файл блокировки больше не существует. там, похоже, больше нет файлов, есть совершенно другая структура папок. Если кто-то знает, есть ли что-то, что еще можно изменить способом, аналогичным описанному выше, поделитесь им с нами.
Пара

1

Развертывание файлов на месте и новая проверка в том же месте решили эту проблему для меня.

В TortoiseSVN, чтобы выполнить инверсию на месте, перетащите правую корневую папку рабочей копии из списка файлов на себя в дереве каталогов и выберите «SVN Export versioned items here» во всплывающем меню. 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

В обозревателе решений щелкните правой кнопкой мыши проект, в открывшемся подменю нажмите на Subversion и выберите очистку. Это решит проблему, как и для меня. Надеюсь, это сработает.


1

Сделать уборку

  1. Удалите папку .svn.

  2. Сделайте svncheckout в корневой папке.

  3. Попробуйте выполнить операцию очистки.

Это решило мою проблему.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.