58 votes

svnsync - Impossible d'obtenir un verrouillage sur les dépôts de destination

Utilisation de svnsync

$ svnsync --non-interactive sync ${REPO}

après un abandon du processus, il y avait ce message d'erreur avec réessai

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  

Y a-t-il un moyen de résoudre ce problème ?

67voto

Sebastian Points 1236

En fait, il existe une fonctionnalité intégrée à svnsync (depuis la version 1.7) qui peut "voler" le verrou.

svnsync help sync

montre :

--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.

et quand je l'exécute, j'ai un joli.. :

Stole lock previously held by '[hostname]'

Donc, vous n'avez pas besoin du truc propdel après tout.

13 votes

Cette option n'est pas disponible dans la v1.6.

1 votes

Cette option n'est disponible qu'à partir de la version 1.7.

54voto

khmarbaise Points 28405

Vous devez supprimer la propriété de verrouillage sur le référentiel distant via la ligne de commande svn sur le site distant qui a été laissée à la suite d'un échec lors de la synchronisation.

svn propdel --revprop -r0 svn:sync-lock file:///path/to/the/repository

11 votes

Non, pas le référentiel distant, mais le référentiel synchronisé localement (en miroir).

1 votes

Juste une remarque, il se peut que ce soit l'URL. Je l'exécute depuis la machine de destination, donc la commande serait : svn propdel --revprop -r0 svn:sync-lock localhost/svn/repo

0 votes

Il est intéressant de noter que les sync-locks sont toujours appliqués à la révision 0.

11voto

Matt White Points 225

Techniquement, c'est du référentiel de destination que vous devez supprimer la propriété, pas nécessairement du référentiel distant, car la destination pourrait être locale. Donc pour cette question spécifique :

svn propdel --revprop -r0 svn:sync-lock ${REPO}

3voto

AMRAAM Points 11

Enlever le verrou a fonctionné pour moi. Cependant, j'ai dû utiliser une commande légèrement différente, car je devais envoyer le nom d'utilisateur et le mot de passe du compte à utiliser pour déverrouiller le compte.

svn pdel --revprop -r 0 --username ??? --password ??? svn:sync-lock file:///path/to/the/repository

J'ai également dû exécuter cette commande depuis le disque sur lequel se trouvait le référentiel. (changer en d : dans l'invite de commande avant d'exécuter la commande, si mon référentiel était sur d :)

Avant de saisir le nom d'utilisateur et le mot de passe, lorsque j'ai exécuté la commande, j'ai obtenu l'erreur suivante :

revprop change blocked by pre-revprop-change hook (exit code 255)

J'ai trouvé et ouvert le pre-revprop-change et il contenait un code indiquant que seul un certain nom d'utilisateur pouvait effectuer les changements requis. L'utilisation de ce nom d'utilisateur et de ce mot de passe dans la commande ci-dessus a supprimé le hook.

3voto

venkrao Points 75

Pour confirmer la présence d'un verrou (bien que l'err le dise évidemment), exécutez proplist avec -verbose

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

puis supprimez l'accessoire si nécessaire !

1 votes

Cela m'a beaucoup aidé, pour moi la propriété était svn:rdump-lock (en exécutant svnrdump).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X