Jump to: navigation, search

Uso SVN

Un sistema di controllo di versione (version control system) è una combinazione di tecnologie e procedure per tenere traccia e controllare i cambiamenti dei file di un progetto, in particolare del codice sorgente, della documentazione e delle pagine web.

Viene usato prevalentemente nello sviluppo di progetti ingegneristici o informatici per gestire la continua evoluzione dei documenti digitali come il codice sorgente del software, i disegni tecnici, la documentazione testuale e altre informazioni importanti su cui può lavorare una squadra di persone.

I programmi di versioning sono software che funzionano secondo un'architettura client/server: il server è un repository centralizzato, in cui chiunque può mettere o prendere le risorse tramite il client. Le modifiche concorrenti (la modifica simultanea di un documento) vengono gestite dal server, che conserva lo storico, il nome degli autori e i loro commenti, effettuando una numerazione progressiva del documento.

Esistono numerosi software che permettono il versioning. SP7 ha scelto di utilizzare Subversion (SVN), un software di versioning open source gratuito.

L’accesso al repository (server) di SP7 è possibile dall’indirizzo http://sp7.irea.cnr.it/svn/, attraverso inserimento di credenziali. Le credenziali consentono ai partecipati di SP7 e ad eventuali utenti esterni di fruire del materiale contenuto nel repository con permessi di lettura e scrittura differenziati. La struttura del repository è qui di seguito rappresentata.


Struttura SVN


Tale struttura iniziali potrà subire ampliamenti e modifiche, per adattarsi alle esigenze che nasceranno nel corso del lavoro di SP7.

Informazioni specifiche per l’utilizzo di Subversion si trovano in molti siti. Si segnala in particolare il libro dedicato Version Control with Subversion.

La scelta del client indispensabile per l’iterazione con il repository è invece personale, e dipende, tra le altre cose, dal sistema operativo attivo sulla macchina su cui si lavora. Di seguito si riporta un elenco dei più diffusi client di versioning.

  • Kdesvn è un client GUI per Linux.
  • RapidSVN è un client GUI per Microsoft Windows o Linux, scritto in C++ usando il framework wxWidgets.
  • eSvn è un client basato su Qt.
  • JSVN è un client basato su Java Swing.
  • TortoiseSVN è un'estensione della shell di Microsoft Windows.
  • RabbitVCS è un'estensione della shell di Linux.
  • svnX è un client GUI per Mac OS X.
  • Versions è un nuovo client per Mac OS X, dotato di un'interfaccia coerente con il Sistema Operativo Apple.

Si riportano una serie di termini reperibili anche nel Glossario di SP7 utili per con comprendere il funzionamento del programma di versioning:

  • Commit
  • Update
  • Checkout o Working Copy: è l’operazione con la quale si recupera il materiale presente in un repository. In pratica, equivale a creare una “copia di lavoro” locale di unprogetto sottoposto a controllo di versione. La copia di lavoro locale rientraa tutti gli effetti nel meccanismo di controllo di versione e può essere a suavolta soggetta a “commit” perregistrare nuove versioni. Il materiale locale recuperato da un’operazione dicheckout contiene la struttura di file prodotta fino a quel momento ed imetadati necessari per le attività di controllo. Questa copia di lavoro delrepository viene creta in locale e ciascun utente può vederla nel propriocomputer e utilizzarla come qualsiasi altra cartella di lavoro.
  • Revisione: è la concretizzazione (o istanza) di un artefatto in un determinato istante nello storico che rappresenta la sua evoluzione. Adesempio, eseguendo un commit suldocumento X a questo verrà assegnata la versione 1. Il documento X potrà essererecuperato da un altro utente mediante update,che potrà successivamente rieseguire un commitsullo stesso documento, generando la versione 2. Così facendo il documento Xavrà “n” versioni, ognuna delle quali recuperabili tramite il sistema diversioning.
  • Diff: è la rappresentazione delle modifiche effettuate su un artefatto. In pratica è ilrisultato di un confronto fra due versioni; ad esempio in un documento mostraquali righe sono state cambiate ed in che modo.
  • Tag: è l’identificativo di un insieme di file ad una specifica revisione. I tag sonomolto utili per identificare la parte di progetto che presenta delle modifiche“interessanti”. Ad esempio, nel caso di rilascio di una versione, un tag puòrappresentare l’insieme dei file che hanno subito variazioni.
  • Branch: è una copia indipendente (o ramo) del progetto originario che segue unadifferente linea di sviluppo. Scopo principale di un branch è quello di evitareche le modifiche applicate alla nuova linea di sviluppo possano interferire conquelle del progetto originario. Solitamente lo stesso progetto originario è unbranch chiamato “master” o “linea principale”. L’utilizzo dei rami di sviluppoè utilizzato per lo più per sviluppi che prevedono delle variazioni funzionalirispetto alla linea principale (ad esempio, per implementazioni sperimentali).
  • Merge: è l’operazione attraverso la quale si fanno confluire due branch in un unico ramodi sviluppo. Praticamente equivale a riportare in un altro le modificheapplicate ad un altro ramo .
  • Merge di file: è l’operazione che comporta l’unione delle modifiche apportate allo stesso file da due operatori differenti. Tutti i moderni sistemi dicontrollo versione sono in grado di valutare le differenze tra due file e, inassenza di conflitti, di effettuare l’unione automatica con la creazione di ununico file.
  • Conflitto: è l’effetto che si produce quando due modifiche riguardano la stessa parte di codice. I conflitti sono molto comuni in un ambito di lavoro digruppo e possono essere risolti solo manualmente da un operatore che è in gradodi sciogliere le ambiguità emerse.
  • Blocco: è l’operazione che vincola le modifiche ad un file finchè non viene chiusa da chil’ha avviata. Non tutti i sistemi di versioning la utilizzano perché talepratica vincola lo sviluppo parallelo e pertanto risulta scarsamenteutilizzata. In alcuni casi il concetto di blocco è utilizzato solo in contestiparticolari, come quello del commit, per garantirel’atomicità delle azioni.