Partiamo innanzitutto con una nota sulla denominazione delle cartelle del nostro progetto. Se prevediamo che il nostro repository possa avere più rami, è bene inserire al primo livello del repository due sottocartelle separate, una che contiene il ramo principale e una che contiene gli altri rami.
Per convenzione, la cartella del ramo principale viene chiamata trunk e la cartella dedicata ai rami viene tipicamente chiamata branches. Si tratta solo di convenzioni, dunque possiamo sostituire i nomi a nostro piacimento, ma rispettare degli standard di nomenclatura usati in tutto il mondo non è una cattiva idea.
La struttura ideale per il nostro repository diventa dunque:
repos/guidasvn/trunk
che contiene la versione originale della mia guida;repos/guidasvn/branches/sistemisti
che contiene la versione per sistemisti;repos/guidasvn/branches/programmatori
che contiene la versione per programmatori)
Per creare un ramo separato, va usato il comando svn copy
:
svn copy URL1 URL2 -m "Messaggio"
che nel nostro caso si declina:
svn copy http://svn.vd-devel/repos/guidasvn/trunk http://svn.vd-devel/repos/guidasvn/branches/sistemisti -m "Creazione ramo separato sistemisti"
Va a questo punto chiarito un concetto importante. Per Subversion non esiste realmente il concetto di rami separati: se creiamo una copia di una cartella, per lui è semplicemente questo: la copia di una cartella. Siamo noi che, potendo fare checkout
, update
e commit
di singole cartelle del repository, lo consideriamo un ramo separato e lavoriamo solo su quello.
Ecco perchè è importante separare le cartelle e dargli una nomenclatura esplicativa: perchè ci serve per assegnare il concetto di "ramo" a quelle che per Subversion sono semplicemente cartelle diverse di uno stesso progetto, che – come tutti gli elementi copiati – condividono lo storico fino al momento della copia.
Trattandosi sempre di uno stesso repository, inoltre, la numerazione delle revisioni rimane comune tra i rami: ad esempio se effettuiamo un commit
sul ramo principale e generiamo la revisione 10
, il commit successivo sul ramo secondario produrrà la revisione 11
.
Spostare un repository già creato
Se abbiamo già messo del contenuto nel repository e vogliamo spostarlo per creare la struttura adeguata ad ospitare rami separati, possiamo utilizzare il comando svn move
:
svn move URL1 URL2
Con TortoiseSVN, possiamo avviare il Repository Browser e utilizzare l'opzione Create folder
per creare la struttura che ci interessa, e poi trascinare direttamente con il mouse i file già esistenti nella nuova locazione.
Questa operazione non richiede particolare attenzione per essere effettuata, ma è fondamentale che tutti gli utenti ne siano informati. La copia di lavoro locale infatti non può sapere di questo spostamento (che tramite il Repository Browser viene effettuato direttamente sul server) e quindi va aggiornata utilizzando il comando relocate
che ci permette di specificare il nuovo URL. In alternativa, si può semplicemente eliminare e ricreare la copia di lavoro.