Condividi su Facebook
Subversion ~ Ideale per lo sviluppo in team
Scritto da: Monska il 01/07/2009 alle 11:11
Tag: Varie, Programmazione.Visto 843 volte.


Subversion

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:

# mkdir -p /var/local/repo

rendiamo la cartella scrivibile da apache:

Code:
# chown -R www-data:www-data /var/local/repo

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:
<Location /repos>
   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:

$ htpasswd -c /etc/subversion/passwd <username>

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:
$ htpasswd /etc/subversion/passwd <username>

Non ci resta che riavviare Apache, in modo che legga la nuova configurazione, con il comando:

Code:

# /etc/init.d/httpd restart

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:

# cd /var/local/repo
# su www-data

Ora diamo il comando che ci permette di generare la cartella contenente i file necessari per il repository:

Code:
svnadmin create <nome_repository>

che risulterà raggiungibile all'indirizzo:

Code:
http://hostname/repo/<nome_repository>

Vediamo ora i comandi principali di Subversion:
per creare una working copy sul nostro computer contenente tutti i dati del repository usiamo:

Code:

$ svn checkout http://hostname/repo/<nome_repository> [<nome_cartella>]

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:
$ cd <nome_cartella>
$ echo "Questo è il mio primo file su SVN." > file_prova

se utilizziamo ora il comando

Code:
$ svn status

il risultato sarà una cosa del tipo:

Code:
$ svn status
?      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:
$ svn add file_prova [file2 file3 ...]

l'output di svn status ora sarà:

Code:
$ svn status
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:
$ svn commit -m "<log_message>"

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:
$ svn del <file> [file2 file3 ...]

l'output di svn status sarà:

Code:
$ svn status
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:
$ svn update

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:
$ svn update -r <numero_revisione>

Altri comandi utile sono

Code:

$ svn log [-r <numero_revisione>]

che ci permette di leggere i log di tutte le revisioni o di una in particolare se specificata con -r.

Code:
$ svn info

che ci permette di leggere tutte le informazioni riguardante il server e la nostra working copy

Code:
$ svn switch <opzioni>

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:
$ svn switch --relocate http://old_hostname/repo/<nome_repository> http://nuovo_hostname/repo/<nome_repository>

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.


01/07/2009 - 13:22:17NeRON dice:
manca una cosa molto importante

# 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
02/07/2009 - 19:01:36Alberto Trussardi dice:
Ottimo intervento e molto ben sviluppato! Grazie.

Aggiungi un commento:
Nick:
captchaInserire il codice: