Ho riflettuto molto sulle best practice riguardanti la ramificazione nei sistemi di controllo delle versioni distribuite come git an mercurial (i due dvcs di cui ho esperienza e utilizzo quotidianamente).
Il modo in cui lo sto facendo è leggermente diverso in ciascuno di questi, ma generalmente segue queste linee guida:
- ramo principale - in concomitanza con il codice di produzione
- ramo di sviluppo - in concomitanza con il codice "beta"
- feature branches - per lo sviluppo delle funzionalità
Lo sviluppo avviene in un ramo di funzionalità (di solito creato al di fuori del ramo principale, quindi sappiamo che stiamo lavorando con una base di codice stabile), e quando dev è completato, revisionato e testato dagli sviluppatori, viene spinto / unito nel ramo di sviluppo / beta, messo su un server beta e testato.
Se tutto va bene, la funzione è approvata e possiamo fonderla nel ramo principale / stabile, metterla in scena, eseguire il test finale e portarla in produzione.
Se non va bene, però, le cose si guastano. Se, per esempio, una funzione viene scartata o semplicemente ritardata a tempo indeterminato, probabilmente vorremmo rimuoverla dal ramo dev / beta. Tuttavia, poiché le fusioni da master / stable (hotfix, modifiche del contenuto, ecc.) E altre nuove funzionalità sono state probabilmente inserite nel ramo dev, diventa difficile rimuovere una singola funzione da quel ramo.
Sto arrivando alla conclusione che questo flusso di lavoro è solo rotto, ma sembra che dovrebbe funzionare. Quindi, in particolare:
- È possibile rimuovere una particolare caratteristica da questo tipo di ramo?
- È solo un flusso di lavoro interrotto?
E più in generale:
- Dato lo sviluppo a lungo termine delle funzionalità e la necessità di avere un ramo concorrente con live, quali sono le migliori pratiche coinvolte in dvcs?