Un repository appena creato è inizialmente vuoto, e si trova alla revisione 0
. Ogni volta che sul server viene caricata anche una sola modifica, l'intero albero aumenta di una revisione. Ad esempio, come abbiamo visto, l'importazione di un progetto ha portato il repository alla revisione 1
, e allo stesso modo, ogni volta che abbiamo eseguito un commit
la revisione è aumentate di uno.
È importante capire che la revisione si applica a tutto l'albero: si tratta di una istantanea del contenuto dei file ma anche del loro nome, della loro posizione, e delle cartelle esistenti. Ogni volta che viene caricata una qualsiasi modifica, a uno qualsiasi dei file, viene effettuata una nuova instantanea e tutti i file (anche quelli non modificati) vengono portati alla nuova revisione.
Non c'è da stupirsi quindi se alcuni file rimangono uguali tra le diverse revisioni: evidentemente non erano oggetto di modifica, ma sono stati comunque portati alla nuova revisione.
Estrazione di una revisione specifica
Nei diversi comandi di estrazione dei dati ci si può riferire ad una specifica revisione, grazie al parametro -r
:
-r <numero_revisione>
In particolare, è possibile creare o aggiornare una copia locale partendo non dall'ultima, ma da una specifica revisione, con i comandi:
svn checkout -r <numero_revisione> svn update -r <numero_revisione>
In TortoiseSVN, è possibile specificare il numero di revisione come parametro nella finestra di dialogo per il CheckOut
, ed esiste una specifica opzione Update To Revision
per
aggiornare a una specifica revisione.
Esistono anche della parole chiave per indicare revisioni "speciali":
- HEAD, indica l'ultima revisione presente nel repository. È la revisione implicitamente utilizzata quando non ne viene specificata una
- BASE, indica la revisione "originale" presente sulla propria copia di lavoro. Non si riferisce al server, ma solo alla copia locale; non include eventuali modifiche locali effettuate nel frattempo
- COMMITTED, indica l'ultima revisione uguale o precedente a
BASE
, nella quale un oggetto è stato modificato. Si riferisce quindi sempre alla copia di lavoro locale: permette sostanzialmente di identificare la revisione creata con l'ultimocommit
andato a buon fine - PREV, indica la revisione immediatamente precedente a
COMMITTED
È possibile anche specificare una data per riferirsi a una versione, usando parentesi graffe. Alcuni esempi sono:
--revision {"2008-07-11 19:00"} --revision {2008-07-11} --revision {19:00}
Automaticamente, SVN troverà la versione più aggiornata entro quella data.
Nota: se si specifica una data senza specificare l'ora (es. --revision {2008-07-11}
) SVN considera come orario 00:00
e quindi, di fatto, considera le revisioni registrate fino al giorno prima (nell'esempio, fino al 10 lug alle 23:59).
Per esaminare temporaneamente una diversa revisione, dobbiamo ricordare di effettuare checkout
in una cartella diversa rispetto a quella che ospita la nostra copia di lavoro corrente. Creiamo quindi una copia di lavoro temporanea che, una volta esaminata, possiamo tranquillamente cancellare.