SVN, SVK, Mirror · 2 min read · Feb 13, 2026

Creare uno specchio di sola lettura del tuo repository SVN con SVK

Creare uno specchio di sola lettura del tuo repository SVN con SVK

Diciamo che hai un SVN per il tuo progetto OpenSource e vorresti specchiarlo in una posizione remota che ospita progetti open source (come SourceForge.net o dev.java.net). Salterò la fase di registrazione dell’account e del progetto e presumerò che tu abbia già le tue credenziali e l’URL del repository SVN. Presumo anche che tu sia su Debian o Ubuntu e che il tuo SVN sia attivo e funzionante sotto Apache httpd.

Esiste uno strumento chiamato svnsync che viene fornito con SVN 1.4 per impostazione predefinita ed è progettato esattamente per lo stesso scopo, ma c’è una cosa che ci impedisce di usarlo in questo caso. Richiede un hook svn personalizzato da presentare nel repository di destinazione e non è possibile personalizzare nulla nel nostro caso.

Quello che devi fare è installare SVK prima:

# aptitude install svk

In termini generali, SVK è un superset di SVN e quindi consente alcuni trucchi avanzati come la sincronizzazione dei repository. Esiste un libro di Version Control with SVK a cui puoi fare riferimento come guida approfondita su SVK. Rimarrò breve. Il concetto è che crei un repository SVK (il “depot”) che conterrà una copia di tutti i repository SVN coinvolti (il tuo repository principale e quelli a cui trasferisci informazioni) e poi sincronizzi queste copie.

Poiché vogliamo che i repository siano sincronizzati ogni volta che viene effettuato un commit, verrà utilizzata la procedura degli hook SVN e nel nostro caso ciò avverrà sotto l’utente apache httpd.

Quindi, per semplificare le cose, accediamo a quell’account e eseguiamo la routine richiesta.

# su www-data

Ora quello che dobbiamo fare è inizializzare il depot predefinito.

$ svk depotmap

Modifica il percorso per specificare dove desideri memorizzare il depot. Io sceglierei /var/opt/svk/local.

Ora sei in grado di creare almeno 2 specchi: uno per il repository locale e uno per quello remoto (nulla ti impedisce di avere più specchi):

$ svk mirror //local file:///var/opt/svn

Ecco come abbiamo mappato la posizione del repository (chiamata “locale”) direttamente alla posizione del file system in cui risiede il repository svn.

$ svk mirror //remote https://myproject.svn.sourceforge.net/svnroot/myproject

Lo stesso vale per il repository remoto, in questo caso ospitato su SourceForge.net. Dovrai accettare permanentemente il certificato e fornire il tuo nome utente e password per essere memorizzati nella cache.
Poiché il repository remoto sarà di sola lettura, lo sincronizzeremo solo una volta

$ svk sync //remote

e poi eseguire le azioni che saranno successivamente eseguite dallo script post-commit.

$ svk sync //local  
$ svk smerge --baseless --incremental --verbatim //local //remote

L’ultimo comando sincronizzerà il repository locale con quello remoto preservando tutti i dettagli del commit.
Per fare in modo che ciò avvenga automaticamente dopo un commit al repository locale, crea un file chiamato post-commit nella directory hooks del tuo repository SVN locale e inserisci quei comandi al suo interno. Rendilo eseguibile con

$ chmod +x ./post-commit #considerando che sei nella dir ''hooks''

Ecco fatto, controllalo.

Alex Yanchenko, www.centricware.org
Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.