2010-11-02 13 views
50

Usando svnsyncsvnsync - no pudo obtener el bloqueo en repos de destino

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

después de una interrupción del proceso hubo este mensaje de error con repetición de

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 

¿Hay una manera de solucionar este problema ?

Respuesta

54

En realidad, hay algunas funciones incorporadas en svnsync que pueden "robar" el bloqueo.

svnsync help sync 

espectáculos:

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

y cuando corro, me sale un bonito:

Stole lock previously held by '[hostname]' 

Por lo tanto, no es necesario la cosa propdel después de todo

+12

Esta opción no está disponible en v1.6 – bratan

+0

Esta opción está disponible solo desde v1.7 –

52

Debe eliminar la propiedad de bloqueo en el repositorio remoto a través de la línea de comando svn en el sitio remoto que ha quedado de una falla durante la sincronización.

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

No, no es el repositorio remoto: el repositorio sincronizado localmente (duplicado). –

+0

Solo una nota, esta podría necesitar ser la URL.Lo ejecuto desde la máquina de destino, por lo que el cmd sería: svn propdel --revprop -r0 svn: sincronización-bloqueo http: // localhost/svn/repo – ConsultUtah

+0

Merece la pena señalar que IMO siempre se aplica sincronización-bloqueos a la revisión 0. – NReilingh

3

Quitar el bloqueo funcionó para mí. Sin embargo, tuve que usar un comando ligeramente diferente, ya que necesitaba enviar el nombre de usuario y la contraseña de la cuenta para usarla para desbloquear la cuenta.

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

También tuve que ejecutar este comando desde la unidad en la que se encontraba el repositorio. (Cambio en d: en el símbolo del sistema antes de ejecutar el comando, si mi repositorio estaba en d :)

Antes de ingresar el nombre de usuario y contraseña, cuando me encontré con el comando Tengo el siguiente error:

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

Encontré y abrí el archivo de gancho pre-revprop-change, y tenía un código allí enumerando solo un cierto nombre de usuario que podría hacer los cambios necesarios. El uso de ese nombre de usuario y contraseña en el comando anterior eliminó el gancho.

2

Tienes que hacer dos cosas para resolver el problema. Uno es eliminado el bloqueo como se indicó anteriormente. Luego debe editar el archivo pre-revprop-change.tmpl para que esté vacío y hacerlo ejecutable. Utilice chmod + x en Linux/Unix/Mac, pero cambie el nombre del archivo a pre-revprop-change.bat en Windows. Después de esto, puede cargar archivos de volcado en su repositorio y luego reflejarlos donde lo necesite.

+1

revprops son necesarios para la sincronización en el primer lugar, por lo que se supone que ya se ha configurado si nos encontramos con un error _ durante el proceso de sincronización. – NReilingh

9

Técnicamente, es el repositorio de destino del que debe eliminar la propiedad, no necesariamente el repositorio remoto, ya que el destino podría ser local. Entonces para esta pregunta específica:

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

Para confirmar la presencia de bloqueo (aunque obviamente el error lo dice), ejecute proplist con -verbose

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

¡luego elimine el accesorio según sea necesario!

+0

. Esto me ayudó mucho, para mí la propiedad era svn: rdump-lock (ejecutando svnrdump). –

Cuestiones relacionadas