Subversion tracks tree structures, not just file contents. It's one of the biggest reasons Subversion was written to replace CVS.
Subversion tiene conto delle strutture dell'albero, non solo del contenuto dei file. È uno dei motivi principali per cui Subversion è stato scritto per rimpiazzare CVS.
Here's what this means to you, as a former CVS user:
Questo è quello che significa per un precedente utente di CVS:
The svn add and svn delete commands work on directories now, just as they work on files. So do svn copy and svn move. However, these commands do not cause any kind of immediate change in the repository. Instead, the working items are simply “scheduled” for addition or deletion. No repository changes happen until you run svn commit.
Adesso i comandi svn add e svn delete lavorano su directory, così come lavorano sui file. Così come svn copy and svn move. Comunque, questi comandi non causano nessun tipo di cambiamento immediato nel repository. Invece, gli elementi di lavoro sono semplicemente «pianificati» per aggiunta o eliminazione. Nessun cambiamento al repository viene effettuato fino a quando non si esegue svn commit.
Directories aren't dumb containers anymore; they have
revision numbers like files. (Or more properly, it's
correct to talk about “directory
foo/
in revision 5”.)
Le directory non sono più degli sciocchi contenitori; hanno
dei numeri di revisione come i file. (O più propriamente, è corretto
parlare di «directory foo/
nella revisione
5».)
Let's talk more about that last point. Directory versioning is a hard problem; because we want to allow mixed-revision working copies, there are some limitations on how far we can abuse this model.
Parliamo maggiormente dell'ultimo punto. Il versionamento delle directory è un duro problema; dato che si vogliono permettere copie di lavoro con revisioni miste, ci sono alcune limitazioni su quanto si possa abusare di questo modello.
From a theoretical point of view, we define “revision
5 of directory foo
” to mean a
specific collection of directory-entries and properties. Now
suppose we start adding and removing files from
foo
, and then commit. It would be a lie
to say that we still have revision 5 of
foo
. However, if we bumped
foo
's revision number after the commit,
that would be a lie too; there may be other changes to
foo
we haven't yet received, because we
haven't updated yet.
Da un punto di vista teorico, si definisce «revisione
5 della directory foo
»
una collezione specifica di voci di directory e proprietà. Adesso
supponete di iniziare ad aggiungere e rimuovere file da
foo
, e poi fare il commit. Sarebbe sbagliato
dire che si ha ancora la revisione 5 di
foo
. Comunque, se si modificasse
il numero di revisione di foo
dopo il commit,
sarebbe uno sbaglio anche questo; ci possono essere altri cambiamenti a
foo
che ancora non sono stati ricevuti, perché non
sono stati ancora aggiornati.
Subversion deals with this problem by quietly tracking
committed adds and deletes in the .svn
area. When you eventually run svn update,
all accounts are settled with the repository, and the
directory's new revision number is set correctly.
Therefore, only after an update is it truly safe to
say that you have a “perfect” revision of a
directory. Most of the time, your working copy will
contain “imperfect” directory revisions.
Subversion affronta questo problema tenendo traccia silenziosamente
delle aggiunte e delle eliminazioni di cui è stato fatto il commit
nell'area .svn
.
Quando capita di eseguire svn update,
tutti gli account sono impostati con il repository, e il nuovo numero di
revisione della directory è impostato correttamente.
Di conseguenza, solo dopo un aggiornamento è corretto dire che
si ha una «perfetta» revisione di una
directory. La maggior parte del tempo, la propria copia di
lavoro conterrà revisioni «non perfette» della directory.
Similarly, a problem arises if you attempt to commit property changes on a directory. Normally, the commit would bump the working directory's local revision number. But again, that would be a lie, because there may be adds or deletes that the directory doesn't yet have, because no update has happened. Therefore, you are not allowed to commit property-changes on a directory unless the directory is up-to-date.
Similmente, un problema si presenta se si tenta di fare il commit dei cambiamenti di proprietà di una directory. Normalmente, il commit incrementerebbe il numero di revisione locale della directory di lavoro. Ma ancora, sarebbe sbagliato, perché ci possono essere aggiunte o eliminazioni che la directory ancora non ha, perché non c'è stato nessun aggiornamento. Di conseguenza, non è permesso fare il commit dei cambiamenti di proprietà su una directory a meno che la directory sia aggiornata.
For more discussion about the limitations of directory versioning, see sezione chiamata «Copie di lavoro con revisioni miste».
Per una maggiore discussione circa le limitazioni del versionamento delle directory, vedere sezione chiamata «Copie di lavoro con revisioni miste».