In questo post voglio inserire i passi compiuti per installare l’SVN sul mio server di casa, su cui e’ presente una Ubuntu 9.04. L’SVN e’ un sistema, a mio avviso, geniale che consente di gestire le versioni di un pacchetto software, permettendo la condivisione dei files e il ripristino della situazione dalla versione X alla versione Y; e’ nato per consentire l’utilizzo multiutente, ma io lo uso anche solo per gestire gli avanzamenti dei miei lavori e, sebbene lo usi da poco, mi ha gia’ “salvato” in piu’ di una occasione; senza di lui avrei perso parte del lavoro svolto a causa di sovrascritture errate.

Per prima cosa occorre scaricare il software per il server da qui: http://subversion.tigris.org/getting.html
Nel nostro caso, pero’, possiamo fare ancora prima da terminale, dando sudo apt-get install subversion, ma ATTENZIONE….con la configurazione di default di Ubuntu 9.04 J.J. verrebbe installata la versione 1.5.x di SVN, mentre la versione attuale e’ la 1.6. Per fare cio’ occorre aggiungere nel file /etc/apt/sources.list due nuovi repositories:
deb http://ppa.launchpad.net/anders-kaseorg/subversion-1.6/ubuntu jaunty main
deb-src http://ppa.launchpad.net/anders-kaseorg/subversion-1.6/ubuntu jaunty main

Ripulire la cache e finalmente si puo’ installare l’SVN ultima versione:
sudo apt-get update
sudo apt-get install subversion

A questo punto possiamo creare il primo repository (non puo’ essere un URL, deve necessariamente essere un path locale). Io ho creato una dir /var/svn/repos e creero’ qui dentro i miei repository.
Mi posiziono con un cd sotto /var/svn/repos e con il comando sudo svnadmin create <nomeproj> creo il repository per il mio progetto.
Fatto questo si puo’ installare un applicativo che consente di visualizzare via web i repositories, come ad esempio websvn (http://websvn.tigris.org); copiata la directory nella webroot occorre modificare copiare il files di esempio include/distconfig.php in include/config.php; l’unica cosa che ho modificato nel file e’ stata la riga $config->parentPath che ho scommentato e impostato a $config->parentPath(’/var/svn/repos’); in modo che da web vengano elencati tutti i repositories che vengono man mano creati sotto svn/repos; navigando sotto http://server/websvn si puo’ vedere il risultato, pulito e gradevole alla vista.

Quello che abbiamo configurato con il websvn e’ un modo carino per consultare la situazione, ma a questo punto e’ necessario configurare l’SVN in modo che sia raggiungibile e soprattutto modificabile via rete. Per fare questo occorre fare qualche lavoretto su Apache.
Occorre innanzitutto abilitare Apache al protocollo DAV (Distributed Authoring & Versioning), cosa che si fa facilmente con sudo apt-get install libapache2-svn.
Dopo occorre fare una modifica al file di configurazione di apache inserendo una virtual directory fatta piu’ o meno cosi’ nel file /etc/apache2/sites-available/default:

<Location /svn>
DAV svn
SVNParentPath /var/svn/repos
AuthType Basic
AuthName “Cris and Cris SVN Login”
AuthUserFile /var/svn/svn.htpasswd
Require valid-user
</Location>

Dopo, fare un bel restart di Apache: sudo /etc/init.d/apache2 restart

Per interagire con il repository ci sono molti comandi di svn (list, co, ecc) ma trovo molto piu’ comode le utlities grafiche che permettono con right-click di fare ogni sorta di operazione da/verso il repository.

Il mio e’ un client windows; io normalmente progetto sotto win e quindi, spostandomi sul mio pc, installo il fantastico TortoiseSVN (http://tortoisesvn.tigris.org) che si integra anche con la shell di WinExplorer.

In realta’ il progetto non e’ ancora stato inizializzato; ho creato un generico repository vuoto ma manca ancora la “sostanza”.

Dopo aver configurato l’ambiente e’ finalmente possibile lavorare sul nostro progetto. Per poter sfruttare al meglio le potenzialita’di SVN e’ opportuno creare una opportuna struttura a livello di file system che consente di tenere separati i files di produzione e quelli di sviluppo

Creare quindi in locale una struttura vuota tipo
c:\temp\svn_repo\trunk
c:\temp\svn_repo\tags
c:\temp\svn_repo\branches

e, cliccando con il tasto destro su svn_repo dare TortoiseSVN->Import impostando la root del repository di destinazione.

Possiamo quindi andare nella directory del nostro progetto e inviare i files nel trunk di produzione con tasto destro sulla directory e impostando http://repo_server…/svn/trunk  .

Se siamo in fase di sviluppo e’ opportuno creare una branch nella quale verranno copiati e gestiti i files man mano
che vengono modificati; selezionando il folder in questione, con il destro impostiamo TortoiseSVN->Branch/Tag specificando
ad esempio http://repo_server…/svn/branches/rel_1

Ogni qual volta si inizia a lavorare e’ opportuno scaricare la propria copia locale con tasto destro -> SVNUpdate e, al termine, tasto destro->SVNCommit per inviare i files modificati specificando nella nota le modifiche apportate; SVN incrementa il numero di versione.

Sto iniziando da poco a usare e apprezzare l’SVN, sistema per la gestione delle versioni di un pacchetto.

Qui si puo’ scaricare la versione che utilizzo io e qui il client TortoiseSVN che si integra alla grande in Windows Explorer.

Seguiranno su queste pagine diversi esempi e tutorial su come implementare l’SVN.