2010-11-11 12 views
16

Come posso cambiare (riposizionare) un url di subversione che ho inserito durante la creazione di un repository mirror usando "svnsync init" (esempio da #https: // qualunque cosa a svn: // qualunque cosa)?Come cambiare svn url in svnsync?

provato a correre svnsync init di nuovo con nuovo url ma

svnsync init file:///<path_to_mirror> http:///<new_url> 
svnsync: Destination repository is already synchronizing from 'http:///<old_url>' 
+0

Avete provato utilizzando svnsync con il nuovo URL per la successiva sincronizzazione di. Il mio istinto è che dovrebbe funzionare. –

+0

ha provato a chiamare nuovamente svnsync init con nuovo url ma questo non funziona - svnsync dice che il repository mirror è sincronizzato con l'url "vecchio" – sdu

risposta

19

La sincronizzazione-da URL è memorizzato come un revprop nel repository specchio. Se sulla macchina con il repository specchio (la mia situazione), utilizzare il svnlook strumento per guardare e svnadmin di cambiare:

[email protected][~]$ svnlook pg --revprop -r0 /path/to/mirror/repo svn:sync-from-url 
svn+ssh://svn.abc.com:1234/svn/[email protected][~]$ 

vedrete l'URL del pronti contro termine a cui il tuo specchio è attualmente la sincronizzazione . Nell'esempio sopra, l'URL master repo termina con ... /foo. Alla fine potrebbe non avere una nuova riga, quindi il prompt della shell potrebbe seguirlo. Ora è necessario inserirlo in un file poiché svnadmin utilizza un file per l'input per modificare i revprops.

[email protected][~]$ svnlook pg --revprop -r0 /path/to/mirror/repo svn:sync-from-url > t.txt 
[email protected][~]$ 

Ora modificare t.txt per modificare l'URL al master di pronti contro termine. Ciò può causare la comparsa di una nuova riga alla fine di t.txt e causare messaggi di errore oscuri/privi di significato da svnsync. Così sbarazzarsi di esso:

[email protected][~]$ cat t.txt | tr -d '\n' > t2.txt 

Nota che ora abbiamo t2.txt che è il file sterilizzata. Quindi utilizzare svnadmin per cambiare il revprop al contenuto del file appena modificato e sterilizzata:

[email protected][~]$ svnadmin setrevprop /path/to/mirror/repo -r0 svn:sync-from-url t2.txt 
[email protected][~]$ 

Nota che t2.txt viene utilizzato non t.txt. Infine, controllare le modifiche:

[email protected][~]$ svnlook pg --revprop -r0 /path/to/mirror/repo svn:sync-from-url 
svn+ssh://svn.def.com:5678/svn/[email protected][~]$ 

si dovrebbe vedere il nuovo URL repo immediatamente seguito dal prompt della shell, senza alcun ritorno a capo. Nell'esempio sopra l'URL termina con foo ed è immediatamente seguito dal prompt della shell [email protected] [~] $.

+0

Ho seguito questa procedura e ottengo un errore quando provo sync/repo/percorso svnsync svnsync: UUID del repository '72fa8357-5795-f84a-b72d-10573eb4d6c2' non corrisponde all'UUID previsto 'a3f6904a-36ca-4011-b160-aab731c98da0' – popalka

+2

modifica file db \ revprops \ 0 \ 0 e modifica svn: sync-from- uuid proprietà. ora tutto ok – popalka

13

Se si utilizza l'account utilizzato per eseguire svnsync con si può semplicemente utilizzare:

svn propset --revprop -r 0 svn:sync-from-url http://my.new/url url://to.my.repo 

Se avete seguito le istruzioni riportate nel manuale e aggiunto un gancio pre-rev-oggetti di scena che nega tutti, ma la svnsync l'utente per cambiare i prop di rev che questo dovrebbe funzionare.

0

Svnsync memorizza l'URL del repository remoto nelle proprietà di revisione della prima revisione del mirror del repository. Così, si può view l'URL del repository attualmente configurato sul vostro mirror locale come questo:

$ svn pg --revprop -r0 svn:sync-from-url file:///path/to/svn-mirror 

Ciò significa che per cambiare l'URL del repository remoto devi solo change the revision property.Per esempio: l'uscita

$ svn ps --revprop -r0 svn:sync-from-url https://svn.example.org/repo \ 
     file:///path/to/svn-mirror/ 

Esempio:

property 'svn:sync-from-url' set on repository revision 0