Ora stiamo passando da svn a git (dopo un anno passato a convincere le persone, yay!) nella mia azienda.
Finora, questo è tutto per il meglio, ma c'è una piccola cosa che abbiamo attualmente nel nostro flusso di lavoro che non riesco a trovare un buon equivalente.
Attualmente, tutti i nostri sviluppatori lavorano nel master. Una volta ogni trimestre, si dirama il master nel ramo X.x, che in seguito diventerà la nostra ultima versione. Ciò significa che il nostro repository SVN si presenta così:
- tronco
- rami
- 3.8
- 4.1
- 4.2
- ...
In realtà non usiamo i tag.
Di tanto in tanto, è stata rilevata una correzione rapida dei problemi.
Il modo attuale per farlo è:
- Risolvilo nel master
- SVN unisci l'intervallo di commit pertinente ai rami pertinenti (forse la nostra ultima versione, forse di più).
Siamo nel settore spaziale, quindi le nostre filiali sono longeve e il processo di aggiornamento dei clienti è piuttosto lungo, motivo per cui fino ad ora abbiamo lavorato così.
Ora, come sarebbe un buon equivalente in git?
Finora, ho cercato di correggere il bug in un ramo generato dal master, e quindi unire questo ramo nuovamente in master e in 4.3 (ad esempio). Il risultato è che il ramo dell'aggiornamento rapido contiene la cronologia principale e tutti i commit tra master e 4.3 vengono uniti, cosa che non vogliamo.
Cose a cui potrei pensare finora:
- Ho esaminato il riuscito metodo Git Workflow e la loro soluzione è quella di correggere il bug nel ramo di rilascio e unirlo indietro invece del contrario. Questo potrebbe funzionare nel nostro caso, ma sarebbe piuttosto ingombrante perché ci richiederebbe di conoscere già il ramo più vecchio in cui vogliamo correggere il bug prima di correggere effettivamente il bug.
- Un'altra soluzione è quella di correggere in master, quindi selezionare cherry commit the commit (come facciamo oggi per svn merge). La cosa fastidiosa qui è che in questo caso perdiamo la storia di ciò che è stato fuso là dove, dal momento che i picchi di ciliegie sembrano nuovi commit e perdiamo la relazione.
Quindi qual è il modo "buono" per farlo? Dovremmo correggere i commit nella cronologia o selezionare in modo manuale e tenere traccia manualmente di ciò che è stato unito o anche di qualcos'altro?
Se hai poca esperienza di produzione con git, quindi sono sicuro che mi sia sfuggito qualcosa.