Wiki Ubuntu-it

Indice
Partecipa
FAQ
Wiki Blog
------------------
Ubuntu-it.org
Forum
Chiedi
Chat
Cerca
Planet
  • Pagina non alterabile
  • Informazioni
  • Allegati
  • Differenze per "Programmazione/Subversion"
Differenze tra le versioni 8 e 60 (in 52 versioni)
Versione 8 del 17/02/2007 22.08.58
Dimensione: 7393
Commento:
Versione 60 del 23/11/2023 03.10.48
Dimensione: 15778
Autore: jeremie2
Commento: Tabelle: rimozione vecchi colori standard
Le cancellazioni sono segnalate in questo modo. Le aggiunte sono segnalate in questo modo.
Linea 1: Linea 1:
## page was renamed from Subversion
Linea 2: Linea 3:

[[BR]]
||<tablestyle="float:right; font-size: 0.9em; width:35%; background:#F1F1ED; margin: 0 0 1em 1em;" style="padding:0.5em;">[[TableOfContents]]||

'''Subversion''' è un sistema alternativo a [:Cvs: CVS] che svolge la medesima funzione di controllo di versione. Questa operazione, meglio descritta nella pagina dedicata a [:Cvs: CVS], consiste nel poter consultare, scaricare, aggiornare sorgenti di programmi salvati in remoto su un server web.
In ubuntu questa tecnologia è sfruttata mediante il client testuale SVN.

= Installazione client =

L'installazione del client è un passo banale, ottenibile mediante l'acquisizione mediante apt del pacchetto svn. E' possibile farlo sia in via grafica (mediante '''synaptic''') sia in via testuale mediante '''apt'''.

{{{
sudo apt-get install svn
}}}

= Il Checkout =

L'operazione di '''checkout''' è la più semplice che ci possa essere ed è generalmente usata dalla maggior parte dell'utenza per ottenere copia del tree virtuale sul proprio hard disk, in modo da poterlo compilare/installare/adattare alle proprie esigenze.

Per eseguire il '''checkout''' di un tree remoto è sufficiente dare un comando del tipo

{{{
svn co svn://nomesito/progetto cartella
}}}

 * '''svn''' ovviamente indica il client che usiamo
 * '''co''' indica checkout, l'operazione da noi richiesta
 * '''svn://''' indica il protocollo usato
 * '''nomesito''' indica il dominio su cui risiede il tree (ES: ''progetto.sourceforge.net'')
 * '''progetto''' indicail nome del progetto che si intende scaricare. Molto spesso infatti sul medesimo dominio risiedono più progetti ed è necessario specificare la scelta. Generalmente quando si esegue il checkout si un progetto, vengono fornite informazioni esaustive sul nome corretto da inserire.
 * '''cartella''' indica la cartella che verrà creata nella nostra home (o all'interno della cartella in cui siamo mentre digitiamo da terminale) e in cui verrà inserito l'intero tree, mentenendo inalterata la sua struttura.

[[Anchor(protocolli)]]
== Altri protocolli di accesso ==

Il metodo di checkout sopra spiegato è quello base, valido per la maggior parte dei casi. Alcune volte però il dominio su cui risiede il tree richiede protocolli differenti. E' pertanto doveroso almeno elencare quali protocolli possono essere sostituiti a svn://

 * {{{svn+ssh://}}} E' il più comune successivamente a svn semplice e si differenzia da quest'ultimo per il suo passare attraverso il protocollo ssh.
 * {{{http://}}} Prevedere la connessione diretta al server mediante il protocollo WebDAV
 * {{{https://}}} Come http, ma mediante connessione sicura
 * {{{file://}}} Prevede l'accesso ad un tree sul proprio pc

= Creare un repository svn in locale =

La spiegazione che segue spiega come creare un proprio tree sul computer locale. In realtà può essere utilizzato anche per crearne uno in remoto, purchè si abbia accesso mediante '''ssh''' al dominio.

== Creazione gruppo e utenti ==

Prima di tutto creiamo il '''nuovo gruppo''' (nell'esempio sarà chiamato ''subversion'') che avrà accesso alla cartella ed assegnamo il nostro utente e quello di '''apache''' (chiamato ''www-data'') a questo gruppo.
#format wiki
<<BR>>
<<Indice(depth=2)>>

= Introduzione =

'''Subversion''' è un sistema alternativo a [[../Cvs|CVS]] che svolge la medesima funzione di controllo di versione. Questa operazione consiste nel poter consultare, scaricare, aggiornare sorgenti di programmi salvati in remoto su un server web.
In Ubuntu questa tecnologia è sfruttata mediante il client testuale '''svn'''.

= Installazione =

Per installare il client è sufficiente [[AmministrazioneSistema/InstallareProgrammi|installare]] il pacchetto ''subversion''.

= Il server SVN =

In questa sezione vengono trattati alcuni fra gli aspetti di maggior interesse per gli utenti e per gli amministratori di server.
 
<<Anchor(protocolli)>>
== Protocolli di accesso ==

I server ospiti, di norma, autorizzano l'accesso alle connessioni che fanno uso di protocolli ben definiti. Quello che segue è un elenco dei protocolli più comuni:
||<:>'''Protocollo'''||<:>'''Descrizione'''||
|| svn:// || Protocollo predefinito per l'accesso ad un repository. Risulta essere il più diffuso. ||
|| svn+ssh:// || È il più comune dopo svn://, si differenzia da quest'ultimo per l'uso del protocollo di connessione sicura [[InternetRete/ConfigurazioneRete/OpenSsh|SSH]]. ||
|| http``:// || Prevede la connessione diretta al server mediante il protocollo WebDAV. ||
|| https``:// || Come HTTP, ma mediante connessione sicura. ||
|| file``:// || Prevede l'accesso ad un repository locale. ||

{{{#!wiki note
È possibile che alcuni server supportino più di un protocollo fra quelli sopra elencati. Per maggiori informazioni, si consulti l'amministratore del server.}}}

== Creare un repository SVN ==

La spiegazione che segue spiega come creare un repository locale sul proprio computer. In realtà può essere utilizzato anche per crearne uno in remoto, purchè si abbia accesso mediante '''ssh''' al dominio ospite.

=== Creazione gruppo e utenti ===

Prima di tutto è necessario creare un nuovo gruppo utente (nell'esempio sarà chiamato ''subversion'') che avrà accesso alla cartella dei sorgenti, dunque si dovrà assegnargli l'utente attuale e l'utente di '''apache''' (chiamato ''www-data'').

Aprire una finestra di terminale e digitare:
Linea 58: Linea 49:
dove ovviamente '''nomeutente''' deve essere sostituito con il vostro nome utente

== Creazione cartelle ==

Pur non essendo una regola, è generalmente preferibile porre la cartella '''svn''' (che conterrà tutti i progetti correlati) nella '''/home''' del sistema.
{{{#!wiki note
Con la dicitura nomeutente si vuole indicare il nome dell'utente che si desidera aggiungere al gruppo subversion. Ripetere il passo per ogni utente al quale si desidera garantire l'accesso, sostituendo tale espressione con il suo nome utente.}}}

=== Creazione cartelle ===

Pur non essendo una regola, è generalmente preferibile porre la cartella {{{svn}}}, destinata a contenere tutti i progetti ospitati, nella cartella {{{/home}}}.

Per creare la nuova directory, digitare da terminale il seguente comando:
Linea 68: Linea 61:
E' poi necessario creare la sottocartella per il nostro primo progetto, che nell'esempio chiameremo, appunto, '''progetto''' ed impostarle come proprietario il gruppo creato.
Dunque, è necessario creare la sottocartella per il primo progetto d'esempio, che avrà come nome ''progetto'', infine impostare come proprietario il gruppo creato:
Linea 73: Linea 65:
sudo chmod -R g+rws myproject
}}}

== Creazione del repository locale ==

L'ultima operazione necessaria è quella di 'avviare' il repository, dando semplicemente il comando

{{{
sudo svnadmin create /home/svn/myproject
}}}

= Creazione di un repository remoto =

Per creare un tree remoto dobbiamo usare il comando import con la seguente sinstassi

{{{
svn import svn://dominio/cartella --username=nomeutente cartellalocale
}}}

Assumendo

 * '''import''' è la funzione che usiamo, ovvero il comando per iniziare un nuovo repository
 * '''svn''' è sempre il protocollo ed è soggetto a cambiamenti come descritto [#protocolli qui]
 * '''dominio''' è sempre l'indirizzo del nostro server remoto
 * '''catella''' è il nome della cartella svn che contiene i progetti remoti
 * '''nomeutente''' è il nome dell'utente che ha i permessi in remoto
 * '''cartellalocale''' indica la posizione assoluta della cartella che vogliamo importare nel nostro tree iniziale

La password verrà chiesta automaticamente


= Altre operazioni =


== Aggiunta di un file o di una cartella ad un tree remoto ==

L'operazione di aggiunta di un file ad un tree remoto è piùttosto semplice e sfrutta il comando 'add' con la sintassi
sudo chmod -R g+rws progetto
}}}

=== Creazione del repository locale ===

Per abilitare l'hosting del progetto nel repository appena creato, è sufficiente digitare il seguente comando:
{{{
sudo svnadmin create /home/svn/progetto
}}}

<<Anchor(autenticazione)>>
== Autenticazione e metodi d'accesso ==

L'autenticazione ad un server '''SVN''' (ad esempio per modificare, aggiungere file ecc) può non essere necessaria, bensì può venire richiesta solo in caso si richieda di effettuare delle operazioni che necessitino tale procedura (sempre nel caso che il server sia configurato per supportare tale opzione).

Ad esempio, un comando generico come il seguente:
{{{
svn [comando] [opzioni]
}}}

Restituirà in caso di necessità (se, ad esempio, sono necessari permessi di scrittura)
{{{
Username:
Password for 'nomeinserito':
}}}

In questo modo, è stato resto più facile e veloce l'utilizzo.

Nel caso in cui il server non supporti tale opzione è possibile usare comunque la sintassi:
{{{
svn [comando] [opzioni] --username nome --password pass
}}}

Quello che segue è un elenco dei principali metodi d'accesso, con le relative indicazioni per l'uso.

=== Accesso diretto (file://) ===

È il più semplice fra i vari metodi di accesso. Consente all'utente di eseguire delle operazioni in un repository presente sulla stessa macchina, inoltre non richiede l'esecuzione in background di alcun processo server. La sintassi dei comandi è simile ai seguenti esempi:
{{{
svn co file://localhost/svn/progetto
}}}

Nel caso si preferisca omettere il dominio della macchina locale è necessario postporre tre barre ''(///)'' al protocollo ''file:, '' come nel seguente esempio:
{{{
svn co file:///home/svn/progetto
}}}

I permessi del repository dipendono dai permessi attivi sul filesystem al momento dell'accesso. Nel caso l'utente non possieda i permessi necessari per le operazioni di lettura/scrittura, non potrà eseguire alcune operazioni, come, ad esempio, il [[#checkout|checkout]]. Per estendere i permessi ad uno o più utenti sarà sufficiente aggiungerli al gruppo degli utenti ai quali è garantito l'accesso ai contenuti del repository.

=== Accesso tramite WebDAV (http://) ===

Per consentire l'accesso tramite il protocollo WebDAV è necessario innanzitutto configurare il proprio server '''apache'''.

Per far ciò è necessario installare il pacchetto ''libapache2-svn'' attraverso uno degli strumenti sopra citati, infine bisognerà aprire il file `/etc/apache2/apache2.conf` con un [[Ufficio/EditorDiTesto|editor di testo]] qualsiasi e aggiungere queste linee alla fine del file:
{{{
  <Location /svn/progetto>
     DAV svn
     SVNPath /home/svn/progetto
     AuthType Basic
     AuthName "myproject subversion repository"
     AuthUserFile /etc/subversion/passwd
     <LimitExcept GET PROPFIND OPTIONS REPORT>
        Require valid-user
     </LimitExcept>
  </Location>
}}}

{{{#!wiki note
Sostituire la dicitura ''progetto'' con il nome del progetto che si desidera pubblicare via WebDAV.}}}

Una volta salvato e chiuso il file, è necessario riavviare il server web:
{{{
sudo /etc/init.d/apache2 restart
}}}

Fattò ciò, si può procedere con l'inserimento dell'elenco degli utenti accreditati, con le relative password, all'interno del file {{{/etc/subversion/passwd}}}. Nel caso che il file non esista, è possibile crearlo con la seguente istruzione:
{{{
sudo touch /etc/subversion/passwd
}}}

Infine, non rimane che inserire gli utenti desiderati all'interno del file sopra citato:
{{{
sudo htpasswd /etc/subversion/passwd nomeutente
}}}

Chiunque abbia l'accesso garantito potrà eseguire le operazioni sul repository, che avranno una sintassi simile a quella del seguente comando:
{{{
svn co http://hostname/svn/myproject progetto --username nomeutente
}}}

{{{#!wiki important
La password verrà trasmessa in chiaro. Se si desidera aggiungere il supporto alla cifratura SSL, si consiglia di consultare il seguente paragrafo.}}}

=== Accesso tramite WebDAV con SSL (https://) ===

Il metodo di accesso in questione differisce da quello precedente solo per il supporto alla chiavi di cifratura SSL. Per offrire il supporto a tale metodo di cifratura occorre installare e configurare, sul proprio server '''apache''', un certificato sicuro, reperibile da enti qualificati come Veri``Sign. In alternativa è possibile anche crearne uno proprio.

Una volta installato e configurato un certificato SSL le modalità d'accesso rimangono identiche a quelle sopra descritte.

=== Accesso tramite SVN (svn://) ===

Per configurare l'accesso al server del repository, tramite il protocollo in questione, è sufficiente modificare il file {{{/home/svn/progetto/conf/svnserve.conf}}}.

Ad esempio, per configurare i permessi è utile decommentare le seguenti righe presenti nel file, cancellando il segno di asterisco anteposto alle righe stesse:
{{{
# [general]
# password-db = passwd
}}}

In questo modo l'autenticazione sarà garantita a tutti gli utenti elencati nel file {{{passwd}}} presente nella stessa cartella. Per aggiungere nuovi utenti al file la sintassi è la seguente:
{{{
nomeutente = password
}}}

Una volta configurato, sarà possibile effettuare l'accesso dalla stessa macchina o da un'altra remota solo dopo aver avviato l'applicazione server '''svnserve''' con una sintassi simile alla seguente:
{{{
svnserve -d --foreground -r /home/svn
}}}

Le opzioni applicate al comando hanno dei significati ben precisi:

 * '''-d''' attiva la modalità servizio

 * '''--foreground''' esegue il processo in primo piano, utile per operazioni di debug

 * '''-r''' radice del percorso contenente i progetti

 * {{{/home/svn}}} parametro richiesto dall'opzione precedente

Una volta avviato il server, esso si metterà in ascolto alla porta predefinita (3690). Per accedere al repository via svn:// sarà sufficiente applicare ai comandi una sintassi simile alla segguente:
{{{
svn co svn://nomehost/progetto progetto --username nomeutente
}}}

Coerentemente con la propria configurazione, il server richiederà di inserire la password per l'accesso.

Per sincronizzare il contenuto di una cartella locale con il repository sarà sufficiente digitare dei comandi simili ai seguenti:
{{{
cd cartella_del_progetto
svn update
}}}

=== Accesso tramite SVN con cifratura SSL (svn+ssl://) ===

Le istruzioni precedenti sono utili anche alla configurazione del server per l'utilizzo con connessioni sicure.

Per abilitare l'accesso via shell sicura è necessario che sul server ospite sia attivo il servizio [[InternetRete/ConfigurazioneRete/OpenSsh|Secure Shell]]. Per verificare che tale servizio sia presente ed attivo è utile effettuare il login tramite il client '''ssh'''.

Una volta effettuate le verifiche sopra descritte, è possibile accedere al repository tramite dei comandi aventi una sintassi simile a quella del seguente esempio:
{{{
svn co svn+ssh://nomehost/home/svn/progetto progetto --username nomeutente
}}}

{{{#!wiki important
Per accedere al repository tramite il metodo in questione è necessario includere il percorso completo del progetto.}}}

<<Anchor(checkout)>>
= Il checkout =

L'operazione di checkout è molto semplice da eseguire ed è generalmente usata dalla maggior parte dell'utenza per ottenere una copia del percorso contenente i sorgenti, in modo da poterlo compilare/installare/adattare alle proprie esigenze.

Per eseguire il '''checkout''' di un repository remoto è sufficiente dare un comando simile al seguente:
{{{
svn co svn://nomesito/progetto cartella
}}}

Qui di seguito sono elencate le spiegazioni delle opzioni del comando precedente:

 * '''co''' l'operazione da eseguire (in questo caso, il __c__heck__o__ut)

 * '''svn://''' il protocollo di rete

 * '''nomesito''' indirizzo del server sul quale risiede il repository dei sorgenti (i.e. ''progetto.sourceforge.net'')

 * '''progetto''' il nome del progetto del quale si desiderano scaricare i sorgenti. Normalmente, sullo stesso server risiedono più progetti ed è necessario specificare il nome del progetto desiderato. Generalmente, quando si esegue il checkout di un progetto, vengono fornite informazioni esaustive sul nome corretto da inserire.

 * '''cartella''' la cartella che verrà creata all'interno della cartella corrente, nella quale verrà salvato l'intero repository, mentenendo inalterata la sua struttura.

{{{#!wiki note
In questa guida, al termine ''repository'' viene associato il significato di ''repository SVN'', che indica il percorso remoto (o locale) contenente la struttura delle directory dei sorgenti. In questo contesto, il termine in questione non ha nulla a che fare con il significato del sinonimo ''[[Repository|repository]]'', ampiamente spiegato all'interno delle guide relative alla gestione dei pacchetti software.}}}

= Altre operazioni di base =

== Sfogliare un repository ==

Si può sfogliare un repository, per conoscerne il contenuto senza eseguire l'operazione di [[#checkout|checkout]], utilizzando una particolare sintassi per il comando '''svn''':
{{{
svn list svn://dominio/cartellaremota
}}}

Il comando dell'esempio restituirà, come risultato, la lista dei file e delle cartelle contenute in {{{cartellaremota}}} presente sul dominio.

== Aggiungere file e cartelle ad un repository remoto ==

L'operazione di aggiunta di un file ad un repository remoto è piùttosto semplice e sfrutta il comando '''svn''' con la seguente sintassi:
Linea 116: Linea 265:
Ovviamente assieme alla cartella locale vengono inseriti anche tutti i files in essa contenuti


== Autenticazione ==

E' giusto spendere una nota di merito a favore di '''svn''' in quanto l'autenticazione ad un server (ad esempio per modificare, aggiungere files ecc) può non dover essere fatta aggiungento parametri, bensì viene richiesta direttamente solo in caso di necessità (se ovviamente il server è configurato per supportare tale procedura).

Ad esempio un comando generico

{{{
svn [comando] [opzioni]
}}}

Restituirà in caso di necessità (se per esempio sono necessari permessi di scrittura

{{{
Username:
Password for 'nomeinserito':
}}}

Così da facilitare l'uso.

Nel caso in cui il server non sia stato configurato per garantire questo processo è possibile usare comunque la sintassi

{{{
svn [comando] [opzioni] --username nome --password pass
}}}

Dove ovviamente '''nome''' e '''pass''' vanno sistituiti con i relativi valori

== Copiare files e cartelle ==

Per spostare sia files che cartelle si usa il comando '''copy'''.
Nel secondo caso, sul repository remoto verranno caricati tutti i file contenuti nella cartella locale selezionata.

== Copiare file e cartelle ==

Per copiare file e cartelle si può usare il comando '''svn''' con una sintassi simile alle seguenti:
Linea 156: Linea 276:
}}}

== Spostare file e cartelle ==

Per spostare sia file che cartelle si può aggiungere una particolare opzione al comando '''svn''':
{{{
svn move file1 file2
svn move file1 cartella/file1

svn move cartella1 cartella2
svn move cartella1 cartella2/cartella1
Linea 161: Linea 291:
Si possono rimuovere file e cartelle (ricorsivamente) mediante il comando '''rm'''
Si possono rimuovere file e cartelle (ricorsivamente) applicando delle specifiche opzioni al comando '''svn''', come da esempio:
Linea 168: Linea 297:
== Sfogliare un tree remoto ==

Si può sfogliare un repository per sapere cosa contiente senza fare il checkout utilizzando il comando '''list'''

{{{
svn list svn://dominio/cartellaremota
}}}


== Spostare files e cartelle ==

Per spostare sia files che cartelle si usa il comando '''move'''.

{{{
svn move file1 file2
svn move file1 cartella/file1

svn move cartella1 cartella2
svn move cartella1 cartella2/cartella1
}}}

= Fonti =

 * http://svn.collab.net/repos/svn/trunk/doc/user/cvs-crossover-guide.html
 * https://help.ubuntu.com/community/Subversion
 * http://svnbook.red-bean.com/en/1.0/ch06s02.html

## da questo punto in poi non modificare!
= Importazione di un progetto in un repository SVN =

Per copiare un proprio progetto in un repository SVN è utile usare il comando '''svn''' con la seguente sintassi:
{{{
svn import cartellalocale svn://dominio/cartella --username=nomeutente
}}}

Assumendo:

 * '''import''' l'opzione per l'importazione, ovvero il comando per importare un progetto all'interno di un repository esistente

 * '''svn''' il protocollo di trasferimento, già descritto [[#protocolli|in precedenza]]

 * '''dominio''' l'indirizzo del server su cui risiede SVN

 * '''cartella''' il nome della cartella sul server SVN che conterrà il nuovo progetto

 * '''nomeutente''' il nome dell'utente che possiede i permessi da remoto

 * '''cartellalocale''' il percorso completo della cartella che si desidera importare nel proprio repository

Tutto il contenuto della cartella verrà copiato ricorsvaimente nell'URL del repository, verranno create, se necessarie, anche delle directory intermedie.

= Note =

'''Subversion''' prevede una guida integrata. Per avere maggiori informazioni sull'uso dei comandi si può digitare:
{{{
svn help
}}}

Per avere maggiori informazioni sull'uso e sulla sintassi delle singole opzioni è sufficiente postporre l'opzione desiderata al comando precedente. Ad esempio, per visualizzare le informazioni riguardanti l'operazione di checkout, è possibile digitare il seguente comando:
{{{
svn help co
}}}

= Ulteriori risorse =

 * [[http://subversion.tigris.org/|Homepage del progetto]]
 * [[http://svnbook.red-bean.com/|Manuale utente]]
 * [[https://help.ubuntu.com/community/Subversion|Versione in lingua inglese della presente guida]]
 * [[http://svn.collab.net/repos/svn/trunk/doc/user/cvs-crossover-guide.html|Passare da CVS a SVN]]
 * [[http://svnbook.red-bean.com/en/1.0/ch06s02.html|Articolo tecnico sulla comunicazione fra client e server SVN]]
Linea 197: Linea 341:
CategoryNuoviDocumenti
 
CategoryProgrammazione CategoryDaRevisionare


Introduzione

Subversion è un sistema alternativo a CVS che svolge la medesima funzione di controllo di versione. Questa operazione consiste nel poter consultare, scaricare, aggiornare sorgenti di programmi salvati in remoto su un server web. In Ubuntu questa tecnologia è sfruttata mediante il client testuale svn.

Installazione

Per installare il client è sufficiente installare il pacchetto subversion.

Il server SVN

In questa sezione vengono trattati alcuni fra gli aspetti di maggior interesse per gli utenti e per gli amministratori di server.

Protocolli di accesso

I server ospiti, di norma, autorizzano l'accesso alle connessioni che fanno uso di protocolli ben definiti. Quello che segue è un elenco dei protocolli più comuni:

Protocollo

Descrizione

svn://

Protocollo predefinito per l'accesso ad un repository. Risulta essere il più diffuso.

svn+ssh://

È il più comune dopo svn://, si differenzia da quest'ultimo per l'uso del protocollo di connessione sicura SSH.

http://

Prevede la connessione diretta al server mediante il protocollo WebDAV.

https://

Come HTTP, ma mediante connessione sicura.

file://

Prevede l'accesso ad un repository locale.

È possibile che alcuni server supportino più di un protocollo fra quelli sopra elencati. Per maggiori informazioni, si consulti l'amministratore del server.

Creare un repository SVN

La spiegazione che segue spiega come creare un repository locale sul proprio computer. In realtà può essere utilizzato anche per crearne uno in remoto, purchè si abbia accesso mediante ssh al dominio ospite.

Creazione gruppo e utenti

Prima di tutto è necessario creare un nuovo gruppo utente (nell'esempio sarà chiamato subversion) che avrà accesso alla cartella dei sorgenti, dunque si dovrà assegnargli l'utente attuale e l'utente di apache (chiamato www-data).

Aprire una finestra di terminale e digitare:

sudo addgroup subversion
sudo adduser nomeutente subversion
sudo adduser www-data subversion

Con la dicitura nomeutente si vuole indicare il nome dell'utente che si desidera aggiungere al gruppo subversion. Ripetere il passo per ogni utente al quale si desidera garantire l'accesso, sostituendo tale espressione con il suo nome utente.

Creazione cartelle

Pur non essendo una regola, è generalmente preferibile porre la cartella svn, destinata a contenere tutti i progetti ospitati, nella cartella /home.

Per creare la nuova directory, digitare da terminale il seguente comando:

sudo mkdir /home/svn

Dunque, è necessario creare la sottocartella per il primo progetto d'esempio, che avrà come nome progetto, infine impostare come proprietario il gruppo creato:

sudo mkdir /home/svn/progetto
sudo chown -R root:subversion progetto
sudo chmod -R g+rws progetto

Creazione del repository locale

Per abilitare l'hosting del progetto nel repository appena creato, è sufficiente digitare il seguente comando:

sudo svnadmin create /home/svn/progetto

Autenticazione e metodi d'accesso

L'autenticazione ad un server SVN (ad esempio per modificare, aggiungere file ecc) può non essere necessaria, bensì può venire richiesta solo in caso si richieda di effettuare delle operazioni che necessitino tale procedura (sempre nel caso che il server sia configurato per supportare tale opzione).

Ad esempio, un comando generico come il seguente:

svn [comando] [opzioni]

Restituirà in caso di necessità (se, ad esempio, sono necessari permessi di scrittura)

Username:
Password for 'nomeinserito':

In questo modo, è stato resto più facile e veloce l'utilizzo.

Nel caso in cui il server non supporti tale opzione è possibile usare comunque la sintassi:

svn [comando] [opzioni] --username nome --password pass

Quello che segue è un elenco dei principali metodi d'accesso, con le relative indicazioni per l'uso.

Accesso diretto (file://)

È il più semplice fra i vari metodi di accesso. Consente all'utente di eseguire delle operazioni in un repository presente sulla stessa macchina, inoltre non richiede l'esecuzione in background di alcun processo server. La sintassi dei comandi è simile ai seguenti esempi:

svn co file://localhost/svn/progetto

Nel caso si preferisca omettere il dominio della macchina locale è necessario postporre tre barre (///) al protocollo file:, come nel seguente esempio:

svn co file:///home/svn/progetto

I permessi del repository dipendono dai permessi attivi sul filesystem al momento dell'accesso. Nel caso l'utente non possieda i permessi necessari per le operazioni di lettura/scrittura, non potrà eseguire alcune operazioni, come, ad esempio, il checkout. Per estendere i permessi ad uno o più utenti sarà sufficiente aggiungerli al gruppo degli utenti ai quali è garantito l'accesso ai contenuti del repository.

Accesso tramite WebDAV (http://)

Per consentire l'accesso tramite il protocollo WebDAV è necessario innanzitutto configurare il proprio server apache.

Per far ciò è necessario installare il pacchetto libapache2-svn attraverso uno degli strumenti sopra citati, infine bisognerà aprire il file /etc/apache2/apache2.conf con un editor di testo qualsiasi e aggiungere queste linee alla fine del file:

  <Location /svn/progetto>
     DAV svn
     SVNPath /home/svn/progetto
     AuthType Basic
     AuthName "myproject subversion repository"
     AuthUserFile /etc/subversion/passwd
     <LimitExcept GET PROPFIND OPTIONS REPORT>
        Require valid-user
     </LimitExcept>
  </Location>

Sostituire la dicitura progetto con il nome del progetto che si desidera pubblicare via WebDAV.

Una volta salvato e chiuso il file, è necessario riavviare il server web:

sudo /etc/init.d/apache2 restart

Fattò ciò, si può procedere con l'inserimento dell'elenco degli utenti accreditati, con le relative password, all'interno del file /etc/subversion/passwd. Nel caso che il file non esista, è possibile crearlo con la seguente istruzione:

sudo touch /etc/subversion/passwd

Infine, non rimane che inserire gli utenti desiderati all'interno del file sopra citato:

sudo htpasswd /etc/subversion/passwd nomeutente

Chiunque abbia l'accesso garantito potrà eseguire le operazioni sul repository, che avranno una sintassi simile a quella del seguente comando:

svn co http://hostname/svn/myproject progetto --username nomeutente

La password verrà trasmessa in chiaro. Se si desidera aggiungere il supporto alla cifratura SSL, si consiglia di consultare il seguente paragrafo.

Accesso tramite WebDAV con SSL (https://)

Il metodo di accesso in questione differisce da quello precedente solo per il supporto alla chiavi di cifratura SSL. Per offrire il supporto a tale metodo di cifratura occorre installare e configurare, sul proprio server apache, un certificato sicuro, reperibile da enti qualificati come VeriSign. In alternativa è possibile anche crearne uno proprio.

Una volta installato e configurato un certificato SSL le modalità d'accesso rimangono identiche a quelle sopra descritte.

Accesso tramite SVN (svn://)

Per configurare l'accesso al server del repository, tramite il protocollo in questione, è sufficiente modificare il file /home/svn/progetto/conf/svnserve.conf.

Ad esempio, per configurare i permessi è utile decommentare le seguenti righe presenti nel file, cancellando il segno di asterisco anteposto alle righe stesse:

# [general]
# password-db = passwd

In questo modo l'autenticazione sarà garantita a tutti gli utenti elencati nel file passwd presente nella stessa cartella. Per aggiungere nuovi utenti al file la sintassi è la seguente:

nomeutente = password

Una volta configurato, sarà possibile effettuare l'accesso dalla stessa macchina o da un'altra remota solo dopo aver avviato l'applicazione server svnserve con una sintassi simile alla seguente:

svnserve -d --foreground -r /home/svn

Le opzioni applicate al comando hanno dei significati ben precisi:

  • -d attiva la modalità servizio

  • --foreground esegue il processo in primo piano, utile per operazioni di debug

  • -r radice del percorso contenente i progetti

  • /home/svn parametro richiesto dall'opzione precedente

Una volta avviato il server, esso si metterà in ascolto alla porta predefinita (3690). Per accedere al repository via svn:// sarà sufficiente applicare ai comandi una sintassi simile alla segguente:

svn co svn://nomehost/progetto progetto --username nomeutente

Coerentemente con la propria configurazione, il server richiederà di inserire la password per l'accesso.

Per sincronizzare il contenuto di una cartella locale con il repository sarà sufficiente digitare dei comandi simili ai seguenti:

cd cartella_del_progetto
svn update

Accesso tramite SVN con cifratura SSL (svn+ssl://)

Le istruzioni precedenti sono utili anche alla configurazione del server per l'utilizzo con connessioni sicure.

Per abilitare l'accesso via shell sicura è necessario che sul server ospite sia attivo il servizio Secure Shell. Per verificare che tale servizio sia presente ed attivo è utile effettuare il login tramite il client ssh.

Una volta effettuate le verifiche sopra descritte, è possibile accedere al repository tramite dei comandi aventi una sintassi simile a quella del seguente esempio:

svn co svn+ssh://nomehost/home/svn/progetto progetto --username nomeutente

Per accedere al repository tramite il metodo in questione è necessario includere il percorso completo del progetto.

Il checkout

L'operazione di checkout è molto semplice da eseguire ed è generalmente usata dalla maggior parte dell'utenza per ottenere una copia del percorso contenente i sorgenti, in modo da poterlo compilare/installare/adattare alle proprie esigenze.

Per eseguire il checkout di un repository remoto è sufficiente dare un comando simile al seguente:

svn co svn://nomesito/progetto cartella

Qui di seguito sono elencate le spiegazioni delle opzioni del comando precedente:

  • co l'operazione da eseguire (in questo caso, il checkout)

  • svn:// il protocollo di rete

  • nomesito indirizzo del server sul quale risiede il repository dei sorgenti (i.e. progetto.sourceforge.net)

  • progetto il nome del progetto del quale si desiderano scaricare i sorgenti. Normalmente, sullo stesso server risiedono più progetti ed è necessario specificare il nome del progetto desiderato. Generalmente, quando si esegue il checkout di un progetto, vengono fornite informazioni esaustive sul nome corretto da inserire.

  • cartella la cartella che verrà creata all'interno della cartella corrente, nella quale verrà salvato l'intero repository, mentenendo inalterata la sua struttura.

In questa guida, al termine repository viene associato il significato di repository SVN, che indica il percorso remoto (o locale) contenente la struttura delle directory dei sorgenti. In questo contesto, il termine in questione non ha nulla a che fare con il significato del sinonimo repository, ampiamente spiegato all'interno delle guide relative alla gestione dei pacchetti software.

Altre operazioni di base

Sfogliare un repository

Si può sfogliare un repository, per conoscerne il contenuto senza eseguire l'operazione di checkout, utilizzando una particolare sintassi per il comando svn:

svn list svn://dominio/cartellaremota

Il comando dell'esempio restituirà, come risultato, la lista dei file e delle cartelle contenute in cartellaremota presente sul dominio.

Aggiungere file e cartelle ad un repository remoto

L'operazione di aggiunta di un file ad un repository remoto è piùttosto semplice e sfrutta il comando svn con la seguente sintassi:

svn add file svn://dominio/cartellaremota
svn add cartellalocale svn://dominio/cartellaremota

Nel secondo caso, sul repository remoto verranno caricati tutti i file contenuti nella cartella locale selezionata.

Copiare file e cartelle

Per copiare file e cartelle si può usare il comando svn con una sintassi simile alle seguenti:

svn copy file1 file2
svn copy file1 cartella/file1

svn copy cartella1 cartella2
svn copy cartella1 cartella2/cartella1

Spostare file e cartelle

Per spostare sia file che cartelle si può aggiungere una particolare opzione al comando svn:

svn move file1 file2
svn move file1 cartella/file1

svn move cartella1 cartella2
svn move cartella1 cartella2/cartella1

Rimuovere un file o una cartella

Si possono rimuovere file e cartelle (ricorsivamente) applicando delle specifiche opzioni al comando svn, come da esempio:

svn rm file
svn rm cartella

Importazione di un progetto in un repository SVN

Per copiare un proprio progetto in un repository SVN è utile usare il comando svn con la seguente sintassi:

svn import cartellalocale svn://dominio/cartella --username=nomeutente

Assumendo:

  • import l'opzione per l'importazione, ovvero il comando per importare un progetto all'interno di un repository esistente

  • svn il protocollo di trasferimento, già descritto in precedenza

  • dominio l'indirizzo del server su cui risiede SVN

  • cartella il nome della cartella sul server SVN che conterrà il nuovo progetto

  • nomeutente il nome dell'utente che possiede i permessi da remoto

  • cartellalocale il percorso completo della cartella che si desidera importare nel proprio repository

Tutto il contenuto della cartella verrà copiato ricorsvaimente nell'URL del repository, verranno create, se necessarie, anche delle directory intermedie.

Note

Subversion prevede una guida integrata. Per avere maggiori informazioni sull'uso dei comandi si può digitare:

svn help

Per avere maggiori informazioni sull'uso e sulla sintassi delle singole opzioni è sufficiente postporre l'opzione desiderata al comando precedente. Ad esempio, per visualizzare le informazioni riguardanti l'operazione di checkout, è possibile digitare il seguente comando:

svn help co

Ulteriori risorse


CategoryProgrammazione CategoryDaRevisionare