## Subversion

Subversion è un software open source per il controllo della versione. Utilizzando Subversion è possibile registrare la storia del codice sorgente e dei documenti. È in grado di gestire l'evolversi di file e directory nel tempo. Nel repository centrale viene posizionato un albero di tutti i file. Il repository è come un server di file, tranne per il fatto che si ricorda qualsiasi cambiamento apportato.

### Installazione

Per accedere al repository di Subversion utilizzando il protocollo HTTP, è necessario installare e configurare un server web. Apache2 funziona molto bene con Subversion. Fare riferimento alla sottosezione HTTP della sezione Apache2 per installare e configurare un certificato digitale.

Per installare Subversion, in un terminale, digitare:

    sudo apt-get install subversion libapache2-svn

### Configurazione del server

I passi seguenti presumono siano stati installati i pacchetti elencati precedentemente. Questa sezione descrive come creare un repository con Subversion e accedere al progetto.

#### Creare un repository con Subversion

Un repository può essere creato con il seguente comando:

    svnadmin create /posizione/del/repository/project

#### Importare i file

Una volta creato il repository è possibile importarvi file. Per importare una directory, digitare ciò che segue al prompt del terminale:

    svn import /percorso/della/directory/da/importare file:///percorso/del/repository/

### Metodi di accesso

È possibile accedere (checkout) ai repository Subversion in diversi modi, sul disco locale o attraverso diversi protocolli di rete. La posizione di un repository, comunque, è sempre un URL. La tabella illustra come i diversi schemi URL vengono mappati ai diversi metodi di accesso.

Tabella 14.1. Metodi di accesso

Schema | Metodo di accesso
--- | ---
file:// | Accesso diretto al repository (sul disco locale)
http:// | Accesso attraverso il protocollo WebDAV al server web Apache2 di Subversion
https:// | Come http://, ma con cifratura SSL
svn:// | Accesso attraverso un protocollo personalizzato a un server svnserve
svn+ssh:// | Come svn://, ma attraverso un tunnel SSH

In questa sezione viene descritto come configurare Subversion per tutti questi metodi. Saranno descritti solo gli elementi basilari. Per maggiori informazioni, fare riferimento al libro di svn.

#### Accesso diretto al repository (file://)

Questo è il metodo di accesso più semplice. Non necessita di alcun server di Subversion in esecuzione e serve per accedere a Subversion dalla stessa macchina in cui è in esecuzione. La sintassi del comando è la seguente:

    svn co file:///percorso/del/repository/progetto

o

    svn co file://localhost/percorso/del/repository/progetto

Se non viene specificato l'host, è necessario utilizzare tre slash (///), due per il protocollo (in questo caso file) e uno è lo slash iniziale del percorso. Se viene specificato l'host, utilizzare due slash (//).

I permessi di accesso al repository dipendono dai permessi impostati nel file system. Se l'utente possiede i permessi di scrittura e lettura, allora potrà eseguire checkout e commit al repository.

#### Accesso con il protocollo WebDAV (http://)

Per accedere al repository di Subversion utilizzando il protocollo WebDAV, è necessario configurare il server web Apache2. Aggiungere quanto segue al file `/etc/apache2/apache2.conf`:

     <Location /svn>
      DAV svn
      SVNPath /path/to/repos
      AuthType Basic
      AuthName "Il nome del repository"
      AuthUserFile /etc/subversion/passwd
      <LimitExcept GET PROPFIND OPTIONS REPORT>
      Require valid-user
      </LimitExcept>
      </Location>

Per importare o eseguire il "commit" di file nel proprio repository Subversion via HTTP, il repository deve essere di proprietà dell'utente del servizio HTTP. Nei sistemi Ubuntu, solitamente, l'utente del servizio HTTP è www-data. Per cambiare il proprietario dei file del repository, digitare il comando seguente in un terminale:

    sudo chown -R www-data:www-data /percorso/al/repository

Modificando il proprietario del repository come www-data non sarà più possibile importare o eseguire il "commit" di file nel repository attraverso il comando svn import file:/// come un qualsiasi utente, ma solo come www-data.

È quindi necessario creare il file `/etc/subversion/passwd`. Questo file contiene le informazioni per l'autenticazione dell'utente. Per aggiungere una voce, per esempio per aggiungere un utente, è possibile utilizzare il seguente comando:

    sudo htpasswd -c /etc/subversion/passwd nome_utente

Verrà richiesta la password. Una volta inserita, l'utente viene aggiunto al file. Ora, per accedere al repository, digitare:

                        svn co http://servername/svn

La password viene trasmessa come testo in chiaro. Per evitare attacchi di tipo "password snooping", è necessario utilizzare la cifratura SSL. Per maggiori informazioni fare riferimento alla sezione successiva.

#### Accesso con protocollo WebDAV protetto da cifratura SSL (https://)

L'accesso al repository di Subversion attraverso il protocollo WebDAV con cifratura SSL (https://) è simile a http:// tranne per il fatto che è necessario installare e configurare un certificato digitale per il server Apache2.

È possibile installare un certificato digitale emesso da un'autorità di certificazione come Verisign oppure è possibile installare i propri certificati auto-firmati.

I passi seguenti hanno come presupposto l'installazione di un certificato digitale all'interno del server web Apache2. Per accedere a un repository Subversion, fare riferimento alla sezione precedente. I metodi di accesso sono esattamente gli stessi tranne per il protocollo, in quanto è necessario utilizzare https://.

#### Accesso con il protocollo personalizzato (svn://)

Una volta creato il repository è possibile configurare il controllo degli accessi modificando il file `/path/to/repos/project/conf/svnserve.conf`. Per esempio, per impostare l'autenticazione, togliere i commenti alle seguenti righe presenti nel file di configurazione:

    # [general]
    # password-db = passwd

Dopo aver tolto i commenti alle righe precedenti, è possibile gestire la lista degli utenti nel file passwd. Modificare il file `passwd` presente nella directory e inserire il nuovo utente. La sintassi da usare è la seguente:

    username = password

Per maggiori informazioni fare riferimento al file.

Per accedere a Subversion attraverso il protocollo svn://, sia dalla stessa macchina sia da un'altra macchina, avviare svnserver utilizzando il comando svnserve. La sintassi è la seguente:

    $ svnserve -d --foreground -r /percorso/al/repository
    # -d -- daemon mode
    # --foreground -- run in foreground (useful for debugging)
    # -r -- root of directory to serve

    Per ulteriori dettagli sull'utilizzo fare riferimento a:
    $ svnserve --help

Una volta eseguito questo comando, Subversion si mette in ascolto sulla porta predefinita (3690). Per accedere al repository del progetto, è necessario eseguire, da un terminale, il seguente comando:

    svn co svn://hostname/project project --username nome_utente

In base alla configurazione del server, verrà richiesta la password. Una volta autenticati, viene eseguito il check out del codice dal repository di Subversion. Per sincronizzare il repository del progetto con la copia locale, è possibile eseguire il comando update. La sintassi del comando è la seguente:

    cd directory_del_progetto ; svn update

Per maggiori informazioni sui sotto comandi di Subversion fare riferimento al manuale. Per esempio, per informazioni sul comando co (checkout), al prompt dei comandi digitare:

                        svn co help

#### Accesso con protocollo personalizzato a cifratura SSL (svn+ssh://)

La configurazione e le procedure sono le medesime del metodo svn:// . Per i dettagli consultare la sezione precedente. Questo passaggio prevede che sia stata seguita la procedura precedente e il server Subversion sia stato avviato con il comando svnserve.

Si suppone che il server ssh sia in esecuzione sulla macchina e che accetti connessioni in entrata. Per una conferma, provare a collegarsi alla macchina attraverso SSH. Se il login viene eseguito, tutto è configurato. In caso contrario configurare SSH.

Il protocollo svn+ssh:// è utilizzato per accedere al repository di Subversion usando la cifratura SSL. I dati che vengono trasmessi sono cifrati con questo metodo. Per accedere al repository del progetto (per esempio attraverso un checkout), utilizzare, con il comando, la sintassi seguente:

    svn co svn+ssh://hostname/var/svn/repos/project

È necessario utilizzare il percorso completo (/path/al/repository/progetto) per accedere al repository di Subversion utilizzando questo metodo di accesso.

In base alla configurazione del server, viene richiesta la password. Utilizzare la password per il login con SSH. Una volta autenticati, viene eseguito il checkout del codice dal repository di Subverison.

Bazaar |  | Server CVS