Ik werk in een klein "team" (3 mensen waarvan 2 hoofdzakelijk programmeren) aan een applicatie. De applicatie is al een tijdje uitgebracht maar we brengen zo vaak mogelijk nieuwe updates uit met nieuwe features / bug fixes.
De laatste tijd wordt development ingewikkeld genoeg dat we vaak tegen problemen aanlopen die niet voorzien waren, bijvoorbeeld een nieuwe feature die toch niet helemaal werkt als gepland, of een bug fix die neven effecten heeft waardoor andere dingen ineens niet meer werken.
We willen graag overstappen op een systeem met meerdere release channels, namelijk "stable", "beta" en "alpha", zodat gebruikers kunnen kiezen of ze een stabiele versie met weinig updates willen (stable), of juist meteen de nieuwste updates met een kans dat het niet goed werkt (alpha).
Dit is inmiddels alleen werkend, maar we lopen nu tegen problemen in onze source control (git). Hoe verwerken we development in drie release channels tegelijk?
Momenteel is onze setup redelijk standaard:
- "master" branch: gelijk aan de huidige release versie. Wordt nooit direct in gewerkt, altijd alleen complete releases.
- "dev" branch: bevat alle veranderingen voor de komende geplande update. Meestal aangepast door merges met feature branches, maar soms ook direct voor kleinere features of bug fixes.
- "xyz" feature branches: grotere nieuwe features of bug fixes die niet in een keer in de dev branch gecommit kunnen worden gaan in een aparte branch tot ze klaar zijn en terug naar dev gemerged worden.
Dit gaat niet meer werken als we meerdere channels willen ondersteunen. Stel dat ik aan een nieuwe feature heb gewerkt en deze in de alpha channel wil releasen. Dan moet ik de dev branch dus aanpassen en releasen. Als iemand daarna een kleine bug fix in de stable branch wil doen, dan kan dat niet zonder dat mijn alpha feature mee komt.
Nu is het eerste idee natuurlijk om voor master en dev branches 3 copies te hebben; master_stable, master_beta, master_alpha, en dev_stable, dev_beta, dev_alpha.
Als ik nu een nieuwe feature in alpha wil releasen kan dat los van eventuele veranderingen aan stable.
Nu loop ik echter tegen mogelijke problemen. Stel het volgende scenario:
- Momenteel is versie "1.0" released.
- Ik begin aan een nieuwe feature. Ik maak een branch vanuit stable en noem deze "feature/x".
- Ondertussen begint iemand anders aan een bug fix in de dev_stable branch.
- De bug fix was klein en werkt goed, dus een nieuwe release "stable 1.1".
- Mijn feature x lijkt te werken maar ik wil hem als alpha releasen omdat er nog niet veel getest is.
- Ik merge "feature/x" naar "dev_alpha". Merge dev_alpha naar master_alpha.
- Ik release versie 1.2 (want 1.1 was al uit) als alpha.
Versie 1.2 (alpha) heeft nu niet de bug fix die versie 1.1 (stable) wel had.
De enige oplossing die ik kan bedenken is dat ik voor mijn alpha release altijd de dev_alpha branch update met de dev_stable branch (stable naar alpha mergen). Hetzelfde voor beta channel. Dan heb ik in ieder geval alle updates.
Maar dit geeft weer problemen:
1. Misschien is er nog iemand bezig in dev_stable en is deze nog niet klaar voor release?
2. Misschien bijten de veranderingen in dev_stable met mijn update in dev_alpha. Als de alpha release straks dus getest is, moet hij eigenlijk opnieuw getest worden met de veranderingen van de stable channel die er nu nog niet in zaten. Zo kan ik wel bezig blijven en kunnen we dus nooit een stable release uitbrengen.
Hier moet toch wel een systeem voor zijn wat standaard is? Ik heb te weinig ervaring met git en relatief grotere projecten en ik zie geen oplossing
Hoe zorg ik er voor dat we altijd een release kunnen maken in elke channel, zonder dat we tegen problemen lopen zoals releases die vorige updates weer ongedaan maken, of features die niet samen getest zijn, of...
De laatste tijd wordt development ingewikkeld genoeg dat we vaak tegen problemen aanlopen die niet voorzien waren, bijvoorbeeld een nieuwe feature die toch niet helemaal werkt als gepland, of een bug fix die neven effecten heeft waardoor andere dingen ineens niet meer werken.
We willen graag overstappen op een systeem met meerdere release channels, namelijk "stable", "beta" en "alpha", zodat gebruikers kunnen kiezen of ze een stabiele versie met weinig updates willen (stable), of juist meteen de nieuwste updates met een kans dat het niet goed werkt (alpha).
Dit is inmiddels alleen werkend, maar we lopen nu tegen problemen in onze source control (git). Hoe verwerken we development in drie release channels tegelijk?
Momenteel is onze setup redelijk standaard:
- "master" branch: gelijk aan de huidige release versie. Wordt nooit direct in gewerkt, altijd alleen complete releases.
- "dev" branch: bevat alle veranderingen voor de komende geplande update. Meestal aangepast door merges met feature branches, maar soms ook direct voor kleinere features of bug fixes.
- "xyz" feature branches: grotere nieuwe features of bug fixes die niet in een keer in de dev branch gecommit kunnen worden gaan in een aparte branch tot ze klaar zijn en terug naar dev gemerged worden.
Dit gaat niet meer werken als we meerdere channels willen ondersteunen. Stel dat ik aan een nieuwe feature heb gewerkt en deze in de alpha channel wil releasen. Dan moet ik de dev branch dus aanpassen en releasen. Als iemand daarna een kleine bug fix in de stable branch wil doen, dan kan dat niet zonder dat mijn alpha feature mee komt.
Nu is het eerste idee natuurlijk om voor master en dev branches 3 copies te hebben; master_stable, master_beta, master_alpha, en dev_stable, dev_beta, dev_alpha.
Als ik nu een nieuwe feature in alpha wil releasen kan dat los van eventuele veranderingen aan stable.
Nu loop ik echter tegen mogelijke problemen. Stel het volgende scenario:
- Momenteel is versie "1.0" released.
- Ik begin aan een nieuwe feature. Ik maak een branch vanuit stable en noem deze "feature/x".
- Ondertussen begint iemand anders aan een bug fix in de dev_stable branch.
- De bug fix was klein en werkt goed, dus een nieuwe release "stable 1.1".
- Mijn feature x lijkt te werken maar ik wil hem als alpha releasen omdat er nog niet veel getest is.
- Ik merge "feature/x" naar "dev_alpha". Merge dev_alpha naar master_alpha.
- Ik release versie 1.2 (want 1.1 was al uit) als alpha.
Versie 1.2 (alpha) heeft nu niet de bug fix die versie 1.1 (stable) wel had.
De enige oplossing die ik kan bedenken is dat ik voor mijn alpha release altijd de dev_alpha branch update met de dev_stable branch (stable naar alpha mergen). Hetzelfde voor beta channel. Dan heb ik in ieder geval alle updates.
Maar dit geeft weer problemen:
1. Misschien is er nog iemand bezig in dev_stable en is deze nog niet klaar voor release?
2. Misschien bijten de veranderingen in dev_stable met mijn update in dev_alpha. Als de alpha release straks dus getest is, moet hij eigenlijk opnieuw getest worden met de veranderingen van de stable channel die er nu nog niet in zaten. Zo kan ik wel bezig blijven en kunnen we dus nooit een stable release uitbrengen.
Hier moet toch wel een systeem voor zijn wat standaard is? Ik heb te weinig ervaring met git en relatief grotere projecten en ik zie geen oplossing

Hoe zorg ik er voor dat we altijd een release kunnen maken in elke channel, zonder dat we tegen problemen lopen zoals releases die vorige updates weer ongedaan maken, of features die niet samen getest zijn, of...