In senso generale, per progetti a lungo termine che possono avere più rilasci durante il ciclo di vita dei prodotti e richiedono il supporto di prodotti precedenti, qual è il modo migliore per gestire le versioni dei prodotti e la ramificazione del codice di base?
In un senso più specifico, supponiamo che sia presente un controllo di versione distribuito (cioè git) e che i team siano di dimensioni da piccole a grandi e che lo sviluppatore possa lavorare su più progetti contemporaneamente. Il problema principale che viene affrontato è che esiste un obbligo contrattuale di supportare le vecchie versioni così come esistevano al momento, il che significa che il nuovo sviluppo non può applicare patch al vecchio codice (i prodotti Microsoft Office potrebbero essere un esempio di questo, si ottengono solo patch per l'anno in cui sei proprietario)
Di conseguenza l'attuale versione del prodotto è un po 'complicata in quanto ogni prodotto principale ha più dipendenze, ognuna con le proprie versioni che possono cambiare tra le versioni annuali. Allo stesso modo, mentre ogni prodotto ha il proprio repository, la maggior parte del lavoro non viene eseguita sul trunk principale ma piuttosto su un ramo per gli anni in cui viene rilasciata una nuova filiale quando il prodotto viene rilasciato in modo che possa essere supportato. Ciò a sua volta significa che ottenere la base di codice di un prodotto non è una questione semplice come si potrebbe pensare quando si utilizza il controllo di versione.