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

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  

Есть ли способ исправить эту проблему?

4b9b3361

Ответ 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. После этого вы можете загружать файлы дампа в свой репозиторий, а затем зеркалировать его там, где вам нужно.