Uno dei due motivi principali – e probabilmente il più frequente – per creare rami separati è quello di avere un ambiente di sviluppo isolato temporaneo per realizzare una serie di importanti modifiche, come l'aggiunta di nuove funzionalità, che andranno poi unite al ramo principale.
Supponiamo di aver fatto le cose per bene, e esserci tenuti frequentemente sincronizzati con il ramo principale per avere a disposizione le modifiche fatte da altri. Quello che ci rimane da fare ora è l'opposto: riportare le nostre modifiche.
Il primo consiglio è quello di chiedere a tutti i collaboratori di sospendere temporaneamente i commit
sul repository. Infatti, le prime volte che fonderemo diversi rami potremmo metterci un po', e per essere certi di fare tutto bene, è meglio evitare sovrapposizioni con altre modifiche su uno qualsiasi dei due rami.
In ogni caso non rischiamo mai di perdere del lavoro. A Subversion non sfugge nulla. Tuttavia, se qualcuno carica una modifica durante il processo di fusione, e non ne siamo al corrente, potremmo trovare qualcosa che non torna e pensare di avere sbagliato qualcosa. Con l'aquisizione di maggior confidenza con Subversione con la gestione dei branch, fare molte cose contemporaneamente non sarà più un problema.
La procedura consigliata è la seguente.
Innanzitutto assicuriamoci di fare un'ultima sincronizzazione dal ramo principale verso il secondario, come spiegato nella lezione precedente. Riepiloghiamo i passaggi:
commit
della copia di lavoro verso il ramo secondario,merge
del ramo principale sulla copia di lavoro,- risoluzione di conflitti e altre anomalie,
commit
della copia di lavoro verso il ramo secondario.
A questo punto scarichiamo altrove una nuova copia di lavoro del ramo principale. Non è obbligatorio crearla da zero con un checkout
; se abbiamo a disposizione una copia di lavoro del ramo principale, è sufficiente aggiornarla con un update
. Facciamo attenzione però a non mischiare la copia di lavoro del ramo secondario con quella del ramo principale.
A questa copia di lavoro (quella del ramo principale) applichiamo ora le modifiche effettuate al ramo secondario, sempre con il comando merge
:
svn merge --reintegrate URL_ramo_secondario
Una volta risolti eventuali conflitti, avremo una copia di lavoro che include l'unione di entrambi i rami. A questo punto, è sufficiente effettuare un commit
di questa copia di lavoro per avere sul ramo principale il risultato della fusione dei due rami. Di fatto, stiamo facendo in modo che i rami siano di nuovo uguali; ma con la la storia di tutte le modifiche salvata nelle varie revisioni e quindi facilmente recuperabile.
Dopo un reintegrate
, il ramo secondario è "secco". Non può più tenere traccia correttamente delle modifiche, per cui non ci si può lavorare. Dovete cancellarlo. Fortunatamente per Subversion il "ramo" altro non è che una cartella del progetto. Per cui:
- è possibile cancellarlo semplicemente rimuovendo la cartella corrispondente. Andiamo sul server ed eseguiamo il comando
svn delete URL_ramo_secondario
, oppure usiamo il Repository Browser; - lo storico rimane comunque, per cui possiamo sempre tornare a una certa revisione del vostro ramo secondario semplicemente recuperando la cartella associata da una delle revisioni in cui tale cartella ancora esisteva.