Quando lavoriamo ad un progetto è sempre comodo tracciare i cambiamenti tra le versioni, siano esse dei semplici build stabili o delle release ufficiali. Mettere sotto controllo di versione (o controllo di configurazione) il software può essere facoltativo finché lavoriamo da soli, ma diventa obbligatorio se lavoriamo in team. Esistono diversi modi di tenere sotto controllo di versione un software, tra cui spiccano SVN (Subversion) e CVS (Concurrent Version System). Entrambe le soluzioni sono integrate negli IDE più popolari, ma è quasi indispensabile sapere usare il tool di versionamento anche in modalità stand-alone (principalmente a linea di comando). Il motivo è semplice: un IDE offre solo un'interfaccia verso il sistema di versionamento, ma non lo sostituisce. Appena qualcosa va storto, e un normale clean non riesce a risolvere il problema, rischiamo di “incastrare” sia l'IDE che la nostra copia locale del progetto. In questi casi l'unica soluzione è scavalcare l'interfaccia dell'IDE e utilizzare direttamente il sistema di versionamento.

Oggi vedremo come compiere le principali operazioni di versionamento nel caso di SVN, facendo riferimento ai comandi eseguibili a linea di comando. La maggior parte di questi comandi avrà lo stesso nome anche se usiamo un IDE o un'altro tool, come ad esempio Tortoise.

Il primo checkout

Se dobbiamo iniziare a lavorare su un progetto già avviato, avendo a disposizione l'URL del repository dove si trova il server SVN, possiamo “tirar giù” in locale il progetto eseguendo un checkout, preferibilmente in una directory dedicata

svn checkout --username=<utente> http://<url del repository>

il parametro più importante è l'URL del repository, che nella maggior parte dei casi possiamo verificare anche via browser. Il nome utente potrebbe non essere necessario se il repository è pubblico, oppure accessibile solo via VPN. In alcuni casi ci potrebbe venire chiesta anche la password di accesso al repository. Dopo aver effettuato il checkout (ovvero il download) del progetto possiamo spostarci all'interno della directory trunk e dare un'occhiata al contenuto.

Aggiungere risorse

Se dobbiamo aggiungere delle nuove risorse al progetto, che non generano alcun conflitto con la versione corrente, ci basterà copiare le nuove directories o i nuovi files all'interno del trunk e poi digitare

svn add <nome file o directory>

nel caso di una nuova directory il comando aggiungerà (in modo ricorsivo) anche il contenuto della directory. Dopo l'add SVN sarà "consapevole” del fatto che abbiamo aggiunto nuove risorse al controllo di versione, ma le nuove risorse esisteranno solamente in locale. Se vogliamo portare le nuove risorse sul repository dovremo “committare” le nostro modifiche.

Commit

Quando abbiamo finito di aggiungere o modificare le risorse in locale possiamo verificare che SVN abbia registrato le modifiche consultando lo status della copia locale

svn st (status)

se ci accorgiamo di avere aggiunto troppe risorse col comando add, possiamo eliminarle dal controllo di versione usando il comando delete

svn del <nome file o directory>

a questo punto copiamo le nuove risorse sul repository, che verranno “uploadate” sul server SVN creando un nuovo numero di versione del progetto

svn commit -m “commento alla versione”

il comando “committerà” tutte le risorse listate dal precedente comando svn st. E' buona norma specificare sempre un messaggio (opzione -m, come sopra) per poter riconoscere poi a colpo d'occhio le diverse versioni del software.

Update

Prima di committare conviene innanzitutto aggiornare la copia locale, per non correre il rischio di restare all'oscuro di eventuali modifiche svolte da altri sviluppatori del nostro team

svn up (update)

questo è chiaramente superfluo se siamo gli unici a lavorare sul progetto... ma è meglio abituarsi a farlo sempre, per non prendere il vizio di committare alla cieca.

Nuovo progetto

In alcuni casi può essere necessario creare un nuovo progetto all'interno della directory principale del repository. Quest'operazione può essere fatta anche manualmente, procedendo in questo modo

  1. Facciamo il checkout dell'intero progetto
  2. Creiamo nella directory root del progetto (prima di ogni trunk) una nuova cartella, ad esempio prova
  3. Creiamo nella nuova cartella le sottocartelle trunk, branches a tags
  4. Copiamo il nuovo progetto all'interno del trunk appena creato
  5. Eseguiamo il comando add prova e committiamo il tutto

Altri comandi utili

Per approfondimenti rimandiamo alla documentazione di SVN disponibile sul web. Alcuni comandi che capita di dover usare spesso potrebbero essere

svn st -u<URL della risorsa> per vedere le risorse “lockate”

svn lock –-force per rimuover un lock su una risorsa

svn diff -r a:b –-summarize per vedere le differenze tra due versioni

l'ultimo comando è uno dei più utili, perché permette di visualizzare le differenza tra due versioni (nell'esempio qui sopra a e b sono i numeri delle due versioni).