Ogólnie, w przypadku projektów długoterminowych, które mogą mieć wiele wydań w trakcie cyklu życia produktów i wymagają wsparcia poprzednich produktów, jaki jest najlepszy sposób obsługi wersji produktu i rozgałęzienia bazy kodu?
W bardziej szczegółowym sensie, załóżmy, że istnieje właściwa rozproszona kontrola wersji (tj. Git) oraz że zespoły są małe do dużych i że programista może pracować nad wieloma projektami jednocześnie. Głównym problemem, który się napotyka, jest umowny obowiązek obsługi starych wersji, ponieważ istniały one w tym czasie, co oznacza, że nowy program nie może łatać starego kodu (produkty pakietu Microsoft Office mogą być tego przykładem, otrzymujesz tylko łatki dla rok funkcji, który posiadasz).
W rezultacie obecna wersja produktu jest skomplikowana, ponieważ każdy główny produkt ma wiele zależności, każda z własną wersją, która może się zmieniać między wydaniami rocznymi. Podobnie, chociaż każdy produkt ma swoje własne repozytorium, większość pracy nie jest wykonywana na głównym pniu źródłowym, ale raczej na gałęzi w tym roku wydanie produktu z nową gałęzią powstaje, gdy produkt jest wypuszczany, aby mógł być obsługiwany. To z kolei oznacza, że uzyskanie bazy kodu produktu nie jest prostą sprawą, jak można by pomyśleć, korzystając z kontroli wersji.