Subversion, noto anche come svn, che è il nome del suo client a riga di comando, è un sistema di version control realizzato specificamente per sostituire CVS, che è considerato avere troppe carenze.
Subversion è uno strumento di sviluppo gratuito e multi piattaforma utile per gestire il lavoro collaborativo di più persone in contemporanea sullo stesso progetto. Subversion è costruito su uno strato portabile chiamato APR, la libreria Apache Portable Runtime. La libreria APR fornisce tutte le interfacce per le funzioni richieste da Subversion per funzionare su diversi sistemi operativi: l’accesso al disco, alla rete, la gestione della memoria e così via. Anche se Subversion è in grado di utilizzare Apache come uno dei possibili componenti lato server, la sua dipendenza da APR non significa che Apache sia un componente richiesto per funzionare. Significa, comunque, che come Apache, i client ed i server di Subversion funzionano su ogni sistema operativo su cui gira il server httpd Apache: Windows, Linux, tutte le varianti di BSD, MAc OS X, Netware ed altri. Alcune distribuzioni GNU/Linux dispongono già di SVN e ne installano i vari moduli in fase di installazione del sistema operativo. Il modo più semplice per sapere se già si dispone dello stesso è digitare da terminale il comando:
# svn –version
1.1 - Installazione Il modo più facile per ottenere Subversion è scaricare il pacchetto precompilato già pronto per il vostro sistema operativo. Il sito web di Subversion rende disponibili questi pacchetti, preparati ed inviati da volontari. Il sito normalmente contiene pacchetti d’installazione grafici per gli utenti dei sistemi operativi Microsoft. Se siete utenti di un sistema operativo di tipo Unix, per ottenere Subversion potete utilizzare i sistemi di distribuzione nativi per il vostro sistema (RPMs. DEBs, ports tree, etc.). Come alternativa, si può installare Subversion direttamente dai codici sorgenti. Scaricate l’ultima release del codice sorgente dal sito web di Subversion. Dopo averlo spacchettato, seguite le istruzioni contenute nel file INSTALL per compilarlo. Da notare che un pacchetto di sorgenti rilasciato, contiene tutto ciò di cui si necessiti per costruire un client a riga di comando in grado di parlare con un repository remoto (in particolare, apr, apr-util, e le librerie neon). Ma parti opzionali di Subversion hanno molte altre dipendenze, come il DB Berkeley ed anche Apace httpd. Se volete realizzare una costruzione completa, siate sicuri di avere tutti i pacchetti descritti nel file INSTALL. Se avete intenzione di lavorare su Subversion stesso, potete utilizzare il client per ottenere l’ultima copia dei sorgenti allineata con la frontiera degli sviluppi. E’ inoltre consigliabile installare un client grafico per l’utilizzo da parte di utenti meno esperti quali TortoiseSVN, RapidSVN oppure KDESVN. Subversion, una volta installato, possiede un certo numero di differenti tools. Segue un veloce riferimento al riguardo.
svn Il client a riga di comando. svnversion Un programma per conoscere lo stato (in termini di revisione degli elementi presenti) di una copia di lavoro. svnlook Un tool per ispezionare un repository Subversion. svnadmin Un tool per creare, operare e riparare un repository Subversion. svndumpfilter Un programma per filtrare i flussi di dump di un repository Subversion. mod_dav_svn Un modulo plug-in per il Server Apache HTTP, usato per rendere disponibile ad altri la vostra repository via rete. svnserve Un programma server specializzato per essere eseguito come un processo demone oppure essere invocato tramite SSH; un altro modo per rendere accessibile via rete ad altri il vostro repository.
1.2 - Creare un repository Una volta installato correttamente il nostro pacchetto SVN possiamo dunque creare un repository server. Per far ciò occorre digitare il seguente comando:
# svnadmin create -fs-type fsfs path_repository # svnadmin create -fs-type fsfs /srv/svn/repository/mio_repository
ed assegnare i relativi permessi allo stesso.
# chown -R apache /srv/svn/repository/
N.B. Per una semplice e rapida creazione del repository non abbiamo trattato l’argomento permessi. Abbiamo solamente definito propietraio del repository l’utente root (Apache nel nostro caso per poterlo poi elaborare lato web). Per maggiori informazioni riguardo la gestione/creazione di utenti o gruppi di lavoro diversi vedere il punto 1 del link: http://help.ubuntu-it.org/7.04/ubuntu/serverguide/it/subversion.html Digitando il comando “svnlook tree path_repository_locale” a schermo verrà visualizzato l’albero dello stesso vuoto.
# svnlook tree path_repository_locale # svnlook tree /srv/svn/repository/mio_repository /
Ora che il repository è creato bisogna popolarlo con qualcosa di utile. Per esempio andiamo a creare sulla nostra macchina una cartella di progetto temporanea (che chiameremo successivamente path_dove_risiede_il_progetto_da_caricare) e tre diversi file: file1,file2,filen. Questa è per noi la cartella di progetto che dovrà essere caricata sul repository.
# mkdir /path_dove_risiede_il_progetto_da_caricare # touch /path_dove_risiede_il_progetto_da_caricare/file1 # touch /path_dove_risiede_il_progetto_da_caricare/file2 # touch /path_dove_risiede_il_progetto_da_caricare/filen
N.B. E’ buona norma utilizzare un layout strutturato predefinito come per esempio il layout di BLFS. Di seguito è presente la sua struttura partendo dall’albero radice
mio_repository/ # The name of the repository trunk/ # Contains the existing source tree BOOK/ bootscripts/ edguide/ patches/ scripts/ branches/ # Needed for additional branches tags/ # Needed for tagging release points
Una volta che si è creato il proprio layout di directory come mostrato sopra si è pronti a fare l’importazione iniziale:
# svn import ../realizzazione-e-configurazione-di-un-server-repository-svn-16/-m __8220.css;messaggio generico” \ [path_dove_risiede_il_progetto_da_caricare] \ file:///srv/svn/repository/mio_repository
# svn import ../realizzazione-e-configurazione-di-un-server-repository-svn-16/-m __8220.css;primo ingresso” /home/mio_progetto/ file:////srv/svn/repository/mio_repository/ Adding file1 Adding file2 Adding filen Committed revision 1.
N.B. Importante è ricordare che la cartella dalla quale verrà caricato il progetto non sarà utilizzata come copia della cartella di lavoro, per cui tutte le operazioni fatte sotto la stessa non saranno poste sotto svn. Per non creare confusione, una volta avuta la conferma dell’import del nostro progetto sul server repository è consigliabile eliminarla. Notare come il comando “import”, al pari del comando “commit”, preveda l’obbligo dell’utilizzo delll’opzione “-m”, all’interno del quale è consigliabile inserire un messaggio descrittivo. Tali messaggi potrebbero essere utili in seguito per recuperare una determinata versione del file. Da notare è pure la sintassi utilizzata per descrivere il repository. Infatti è necessario definire il tipo di accesso allo stesso “file:////path_repository_locale”. Eseguendo ora nuovamente il comando “svnlook tree” sarà possibile visualizzare l’albero dei sorgenti appena caricati.
# svnlook tree /srv/svn/repository/mio_repository / file1 file2 filen
A questo punto possiamo dire che la nostra operazione di creazione del server repository è conclusa. Per avere accesso ai sorgenti presenti sul server è necessario crearsi una copia locale dell’intero “pacchetto” posto sotto apposito repository. Occorrerà dunque “scaricare” in una precisa cartella di lavoro l’intero progetto. Per far ciò non occorre far altro che eseguire un’operazione di “checkout” utilizzando la sintassi:
# svn checkout file:////path_repository_locale path_dove_voglio_creare_la_mia_copia_locale
esempio:
# mkdir /home/copia_locale_mio_repository # cd /home/copia_locale_mio_repository # svn checkout file:////srv/svn/repository/mio_repository .
A /home/copia_locale_mio_repository/file1 A /home/copia_locale_mio_repository/file2 A /home/copia_locale_mio_repository/filen Checked out revision 1.
Digitando ora il comando “svn info” sulla nostra nuova copia locale potremmo visualizzare le informazioni rigurdanti lo stato di aggiornamento della nostra copia locale. Esempio:
# svn info /home/copia_locale_mio_repositoryPath: /home/copia_locdiego/ ale_mio_repository URL: file:///srv/svn/repository/mio_repository Repository Root: file:///srv/svn/repository/mio_repository Repository UUID: 1c2c28fd-e830-4fe5-b6b6-3b080df04664 Revision: 1 Node Kind: directory Schedule: normal Last Changed Author: root Last Changed Rev: 1 Last Changed Date: 2007-08-27 12:13:15 +0200 (Mon, 27 Aug 2007)
Nella prossima puntata vedremo come sarĂ possibile condividere il nostro repository in rete. Continuate a seguirci. di Diego Dagassolemi - TuxJournal.net