Подтвердить что ты не робот

Как я могу выпустить блокировки в Subversion рекурсивно?

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

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

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

4b9b3361

Ответ 1

Хорошо, я понял.

  • Что я сделал, я проверил рабочая копия.
  • Затем отправился в меню проводника, TortoiseSVN → Проверить изменения...
  • Нажмите кнопку Проверить репозиторий
  • Выберите Все файлы, щелкните правой кнопкой мыши и выберите опцию блокировки разрыва.
  • Удалить рабочую копию и одну в хранилище. Вуаля!:)

Привет

Ответ 2

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

$ svn cleanup

Ответ 3

Из раздела предварительного блокирования

$ 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 GUI)

Ответ 4

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

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

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

Ответ 5

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

$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

Это решение работает с именами файлов, в которых есть пробелы.

Ответ 6

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

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

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

svn status -u | head -n -1 | awk '{ print $3 }' | xargs svn unlock --force

Ответ 7

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

svnadmin lslocks <path_to_repo> |grep -B2 Owner |grep Path |sed "s/Path: \///" | xargs svnadmin rmlocks <path_to_repo>

Ответ 8

Для меня удаление файла блокировки внутри .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. Затем очистка и обновление работали нормально.

Ответ 9

Когда я попытался запустить script сверху, как первоначально было, я получал ошибку, когда пытался установить переменные: . /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