Svnsync - не удалось получить блокировку по месту назначения
Использование svnsync
$ svnsync --non-interactive sync ${REPO}
после прерывания процесса возникло это сообщение об ошибке с повторением
Failed to get lock on destination repos, currently held by 'svn.test.com:0e4e0d98-631d-0410-9a00-9330a90920b3'
...
Failed to get lock on destination repos, currently held by 'svn.test.com:0e4e0d98-631d-0410-9a00-9330a90920b3'
svnsync: Couldn't get lock on destination repos after 10 attempts
Есть ли способ исправить эту проблему?
Ответы
Ответ 1
На самом деле, есть функция, встроенная в svnsync, которая может "украсть" блокировку.
svnsync help sync
показывает:
--steal-lock : Steal locks as necessary. Use, with caution,
if your mirror repository contains stale locks
and is not being concurrently accessed by another
svnsync instance.
и когда я его запускаю, я получаю приятное:
Stole lock previously held by '[hostname]'
Итак, вам больше не нужна вещь пропеллера
Ответ 2
Вам нужно удалить свойство блокировки в удаленном репозитории через командную строку svn на удаленном сайте, который был оставлен после сбоя во время синхронизации.
svn propdel --revprop -r0 svn:sync-lock file:///path/to/the/repository
Ответ 3
Технически, это репозиторий-получатель, который вам нужно удалить из свойства, а не из удаленного репозитория, поскольку назначение может быть локальным. Итак, для этого конкретного вопроса:
svn propdel --revprop -r0 svn:sync-lock ${REPO}
Ответ 4
Удаление блокировки сработало для меня. Однако мне пришлось использовать немного другую команду, так как мне нужно было отправить имя пользователя и пароль учетной записи для разблокировки учетной записи.
svn pdel --revprop -r 0 --username ??? --password ??? svn:sync-lock file:///path/to/the/repository
Мне также пришлось запустить эту команду с диска, на котором был установлен репозиторий. (изменение в d: в командной строке перед запуском команды, если мой репозиторий был на d:)
До ввода имени пользователя и пароля, когда я запустил команду, я получил следующую ошибку:
revprop change blocked by pre-revprop-change hook (exit code 255)
Я нашел и открыл файл привязки pre-revprop-change
, и там был код, содержащий только определенное имя пользователя, которое могло бы внести необходимые изменения. Использование этого имени пользователя и пароля в приведенной выше команде удалило hook.
Ответ 5
Чтобы подтвердить наличие блокировки (хотя, очевидно, это говорит об ошибке), запустите proplist с помощью -verbose
svn pl --revprop -v -r 0 file:///svn/slave
затем удалите опору по мере необходимости!
Ответ 6
Вы должны сделать две вещи, чтобы решить проблему. Один из них удаляет блокировку, как указано выше. Затем вы должны отредактировать файл pre-revprop-change.tmpl, который будет пустым, и сделать его исполняемым. Используйте chmod + x в Linux/Unix/Mac, но измените имя файла на pre-revprop-change.bat в Windows. После этого вы можете загружать файлы дампа в свой репозиторий, а затем зеркалировать его там, где вам нужно.