Riguarda il contesto: quanto spesso rilasci e cosa c'è in una versione.
Ecco un piccolo caso di studio che ho avuto con il mio vecchio lavoro, usando il metodo B (lo abbiamo chiamato ramo per scopo ).
Per mettere la storia nel contesto,
- Una versione consisteva in nuove funzionalità nel nostro software: nuove modalità di gioco, nuove funzionalità, nuove opzioni di configurazione.
- Il ciclo di rilascio è stato piuttosto lungo: i nostri clienti erano università che si sarebbero attenute a una serie di funzionalità per un anno.
Lo sviluppo principale è stato inserito nel trunk fino a quando non abbiamo raggiunto uno stato completo di funzionalità per una determinata versione. A quel punto, creeremmo un ramo, dire projectname-gennaio2012 e faremo i nostri test di qualità e correzioni di errori proprio in quel ramo. Una volta che eravamo pronti per una versione pubblica, avremmo taggato il codice in quel ramo e rilasciato.
Tuttavia, lo sviluppo del rilascio non è terminato con quel tag. Inevitabilmente, abbiamo avuto clienti che hanno riscontrato bug o piccoli problemi con il rilascio. Quindi, in quel caso, tutto ciò che dobbiamo fare è tornare a quel ramo, patchare il codice e creare una nuova versione taggata del ramo gennaio2012 da rilasciare e unire le correzioni al trunk.
Nel nostro caso, questo approccio è stato favorevole perché alcuni utenti hanno preferito rimanere con versioni precedenti con un set limitato di funzionalità, o semplicemente perché il costo della distribuzione sulla loro infrastruttura di una versione completamente nuova piuttosto che un aggiornamento rapido ha causato alcuni problemi.
Quindi le domande che devi porti sono:
- Con che frequenza rilascio?
- Le mie versioni saranno compatibili al 100% con le versioni precedenti?
- I miei clienti saranno d'accordo con l'aggiornamento completo per correggere i bug?
Se rilasci spesso, allora forse non vale la pena avere rami per ognuno di essi. Tuttavia, se il tuo ciclo di rilascio è abbastanza lungo come il mio vecchio caso d'uso, e quella distribuzione, la compatibilità con le versioni precedenti e i client che si aggrappano alle vecchie versioni potrebbero essere rischi, l'opzione B ti farà sicuramente risparmiare molto dolore, renderà le cose molto più facili da supportare i tuoi clienti al costo minimo per gestire il disordine delle filiali.