Ho un prodotto di app Web (PHP, MySQL) per il quale offro un servizio di bpoking. Cioè, è possibile acquistare il prodotto principale, che è piuttosto ampio, e quindi averlo personalizzato come preferisci. Ciò potrebbe includere nuove funzionalità, che regolano fondamentalmente il modo in cui funzionano le funzionalità esistenti, disattivando funzionalità, apportando modifiche che richiedono uno schema di database diverso, ecc.
Desidero trovare un modo ragionevole di gestire un gran numero di versioni diverse del prodotto nel controllo di versione in modo tale da apportare modifiche al core e apportare modifiche alle versioni in base alle esigenze, nonché apportare modifiche a un rilascio indipendentemente. A volte potrei desiderare di passare da una versione all'altra.
Il mio istinto era di usare Git e avere le uscite come rami. È possibile selezionare commit specifici per unire nuovamente il trunk, quindi penso che questo potrebbe funzionare.
Tuttavia, ovunque mi sia sembrato suggerisco che sia una cattiva idea avere un codice separato in modo permanente nelle filiali. Il suggerimento è di utilizzare una base di codice singola e avere tutte le differenze nelle funzionalità configurabili, in modo che ogni versione possa comportarsi separatamente. Questo suona bene per il software che è venduto in più edizioni, che hanno abilitate diverse funzionalità, ma penso che sarebbe un disastro completo per il mio software.
Sto cercando un buon flusso di lavoro di sviluppo per una configurazione come questa, che può o meno essere basata sul controllo della versione.