Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Unire i cambiamenti

Operazioni di base per tenere sincronizzati diversi rami
Operazioni di base per tenere sincronizzati diversi rami
Link copiato negli appunti

Ci sono diversi momenti in cui risulta necessario unire i cambiamenti tra diversi rami. Come abbiamo già detto, è bene mantenerli sincronizzati di tanto in tanto, per evitare di far crescere a dismisura il numero di conflitti. Inoltre, se si tratta dell'implementazione di nuove caratteristiche, prima o poi dovranno essere fuse con il ramo principale.

Il trasporto delle modifiche tra rami viene effettuato con il comando svn merge.

Nota: dalla versione 1.5 di SubVersion la gestione del trasporto delle modifiche tra i rami è stata notevolmente migliorata, e sulla guida ufficiale si raccomanda caldamente di aggiornare a questa versione: altrimenti tali operazioni di sincronizzazione diventano decisamente più complicate.

Merge basilare

La situazione più frequente è quella in cui l'utente che sta lavorando sul ramo secondario vuole trasportare sulla propria copia di lavoro le modifiche effettuare sul ramo principale, per affrontare e risolvere per tempo non solo i conflitti – cioè le vere e proprie sovrapposizioni di modifiche – ma anche altri
cambiamenti che potrebbero richiedere adattamenti del proprio codice.

Il comando:

svn merge http://svn.vd-devel/guidasvn/trunk

esegue esattamente questo: verifica che l'URL che stiamo chiedendo NON sia quello da cui abbiamo fatto il checkout ma ne è una copia; risale quindi all'ultima revisione in comune tra le due copie; rileva i cambiamenti effettuati a partire da quella revisione e li applica alla nostra copia locale, segnalandoci eventuali conflitti.

Il comando merge è piuttosto potente. Tutto quello che dobbiamo fare noi è assicurarci, prima di eseguirlo, che tutti i cambiamenti locali sulla nostra copia di lavoro siano stati caricati con un commit sul ramo corrispondente (cioè il ramo secondario) e dopo l'esecuzione, esaminare con calma le modifiche apportate (col comando svn diff).

Attenzione, però: per adesso l'unione delle modifiche è limitato alla copia di lavoro locale: quando avremo risolto i conflitti e verificate tutte le modifiche, dovremo effettuare il commit dei cambiamenti per sincronizzare definitivamente i due rami.

Merge successivi

L'operazione di sincronizzazione sopra descritta non avviene una volta sola: se il lavoro sul ramo secondario dura molto, sarà utile ripeterla frequentemente. Prima della versione 1.5, era necessario ricordarsi (magari
spulciando i log) la revisione fino alla quale ci si era già sincronizzati, e specificarla come parametro per indicare al comando merge da quale revisione cominciare a reperire i cambiamenti.

Nelle ultime versioni di SubVersion invece le informazioni di merge vengono salvate come proprietà dei rami, in particolare, viene mantenuta l'ultima revisione a cui ci si è sincronizzati.

Ricordiamo che per Subversion i rami sono normali cartelle, quindi possono avere associate delle proprietà (dette anche metadati). Il comando merge sfrutta questa possibilità per salvare una proprietà mergeinfo che verrà esaminata nei successivi merge, per evitare di riportare più volte gli stessi cambiamenti.

Quindi invocando in seguito lo stesso comando usato per la prima sincronizzazione verranno uniti solo i cambiamenti successivi.

Ti consigliamo anche