2010-11-02 17 views
50

Utilizzando svnsyncsvnsync - non poteva andare serratura su pronti contro termine di destinazione

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

dopo un'interruzione del processo c'era questo messaggio di errore con tentativi

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 

C'è un modo per risolvere questo problema ?

risposta

54

In realtà, vi sono alcune funzionalità integrate in svnsync che possono "rubare" il blocco.

svnsync help sync 

spettacoli:

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

e quando l'eseguo, ottengo un bel:

Stole lock previously held by '[hostname]' 

Quindi, non occorre la cosa propdel dopo tutto

+12

Questa opzione non è disponibile nella v1.6 – bratan

+0

Questa opzione è disponibile solo dalla v1.7 –

52

È necessario rimuovere la proprietà di blocco sul repository remoto tramite la riga di comando svn sul sito remoto che è stato lasciato da un errore durante la sincronizzazione.

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

No, non il repository remoto - il repository localmente sincronizzato (con mirroring). –

+0

Solo una nota, potrebbe essere necessario l'URL.Lo eseguo dal computer di destinazione, quindi il cmd sarebbe: svn propdel --revprop -r0 svn: sync-lock http: // localhost/svn/repospo – ConsultUtah

+0

Vale la pena notare che i blocchi di sincronizzazione vengono sempre applicati alla revisione 0. – NReilingh

3

Rimuovere la serratura ha funzionato per me. Tuttavia, ho dovuto utilizzare un comando leggermente diverso, in quanto avevo bisogno di inviare il nome utente e la password dell'account da utilizzare per sbloccare l'account.

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

Ho anche dovuto eseguire questo comando dall'unità su cui si trovava il repository. (Modifica d: nel prompt dei comandi prima di eseguire il comando, se la mia Repository era in D :)

Prima di entrare il nome utente e la password, quando ho eseguito il comando che ho ottenuto il seguente errore:

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

Ho trovato e aperto il file hook pre-revprop-change e il codice contiene un solo nome utente che potrebbe apportare le modifiche richieste. Usando quel nome utente e password nel comando sopra rimosso il gancio.

2

Devi fare due cose per risolvere il problema. Uno è cancellato il lucchetto come indicato sopra. Quindi devi modificare il file pre-revprop-change.tmpl per essere vuoto e renderlo eseguibile. Usa chmod + x su Linux/Unix/Mac ma cambia il nome del file in pre-revprop-change.bat su Windows. Dopodiché puoi caricare i file di dump nel tuo repository e quindi eseguirne il mirroring ovunque ti serva.

+1

revprops sono necessari per la sincronizzazione in primo luogo, quindi si presume che sia già stato configurato se si verifica un errore _during_ il processo di sincronizzazione. – NReilingh

9

Tecnicamente, è il repository di destinazione che è necessario eliminare la proprietà da, non necessariamente il repository remoto, in quanto la destinazione potrebbe essere locale. Quindi per questa domanda specifica:

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

Per confermare la presenza del blocco (anche se l'errore ovviamente lo dice), esegui proplist con -verbose

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

quindi eliminare il puntello se necessario!

+0

questo ha aiutato molto, per me la proprietà era svn: rdump-lock (in esecuzione svnrdump). –

Problemi correlati