Sto provando a scegliere un flusso di lavoro Git più appropriato per il nostro prodotto. Ecco i parametri:
- Facciamo un paio di pubblicazioni importanti all'anno, diciamo 10 al massimo
- Abbiamo più versioni del nostro prodotto attive contemporaneamente (alcune persone sono su v10.1, altre su v11.2, ecc.)
- Dobbiamo essere in grado di lavorare su più versioni contemporaneamente (quindi potremmo lavorare sulla versione 12.1, ma mentre arriviamo alla fine del rilascio iniziamo a lavorare sulla v12.2 contemporaneamente)
- Dobbiamo essere in grado di rilasciare aggiornamenti rapidi quando vengono rilevati errori critici
Finora, ecco il modo in cui penso possa funzionare:
- È utilizzato un unico repository remoto
- Crea il ramo 12.1 dal master
- Crea feature branch basate su 12.1, esegui il commit e unisci di nuovo in 12.1, premi
- Una volta che abbiamo bisogno di iniziare a lavorare sulla versione futura, crea un nuovo ramo 12.2 basato su 12.1
- Da quel momento in poi, quando lavori su una funzionalità per 12.1, crea una diramazione da 12.1, commuta le modifiche e unisci in entrambe le versioni 12.1 e 12.2, premi
- Se stai lavorando su una funzione per 12.2, crea una diramazione dalla 12.2, commuta le modifiche e unisci solo nella 12.2, premi
- Una volta completata la versione 12.1, unirla in master e tag ramo master con 12.1
- Se è necessario un aggiornamento rapido, creare un ramo di aggiornamento rapido dal ramo di rilascio più vecchio che lo richiede, eseguire il commit delle modifiche e unire nuovamente tutti i rami di rilascio per quella release e le versioni future che potrebbero essere interessate; se l'ultimo ramo di rilascio stabile è stato interessato, uniscilo in master.
Ho qualche dubbio:
- Non sono sicuro che unire gli hotfix delle vecchie filiali in nuove filiali sarà un processo semplice, specialmente se ci sono state molte modifiche sovrapposte; Sarebbe più intelligente eseguire l'aggiornamento rapido manualmente in ogni ramo nei casi in cui sembra che ci saranno conflitti
- I modelli di flusso di lavoro che ho visto sembrano non tenere molto vivo il ramo di rilascio, una volta che il rilascio viene fuso in master, taggato e rimosso. Il mio problema è che non ho una buona idea di come gestire lo stato del rilascio se tutto quello che ho sono tag in master, sembra più facile l'aggiornamento rapido in un ramo e quindi ho un rilascio che posso sempre tornare a che ha l'ultimo aggiornamento rapido (posso anche taggare gli hotfix nella versione). Non sono sicuro che ci sia un modo per tornare indietro nel master e in qualche modo avere una copia della versione con gli hotfix applicati e aggiornare quel tag.
I commenti sono apprezzati su cose che potrei aver trascurato o modi migliori per realizzare le cose, dati i requisiti che ho specificato.