Home Chi sono Mappa del sito Contatti  
 
Java
Apache Wicket
Sistemistica Totocalcio
 
 
Programmare Applicativi...
Presentazione del libro
Panoramica dei contenuti
 
 
Giochi in PHP
Introduzione
Filetto (Tris)
Forza 4
Sudoku
 
 
Tutorial Linux/Unix
Archivio
 
 
Sql
Tutorial su Mysql
 
 
C++
Framework a oggetti
 
Archivio->Installare Subversion

Installare e configurare Subversion

Questo piccolo tutorial spiega come installare e configurare Subversion 1.0.6 nel sistema operativo FREE BSD 8.0 e successive versioni.

1) Installare Apache 2.2 (vedere Installare Apache 2.2+SSL/PHP 5/MySQL 5.1)
Nella configurazione dell'installazione, assicuratevi di selezionate l'opzione 'BDB' che abilita il database Berkeley DB e l'opzione 'MOD_DAV'.

2) Spostatevi sulla directory del port di Subversion ed avviate la configurazione dell'installazione:
# cd /usr/ports/devel/subversion
# make config

Assicuratevi di selezionate l'opzione 'MOD_DAV_SVN' che abilita WebDav.

# make install
# make clean


3) Se in fase di start up di Apache 2.2 viene restituito il warning:
[warn] module dav_module is already loaded, skipping
Allora dovete aprire il file /usr/local/etc/apache22/httpd.conf e assicurarvi che il modulo web_dav venga caricato una sola volta (commentare il secondo caricamento).

Di seguito la posizione del modulo commentato:
#LoadModule dav_module libexec/apache22/mod_dav.so
LoadModule dav_svn_module libexec/apache22/mod_dav_svn.so


4) Indichiamo con <directory svn> la directory di root di svn (ad esempio /usr/local/repo). Se non esiste occorre crearla:
# mkdir <directory svn>

e cambiamo l'utente con l'utente Apache
# chown -R www:www <directory svn>

5) Creaiamo il file delle password per subversion (nell'esempio inseriamo il primo utente)
# mkdir /etc/subversion
# htpasswd -c /etc/subversion/passwd francesco


6) Creiamo il file di configurazione /usr/local/etc/apache22/extra/httpd-dav_svn.conf ed inseriamo il seguente codice:


7) Quindi inseriamo nel file /usr/local/etc/apache22/httpd.conf, l'inclusione alla configurazione supplementare
Include etc/apache22/extra/httpd-dav_svn.conf

Ora riavviare apache:
# /usr/local/etc/rc.d/apache22 restart

Gestire un progetto subversion

Per creare un progetto eseguire i seguenti comandi sulla macchina server
# cd /usr/local/repo/
# svnadmin create <nome_progetto>
# chown -R www:www <nome_progetto>

Dovremmo poter vedere il progetto all'indirizzo: http://<nome_host>/repos/<nome_progetto>

Su una macchina client è possibile importare il progetto (solo la prima volta).
Se non esiste ne possiamo creare uno nuovo:
# mkdir <nome_progetto>
# mkdir <nome_progetto>/branches
# mkdir <nome_progetto>/tags
# mkdir <nome_progetto>/trunk

Ed adesso lo importiamo con il comando (francesco è l'utente inserito prima)
# svn import <nome_progetto> http://francesco@<nome_host>/repos/<nome_progetto> -m "importazione iniziale"
A questo punto possiamo eliminare la directory, in quanto essendo il progetto in repository possiamo recuperarlo con il CheckOut.
# rm -rf <nome_progetto>


SVN client - i comandi più usati

Sulla macchina client possiamo eseguire il CheckOut del progetto
# svn checkout http://francesco@<nome_host>/repos/<nome_progetto> <nome_progetto>

Entriamo nel trunk del progetto, e proviamo a visualizzare le informazioni del progetto. Dovremmo poter vedere dati quali l'indirizzo URL del progetto, il repository, il numero dell'ultima revisione, autore e data dell'ultima modifica.
# cd <nome_progetto>/trunk
# svn info


Proviamo a creare un file nel trunk
# echo "test" > test.txt
Se proviamo a visualizzare lo stato del progetto
# svn status
notiamo che il file viene segnalato come file non in repository
? test.txt

Proviamo ora ad aggiungere il file appena creato nel repository con il seguente comando
# svn add test.txt
notiamo che adesso, con il comando per la visualizzazione dello stato del progetto, il file viene segnalato come aggiunto in repository ma non ancora committato
A test.txt

Possiamo eseguire il commit del file con il comando
# svn ci test.txt -m "file di test"
o equivalentemente eseguire il commit di tutti i file del progetto (saranno committati solo quelli aggiunti, modificati o eliminati)
# svn ci -m "file di test"

Proviamo ora ad modificare il file ed a visualizzare lo stato del file
M test.txt
Possiamo quindi committare la modifica del file
# svn ci -m "file test modificato"

Proviamo ad eliminare il file dal repository
# svn rm test.txt
Il file viene fisicamente rimosso dalla macchina client ma non dal server. Lo stato del progetto segnala questo file come eliminato
D test.txt
Come per le altre operazioni viste fino ad ora, per rendere effettiva l'eliminazione occorre eseguire il commit.
# svn ci -m "file test eliminato"

Dalle altre macchine client, per tenere il progetto aggiornato (rispetto alle modifiche committate dalle altre macchine), si usa il seguente comando
# svn update


SVN client - gestire le versioni

L'uso delle directory branches, tags e trunk non è una regola ma una buona consuetudine. Il progetto in fase di sviluppo si trova su trunk. Ad ogni rilascio avviene una copia in (branches) e in (tags). La directory branches contiene tutte le versioni che vengono rilasciate. Quando su una versione (cioè su branches) si scoprono dei bachi, successivamente alla correzione dei bachi, si crea una sotto-versione stabile apposita su tags.
Questa metodologia consente di avere separati: il progetto in fase di sviluppo (trunk), le versioni rilasciate (branches). Infine, per ogni versione, tutte le sotto-versioni (tags).


Ecco un esempio di rilascio di un progetto (test), sul server test.test.it alla versione 1.4.1
# svn copy -m "Creazione branche 1_4_x" http://francesco@test.test.it/repos/test/trunk \
http://francesco@test.test.it/repos/test/branches/1_4_x
# svn copy -m "Creazione tag 1.4.1" http://francesco@test.test.it/repos/test/branches/1_4_x \
http://francesco@test.test.it/repos/test/tags/1_4_1


Se alla versione 1.4.1 si scoprono dei bachi, si modifica la versione 1.4.x in branches, quindi successivamente si crea un nuovo tag
# svn copy -m "Creazione tag 1.4.2" http://francesco@test.test.it/repos/test/branches/1_4_x \
http://francesco@test.test.it/repos/test/tags/1_4_2


Poichè le modifiche sono avvenute in branches, occorre fonderle con trunk. Quindi ricavare tutte le operazioni eseguite sul branches 1.4.x con il comando
# svn log http://francesco@test.test.it/repos/test/branches/1_4_x

Occorre calcolare il numero in cui e' stata fatta l'ultima sincronizzazione. Supponiamo di aver fissato un bug nel branches 1.4.x e la revisione era alla 10 e di aver committato (perciò la versione di svn e' passata da 9 a 10). con il comando seguente, eseguito nella cartella dove e' presente il TRUNK da aggiornare.
Entrare nella directory di trunk, ed eseguire il comando di merge:
# svn merge -r9:HEAD http://francesco@test.test.it/repos/test/branches/1_4_x



SVN client - risolvere i conflitti


A seguito di un aggiornamento (svn update) o di un merge, è possibile che ci siano dei file con modifiche sovrapposte ovvero dei conflitti.
Se ad esempio il file 'test.java' contiene dei conflitti, svn crea 3 file: test.java.mine (versione presente nella copia di lavoro prima dell'update), test.java.rOLD (versione precedente alle modifiche della copia di lavoro) e test.java.rNEW (versione attualmente presente sul server). In oltre nel file 'test.java' vengono aggiunti dei marcatori
<<<<<< .mine
// linee in conflitto presenti in locale
=======
// linee presenti sul server
>>>>>> .r11


Se proviamo a visualizzare lo stato del file (svn status), vedremo
C test.java

Dopo aver modificato il file, è possibile segnalare a subversion che il conflitto è stato risolto
# svn resolved test.java
Successivamente sarà possibile committare le modifiche apportate.

Un altro comando importante è la possibilità di ripristinare il file allo stato iniziale (prima di eventuali modifiche locali).
# svn revert test.java
Se eseguito su un file con dei conflitti, il risultato sarà di annullare le modifiche eseguite in locale ed accettare gli aggiornamenti del server. Ovviamente non è necessario eseguire un commit poiché non ci sono modifiche al file rispetto alla versione del server.

Infine mediante il comando (svn diff) possiamo visualizzare le differenze tra i file della versione locale e file della versione del server.
svn diff
oppure
svn diff test.java