svnsync - не удалось заблокировать репозитории назначения - PullRequest
52 голосов
/ 02 ноября 2010

Использование 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  

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

Ответы [ 6 ]

57 голосов
/ 17 апреля 2013

На самом деле, в 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]'

Так что, в конце концов, вам не нужна вещь пропелд

54 голосов
/ 02 ноября 2010

Необходимо удалить свойство блокировки в удаленном хранилище с помощью командной строки svn на удаленном сайте, которая была оставлена ​​после сбоя во время синхронизации.

svn propdel --revprop -r0 svn:sync-lock file:///path/to/the/repository
10 голосов
/ 23 декабря 2011

Технически, это хранилище назначения, из которого необходимо удалить свойство, а не обязательно удаленное хранилище, так как место назначения может быть локальным. Итак, для этого конкретного вопроса:

svn propdel --revprop -r0 svn:sync-lock ${REPO}
3 голосов
/ 14 октября 2013

Чтобы подтвердить наличие блокировки (хотя ошибка явно говорит об этом), запустите proplist с -verbose

svn pl --revprop -v -r 0 file:///svn/slave

затем удалите опору при необходимости!

3 голосов
/ 10 июня 2011

Снятие блокировки сработало для меня.Однако мне пришлось использовать немного другую команду, поскольку мне нужно было отправить имя пользователя и пароль учетной записи, чтобы использовать ее для разблокировки учетной записи.

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, и там был код, содержащий только определенное имя пользователя, которое могло внести необходимые изменения.Использование этого имени пользователя и пароля в приведенной выше команде сняло ловушку.

2 голосов
/ 03 ноября 2011

Вы должны сделать две вещи, чтобы решить проблему. Один удаляется блокировка, как указано выше. Затем вы должны отредактировать файл pre-revprop-change.tmpl, чтобы он был пустым, и сделать его исполняемым. Используйте chmod + x в Linux / Unix / Mac, но измените имя файла на pre-revprop-change.bat в Windows. После этого вы можете загрузить файлы дампа в свой репозиторий, а затем отразить его в любом месте.

...