Как мне рекурсивно снять блокировки в Subversion? - PullRequest
49 голосов
/ 01 июля 2010

У меня проблема с контролем версий в Subversion. Я извлек рабочую копию из репозитория и получил блокировки на все его файлы. Затем, не снимая блокировки, я удалил папку с диска.

  • Я не могу удалить папку из хранилища, так как она заблокирована
  • Если I и попытаться рекурсивно разблокировать блокировку, то это говорит о том, что блокировки не снимаются.
  • В представлении «Обзор репозитория» я могу снимать блокировки только с отдельных папок, но не с рекурсивными.

Как я могу сломать замки, находящиеся в хранилище? Я использую TortoiseSVN на Windows. Есть ли команда для рекурсивного снятия блокировки папки?

Ответы [ 9 ]

56 голосов
/ 01 июля 2010

Хорошо, я понял.Вот что сработало для меня.

  • Проверьте рабочую копию
  • Затем перейдите в меню проводника Windows, TortoiseSVN -> Проверить изменения ...
  • Нажмите наКнопка проверки хранилища
  • Выберите Все файлы, щелкните правой кнопкой мыши и выберите параметр блокировки разрыва
  • Удалите рабочую копию и копию в хранилище.Вуаля!:)
32 голосов
/ 11 февраля 2013

Выполнение очистки SVN также снимет блокировку:

$ svn cleanup
17 голосов
/ 01 июля 2010

Из секции блокировки

$ svn status -u
M              23   bar.c
M    O         32   raisin.jpg
       *       72   foo.h
Status against revision:     105
$ svn unlock raisin.jpg
svn: 'raisin.jpg' is not locked in this working copy

Это просто означает, что файл не заблокирован в вашем текущем рабочем каталоге , но если он все еще заблокирован на уровне хранилища, вы можете принудительно разблокировать («взломать замок»)

$ svn unlock http://svn.example.com/repos/project/raisin.jpg
svn: Unlock request failed: 403 Forbidden (http://svn.example.com)
$ svn unlock --force http://svn.example.com/repos/project/raisin.jpg
'raisin.jpg' unlocked.

(что вы и сделали через графический интерфейс TortoiseSVN)

6 голосов
/ 09 июля 2013

Если кто-то еще заблокировал файлы удаленно, я обнаружил, что с помощью TortoiseSVN 1.7.11, чтобы сделать следующее, успешно разблокировал их в моей рабочей копии.(аналогично ответу Виккуна)

  • Щелкните правой кнопкой мыши рабочую копию> Проверить изменения
  • Нажмите кнопку Проверить хранилище
  • Выберите файлы, которые хотите разблокировать
  • Щелкните правой кнопкой мыши> Получить блокировку
  • Установите флажок «Украсть блокировку»
  • После кражи блокировки выберите снова
  • Щелкните правой кнопкой мыши> Снять блокировку

Файлы в рабочей копии теперь должны быть разблокированы.

3 голосов
/ 02 сентября 2016

Если у вас нет доступа администратора к машине svn и вы не можете использовать инструмент 'svnadmin', вам лучше всего будет выглядеть следующее:

  1. Извлечь проблемный каталог, используя svn checkout --ignore-externals *your_repo*
  2. Используйте svn status --show-updates в извлеченном хранилище, чтобы узнать, какие файлы потенциально заблокированы (если кто-то найдет документацию о значении кодов состояния, прокомментируйте).
  3. Используйте svn unlock --force *some_file* в найденных файлахв 2.

Я использовал следующие однострочные для автоматизации 2. и 3.:

svn status -u | head -n -1 | awk '{ print $3 }' | xargs svn unlock --force
2 голосов
/ 31 мая 2017

Если у вас есть доступ к инструменту svnadmin на сервере репо, вы можете использовать эту альтернативу для удаления всех блокировок (на основе скрипта, опубликованного VonC)

svnadmin lslocks <path_to_repo> |grep -B2 Owner |grep Path |sed "s/Path: \///" | xargs svnadmin rmlocks <path_to_repo>
2 голосов
/ 19 декабря 2013

Администратор хранилища может снимать блокировки (рекурсивно), работая с сотнями файлов в проблемном каталоге, но только с помощью сценариев, поскольку для rmlocks svnadmin нет опции --recursive.* Это решение работает с именами файлов, в которых есть пробелы.

0 голосов
/ 19 ноября 2014

Когда я попытался запустить сценарий сверху, как было изначально предоставлено, я получил сообщение об ошибке при попытке установить переменные ./scriptname: line1: = / svn / repo / path /: нет такого файла или каталога ./scriptname: line2: = directory /: Нет такого файла или каталога

Я удалил '$' из первых двух строк, и после этого все заработало отлично.

repopath=/var/svn/repos/myproject/;
problemdirectory=trunk/bikeshed/
IFS=$'\n'; for f in $(sudo svnadmin lslocks $repopath $problemdirectory \
| grep 'Path: ' \
| sed "s/Path: \///") ; \
do sudo svnadmin rmlocks $repopath "$f" ; done
0 голосов
/ 13 мая 2013

Для меня удаление файла блокировки внутри .svn не сработало, так как я получил неверную контрольную сумму msg после попытки обновить файл.

Я получил следующее msg после выполнения очистки svn внутри каталога:

svn: в каталоге '' svn: невозможно скопировать '.svn / tmp / text-base / file_name.svn-base' в 'filename.3.tmp': такого файла или каталога нет

Поэтому я скопировал свой файл в .svn / tmp / text-base и изменил имя на file_name.svn-base.Тогда очистка и обновление работали нормально.

...