Un rapido inizio

Some people have trouble absorbing a new technology by reading the sort of top down approach provided by this book. This section is a very short introduction to Subversion, and is designed to give bottom up learners a fighting chance. If you prefer to learn by experimentation, the following demonstration will get you up and running. Along the way, we give links to the relevant chapters of this book.

Alcune persone hanno dei problemi ad assorbire una nuova tecnologia tramite l'approccio «top down» di questo libro. Questa sezione è un'introduzione a Subversion molto sintetica, ed è pensata per fornire una possibilità  in più a chi è abituato ad imparare con un approccio «bottom up». Se si preferisce imparare sperimentando, gli esempi seguenti vi permetteranno di essere subito operativi. Strada facendo, saranno evidenziati i collegamenti ai capitoli più importanti di questo libro.

If you're new to the entire concept of version control or to the copy-modify-merge model used by both CVS and Subversion, then you should read Capitolo 2, Concetti base before going any further.

Se per voi sono nuovi sia l'insieme dei concetti di controllo di versione, sia il modello «copia-modifica-fusione (copy-modify-merge)» usato sia da CVS che da Subversion, allora dovreste leggere Capitolo 2, Concetti base prima di andare avanti.

[Nota] Nota

The following example assumes that you have svn, the Subversion command-line client, and svnadmin, the administrative tool, ready to go. It also assumes you are using Subversion 1.2 or later (run svn --version to check.)

Il seguente esempio assume di avere pronti all'uso svn, il client a linea di comando di Subversion, e svnadmin, il tool di amministrazione. Si assume anche che stiate usando Subversion 1.2 o successivo (usare il comando svn --version per controllare.)

Subversion stores all versioned data in a central repository. To begin, create a new repository:

Subversion memorizza tutti i dati sotto controllo di versione in un repository centrale. Per iniziare, creiamo un nuovo repoitory:

$ svnadmin create /path/to/repos
$ ls /path/to/repos
conf/  dav/  db/  format  hooks/  locks/  README.txt

This command creates a new directory /path/to/repos which contains a Subversion repository. This new directory contains (among other things) a collection of database files. You won't see your versioned files if you peek inside. For more information about repository creation and maintenance, see Capitolo 5, Repository Administration.

Questo comando crea una nuova directory /path/to/repos che contiene un repository Subversion. Questa nuova directory contiene (tra le altre cose) un insieme di files di database. Non vedreste i vostri file sotto il controllo di versione se provaste a sbirciarci dentro. Per maggiori informazioni riguardo la creazione e la manutenzione del repository, vedi anche Capitolo 5, Repository Administration.

Subversion has no concept of a project. The repository is just a virtual versioned filesystem, a large tree that can hold anything you wish. Some administrators prefer to store only one project in a repository, and others prefer to store multiple projects in a repository by placing them into separate directories. The merits of each approach are discussed in sezione chiamata «Choosing a Repository Layout». Either way, the repository only manages files and directories, so it's up to humans to interpret particular directories as projects. So while you might see references to projects throughout this book, keep in mind that we're only ever talking about some directory (or collection of directories) in the repository.

Subversion non ha il concetto di «progetto». Il repository è solo un filesystem virtuale versionato, un albero di directory molto vasto che può conservare ciò che si desidera. Alcuni sistemisti preferiscono memorizzare solo un progetto per repository alti memorizzano più progetti in un repository ponendoli in directory separate. I pregi di ogni approcci sono discussi in sezione chiamata «Choosing a Repository Layout». Ad ogni modo il repository gestisce solo file e directory, in tal senso è copito degli umani interpretare le particolari directory, come «projects». Per questo ogni qual volta in questo libro venga fatto riferimento ai progetti, si tenga presente che è come se si parlasse di directory (od insiemi di directories) nel repository.

In this example, we assume that you already have some sort of project (a collection of files and directories) that you wish to import into your newly created Subversion repository. Begin by organizing them into a single directory called myproject (or whatever you wish). For reasons that will be clear later (see Capitolo 4, Ramificazioni e fusioni), your project's tree structure should contain three top-level directories named branches, tags, and trunk. The trunk directory should contain all of your data, while branches and tags directories are empty:

In questo esempio, si assume di avere una qualche sorta di progetto (un insieme di files e directories) che vorreste importare in un repository appena creato. Iniziamo organizzandoli in una sola directory chiamata myproject (oppure un qualunque altro nome vi piaccia). Per ragioni che saranno chiare tra poco (vedi Capitolo 4, Ramificazioni e fusioni), l'alberatura del vostro progetto dovrà  contenere tre directory di livello piu' alto chiamate branches, tags, and trunk. La directory trunk conterrà tutti i vostri dati, mentre le directory branches e tags sono vuote:

/tmp/myproject/branches/
/tmp/myproject/tags/
/tmp/myproject/trunk/
                     foo.c
                     bar.c
                     Makefile
                     …

The branches, tags, and trunk subdirectories aren't actually required by Subversion. They're merely a popular convention that you'll most likely want to use later on.

Le sottodirectory branches, tags, e trunk non sono in realta' richieste da Subversion Sono semplicemente una convenzione comune che molto probabilmente vorrete usare in seguito anche voi.

Once you have your tree of data ready to go, import it into the repository with the svn import command (see sezione chiamata «svn import»):

Non appena la vostra struttura di directory è pronta, importatela in una repository svn con il comando svn import (see sezione chiamata «svn import»):

$ svn import /tmp/myproject file:///path/to/repos/myproject -m "initial import"
Adding         /tmp/myproject/branches
Adding         /tmp/myproject/tags
Adding         /tmp/myproject/trunk
Adding         /tmp/myproject/trunk/foo.c
Adding         /tmp/myproject/trunk/bar.c
Adding         /tmp/myproject/trunk/Makefile
…
Committed revision 1.
$

Now the repository contains this tree of data. As mentioned earlier, you won't see your files by directly peeking into the repository; they're all stored within a database. But the repository's imaginary filesystem now contains a top-level directory named myproject, which in turn contains your data.

Ora il repository contiene questa struttura di directory. Come citato prima, non vedreste i vostri file sbirciando direttamente nel repository; sono tutti memorizzati all'interno di un database. Ma il filesystem immaginario del repository ora contiene una directory di livello più alto chiamata myproject, che contiene i vostri dati.

Note that the original /tmp/myproject directory is unchanged; Subversion is unaware of it. (In fact, you can even delete that directory if you wish.) In order to start manipulating repository data, you need to create a new working copy of the data, a sort of private workspace. Ask Subversion to check out a working copy of the myproject/trunk directory in the repository:

Notare che la directory originaria /tmp/myproject non e' cambiata; Subversion non lo sa. (Infatti, potete anche cancellare quella directory se volete.) Per essere in grado di iniziare a manipolare i dati nel repository, avete bisogno di creare una nuova «copia di lavoro (working copy)» dei dati, una sorta di spazio di lavoro privato. Domandate a Subversion di effettuare un «check out» della copia di lavoro della directory myproject/trunk memorizzata nel repository:

$ svn checkout file:///path/to/repos/myproject/trunk myproject
A  myproject/foo.c
A  myproject/bar.c
A  myproject/Makefile
…
Checked out revision 1.

Now you have a personal copy of part of the repository in a new directory named myproject. You can edit the files in your working copy and then commit those changes back into the repository.

Ora avete una copia personale di parte del repository in una nuova directory chiamata myproject. Potete modificare i files nella copia di lavoro e poi sottomettere a svn (commit) i cambiamenti nel repository.

For a full tour of all the things you can do with your working copy, read Capitolo 3, Visita guidata.

Per un tour completo riguado tutte le cose che si possono fare con la copia locale, leggere Capitolo 3, Visita guidata.

At this point, you have the option of making your repository available to others over a network. See Capitolo 6, Configurazione del server to learn about the different sorts of server processes available and how to configure them.

A questo punto, potete scegliere di rendere accessibile il vostro repository via rete. Consultare anche Capitolo 6, Configurazione del server per imparare riguardo i diversi tipi di processi server disponibili e come configurarli.