Una cosa fondamentale a cui Git-Flow doveva rispondere era la capacità di ragionare sul ruolo di un determinato ramo, e su ciò da cui si dirama e si fonde con esso.
Idealmente, tutti i rami si uniscono alla codeline dalla quale sono stati fusi. Questa è tipicamente un'unione dalla linea principale (in git-flow questo è dev
). Branche delle feature diramano e fondono da dev, rilasciano branch branch e si uniscono da dev (con un'ulteriore unione a master
). Le correzioni rapide si diramano e si uniscono dal master (con quella unione aggiuntiva a dev).
Ogni codeline si dirama da e si ricongiunge al suo genitore. Una codeline può inserire 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 a posto. Si dirama dal ramo della funzione, esegue il commit di un codice e si collega al ramo della funzione (o viene scartato).
- branch from feature
- esplora l'idea
- Unisci a funzionalità
Quello che vuoi evitare è qualcosa che assomiglia a:
- derivazione dalla funzione richiesta
- lavora sul codice
- unisci da dev una volta richiesto-la funzione è completa
- verifica la funzionalità (e ulteriori commit) nel ramo di funzione
- unisci a dev
Il motivo è che l'inizio e la fine non coincidono - rende un po 'più difficile capire cosa sia e cosa sia. Non impossibile, ma semplicemente lo rende
prendi un po 'più di tempo per far capire a qualcuno il suo ruolo.
Tuttavia, se questa è una nuova funzionalità che dipende dal codice che non è ancora stato trovato in dev, il flusso dovrebbe essere:
- branch from dev
- Unisci dalla funzione richiesta
- lavora sul codice
- unisci da dev una volta richiesto-la funzione è completa
- verifica la funzionalità (e ulteriori commit) nel ramo di funzione
- unisci a dev
Si noti che questo inizia con un ramo da dev e termina con un'unione su dev.
Tutto ciò che è stato detto, probabilmente la cosa migliore da fare è evitare di fare un'unione da una funzione a un'altra. Separa la funzione, fai i preliminari necessari ... e aspetta.
- branch from dev
- lavora sul codice
- unisci da dev una volta richiesto-la funzione è completa
- verifica la funzionalità (e ulteriori commit) nel ramo di funzione
- unisci a dev
Questo fornisce il set più stabile di rami e codice.
Qualcosa da considerare per il lavoro futuro sarebbe avere una funzionalità 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 funzione richiesta potrebbe funzionare su quelle interfacce come potrebbe la funzione futura. Questo probabilmente consentirebbe alle funzionalità future di progredire ulteriormente (codificare contro le interfacce, testare gli stubbs che implementano le interfacce) di quanto sarebbe se dovesse aspettare che la funzione richiesta si unisca a dev.