Via Piffetti, 16
10143 Torino
Fax: +39 011 5503420
Tel: +39 011 5645163
Mail: contatto[at]subversionitalia.it


I comandi Subversion: svnsync

Tra i comandi messi a disposizione dalla distribuzione standard di Subversion troviamo svnsync.

svnsync permette di sincronizzare un repository verso uno o più respository.

Per prima cosa è bene sottolineare che svnsync non può essere usato per mantenere un repository distribuito, il repository verso cui avviene la sincronizzazione deve essere in sola lettura, one way.

Subversion è un SCM centralizzato e non permette di configurare repository distribuiti nativamente. Sul mercato sono presenti strumenti che permettono di trasformare Subversion in repository decentralizzato, ad esempio Wandisco.

A partire dalla version 1.5 di svnsync è possibile sincronizzare solo un ramo del repository sorgente verso il repository di destinazione.

Vediamo come utilizzare svnsync tramite protocollo svn:

Consideriamo di avere il nostro repository principale sulla macchina master.example.com disponibile all’indirizzo svn://master.example.com

Sulla macchina slave creiamo il repository target per la sincronizzazione con il master:

root@slave# mkdir /var/lib/svn
root@slave# cd /var/lib/svn
root@slave# svnadmin create repo

A questo punto dobbiamo preparare il repository target appena creato in modo tale che accetti le modifiche delle revision property. Di default la modifica di tali property è disabilitata su Subversion, essendo le revison property non versionate. Per permettere la modifica delle revision property è sufficiente modificare l’hook pre-revprop-change in modo che termini correttamente (con exit status a 0);

root@slave# cd repo/hooks
root@slave# head -n 1 pre-revprop-change.tmpl > pre-revprop-change
root@slave# chmod +x pre-revprop-change
root@slave# cd ../..

A questo punto utilizziamo svnsync per inizializzare il repository target

root@slave# svnsync init file:///var/lib/svn/repo svn://master.example.com
Copied properties for revision 0.

Se analizziamo le revision property del repository target possiamo vedere quali sono le operazioni compiute dal comando init:

root@slave# svnlook proplist repo -r 0 --revprop
svn:sync-from-uuid
svn:sync-last-merged-rev
svn:date
svn:sync-from-url

Ora è possibile iniziare la syncronizzazione del repository

root@slave# svnsync sync file:///var/lib/repo

Leave a Reply

You can use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>