Subversion è uno strumento utilizzato nel mondo dello sviluppo del software per mantere sincrone le working copy di ciascun sviluppatore.
In sostanza ci permette di avere una copia locale di un progetto, modificarla e poi rispedire al server le modifiche da noi effettuate, in modo che tutti gli altri sviluppatori ne possano usufruire, mantenendo così sempre aggiornato il software sul quale si sta lavorando.
L'idea è molto interessante anche perchè il server non tiene traccia di tutte le versioni nella loro completezza, ma delle differenze che ci sono tra di esse quindi in uno spazio inferiore vengono comunque immagazzinate tutte le versioni con la possibilità di passare ovviamente ad una revisione precedente.
Il metodo più semplice per installare e configurare un server SVN sul nostro pc, è appoggiandoci ad Apache Web Server utilizzando il modulo DAV_SVN.
Inoltre, grazie all'utilizzo di Apache non dobbiamo porci troppi problemi per reti limitate che consentono l'utilizzo di solo alcune porte, poichè il servizio utilizzerà la porta 80 di Apache.
Per iniziare ci serve avere installato e configurato Apache, e tramite il nostro gestore dei pacchetti installiamo il modulo DAV_SVN per Apache e il programma subversion per poter scaricare/caricare dai repository SVN.
Ora non ci resta che configurare il servizio.
Per prima cosa creiamo le cartelle che ospiteranno i nostri progetti per esempio:
Code:
rendiamo la cartella scrivibile da apache:
Code:
Nota: nel caso cambiare www-data con il nome dell'utente che lancia il server Apache.
Una volta creata la cartella e resa scrivibile da Apache, dobbiamo configurare DAV_SVN per utilizzare la cartella appena creata.
Modifichiamo quindi il file /etc/apache2/mods-available/dav_svn.conf (potrebbe cambiare in base alla distro ma rimane comunque di facile reperimento navigando all'interno della cartella di installazione di Apache) inserendo le seguenti linee:
Code:
DAV svn
SVNParentPath /var/local/repo
AuthType Basic
AuthName "Subversion repository"
AuthUserFile /etc/subversion/passwd
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
</LimitExcept>
</Location>
Attenzione: con la riga SVNParentPath /var/local/repo stiamo dicendo ad Apache che /var/local/repo non è il repository SVN ma bensì la cartella in cui saranno poi contenuti i vari repository.
Ora, come abbiamo impartito ad Apache con la riga AuthUserFile /etc/subversion/passwd dobbiamo creare delle credenziali per chi vuole accedere al servizio. Per farlo utilizziamo il comando htpasswd come segue:
Code:
Il comando ci chiederà una password che forniremo. Per aggiungere ulteriori utenti basterà ridare il comando senza usare però l'opzione -c come segue:
Code:
Non ci resta che riavviare Apache, in modo che legga la nuova configurazione, con il comando:
Code:
o utilizzate il comando definito dalla vostra distribuzione.
Al riavvio Apache sarà configurato per fornirci il supporto SVN.
Dobbiamo ora creare il nostro repository. Per farlo dobbiamo utilizzare l'utente di Apache, www-data per alcune distribuzioni, nella cartella che abbiamo destinato a contenitore dei nostri progetti. Quindi
Code:
# su www-data
Ora diamo il comando che ci permette di generare la cartella contenente i file necessari per il repository:
Code:
che risulterà raggiungibile all'indirizzo:
Code:
Vediamo ora i comandi principali di Subversion:
per creare una working copy sul nostro computer contenente tutti i dati del repository usiamo:
Code:
Attenzione: questo comando serve solo la prima volta per creare sul nostro pc la working copy con i file dell'ultima versione. Per scaricare gli aggiornamenti effettuati da altri sviluppatori si dovrà utilizzare il comando svn update che viene spiegato di seguito.
posizioniamoci ora all'interno della cartella contenente la working copy e creiamo un file con:
Code:
$ echo "Questo è il mio primo file su SVN." > file_prova
se utilizziamo ora il comando
Code:
il risultato sarà una cosa del tipo:
Code:
? file_prova
con il ? SVN ci sta dicendo che non conosce file_prova come file sotto controllo di versione. Dobbiamo quindi aggiungere il file. Per farlo usiamo:
Code:
l'output di svn status ora sarà:
Code:
A file_prova
dove la A sta per ADD quindi SVN sa che al prossimo caricamento dovrà includere il file file_prova.
Per caricare sul server la nostra working copy ci basterà dare il comando
Code:
con questo comando tutti i file aggiunti/modificati/eliminati verranno caricati come nuova versione sul server.
Attenzione: quando si vuole eliminare un file non basta cancellarlo dalla working copy, ma bisogna dire a SVN che non si desiderà più mantenre il file.
Il comando per eliminare un file, dal controllo di versione ma anche dal filesystem è:
Code:
l'output di svn status sarà:
Code:
D <file>
D ...
dove la D sta per DELETE; il file è stato quindi cancellato dal filesystem, e al prossimo commit verrà tolto dal controllo di versione.
Altro comando necessario è il comando che ci permette di scaricare dal server l'ultima versione aggiornata:
Code:
Verranno in questo modo scaricate tutte le nuove modifiche della nuova versione rispetto alla versione in nostro possesso.
Attenzione: nel caso di conflitti (si sono apportate modifiche allo stesso blocco di codice che è stato modificato in questa versione), bisogna rivolgere particolare attenzione ai problemi che può generare questo comando. Le opzioni che avete sono quelle di scrivere i vostri file in modo combinato mantendo le vostre modifiche e quelle proposte dal server, oppure scegliere se salvare le vostro modifiche o salvare quelle proposte dal server. La scelta dipende ovviamente dal lavoro eseguito sulla working copy e sulla revisione attuale.
Al comando svn update si può anche specificare una revisione alla quale si vuole portare la propria working copy tramite il parametro -r:
Code:
Altri comandi utile sono
Code:
che ci permette di leggere i log di tutte le revisioni o di una in particolare se specificata con -r.
Code:
che ci permette di leggere tutte le informazioni riguardante il server e la nostra working copy
Code:
che ci permette di modificare le impostazioni; per esempio nel caso volessimo cambiare l'indirizzo del repository utilizzato, utile nel caso di un repository in una lan che si vule raggiungere poi da remoto, ci basterà utilizzare:
Code:
In conclusione si può dire che SVN è uno strumento all'avanguardia, utilissimo per lavori collettivi o in team che permette di gestire le modifiche del software, tenendo traccia di tutte le versioni, in maniera molto semplice.
Tags
Apache Bash Elastix Firewall Firma digitale Geolocazione Grafica Informatica Internet Java Linux OpenMoko PHP Programmazione Python Reti Ricetta SEO Sicurezza Sistemi Operativi Varie Virtualizzazione VoIPLink ad altri blog:



# svnserve -d -r /path/to/repo/
per far partire il server nel caso in cui non si voglia utilizzare apache (apache é pesante... e alcuni server hanno su altri server come ad esempio lighttpd )
per il resto... "mi piace" :P