Una cosa chiave che Git-Flow doveva affrontare era la capacità di ragionare sul ruolo di un determinato ramo, e su ciò da cui si dirama e si fonde.
Idealmente, tutti i rami si ricollegano al codice da cui sono stati uniti. Questo è in genere un'unione dalla linea principale (in git-flow questo è dev
). I rami delle funzioni si ramificano e si uniscono dallo sviluppatore, rilasciano i rami dei rami e si fondono dallo sviluppatore (con un'ulteriore unione a master
). Le correzioni rapide si ramificano e si uniscono dal master (con quell'ulteriore unione in dev).
Ogni codeline si dirama e si fonde nuovamente con il suo genitore. Una codeline può estrarre il codice da altre codeline in qualsiasi momento se è necessario.
Se il ramo di un ramo di funzionalità è un "Voglio esplorare questo modo di risolvere un problema in quel ramo di funzionalità" - perfettamente bene. Si dirama dal ramo della funzione, esegue il commit di un po 'di codice e si unisce nuovamente al ramo della funzione (o viene scartato).
- ramo dalla funzione
- esplora l'idea
- unisci alla funzione
Quello che vuoi evitare, tuttavia, è qualcosa che assomiglia a:
- ramo dalla funzione richiesta
- lavorare sul codice
- unisci da dev una volta completata la funzionalità richiesta
- verificare la funzionalità (e ulteriori commit) nel ramo delle funzionalità
- unisci a dev
Il motivo è che l'inizio e la fine non coincidono - rende un po 'più difficile capire cosa sia ed era. Non impossibile, ma ci vuole solo un po 'più di tempo perché qualcuno capisca il suo ruolo.
Tuttavia, se questa è una nuova funzionalità che dipende dal codice che non è stato ancora trovato in dev, il flusso dovrebbe essere:
- ramo da dev
- unisci dalla funzione richiesta
- lavorare sul codice
- unisci da dev una volta completata la funzionalità richiesta
- verificare la funzionalità (e ulteriori commit) nel ramo delle funzionalità
- unisci a dev
Si noti che questo inizia con un ramo da dev e termina con un'unione a dev.
Detto questo, probabilmente la cosa migliore da fare è evitare di unire una funzionalità all'altra. Diramazione della funzione, fare qualsiasi preliminare necessario ... e attendere.
- ramo da dev
- lavorare sul codice
- unisci da dev una volta completata la funzionalità richiesta
- verificare la funzionalità (e ulteriori commit) nel ramo delle funzionalità
- unisci a dev
Ciò fornisce l'insieme più stabile di rami e codice.
Qualcosa da considerare per il lavoro futuro sarebbe avere una funzione per pubblicare le interfacce necessarie per l'interoperabilità con altre funzionalità, anche se il codice di implementazione non è completo. Questo sarebbe unito a dev, e quindi la funzionalità richiesta potrebbe funzionare al di fuori di quelle interfacce come potrebbe la funzionalità futura. Ciò probabilmente consentirebbe alle funzionalità future di progredire ulteriormente (codifica rispetto alle interfacce, test su stub che implementano le interfacce) rispetto a quanto farebbe se dovesse attendere che la funzionalità richiesta si unisca allo sviluppo.