Как я могу выпустить блокировки в Subversion рекурсивно?
У меня проблема с управлением версиями в Subversion. Я проверил рабочую копию из репозитория и получил блокировки во всех своих файлах. Затем, не освобождая блокировки, я удалил папку с диска.
- Я не могу удалить папку из репозитория, так как она получила блокировку
- Если я и попытаюсь выпустить блокировки рекурсивно, в нем говорится, что блокировки не будут выпущены.
- В представлении "Обзор хранилища" я могу только разбить блокировки на конкретные, а не на рекурсивные папки.
Как я могу разбить блокировки, находящиеся в репозитории? Я использую TortoiseSVN для Windows.
Есть ли команда для рекурсивно разбивать блокировки для папки?
Ответы
Ответ 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