uso del ramo principale nei modelli di ramificazione di Git

3

Ho visto i modelli di ramificazione con un ramo di sviluppo e master (con le funzioni che vengono prima integrate per lo sviluppo), dove il ramo master era sempre interamente parte della storia di sviluppo e sarebbe stato inoltrato rapidamente dopo che la generazione è stata eseguita e tutte i test passano E ho visto altri casi in cui il ramo principale avrebbe contenuto commit effettivi da rami di sviluppo, rilascio o hotfix (quindi l'avanzamento veloce non sarebbe nemmeno più possibile). Credo che quest'ultimo sia il caso di gitflow.

Quali sono i vantaggi / gli svantaggi / i trade-off di ciascun approccio? Mi sembra che il primo approccio garantisca che tutto il codice che è andato in produzione sia anche nel ramo di sviluppo. Ma non è chiaro come siano risolti gli hotfix in quel momento.

    
posta herman 23.05.2017 - 12:27
fonte

1 risposta

2

In Gitflow Workflow , un hotfix è un ramo creato da master e alla fine viene riunito nel master AND in develop.

L'idea generale (e ben nota) dietro al "non commettere direttamente sul master", è avere in master uno stato del tuo codice che è completamente sicuro da distribuire in produzione.

Tuttavia, può servire altri mezzi. Per Github , il master funge anche da strumento di monitoraggio per sapere quando una funzionalità viene messa in produzione. Se esegui il commit su un altro ramo e fai avanzare rapidamente il master su di esso, perderai il commit di merge e, per estensione, inserirai un sacco di piccoli commit nella tua timeline principale, perdendo la possibilità di annullare un'intera funzione di semplicemente ripristina l'unione precedente.

Un altro problema con questo approccio è sapere QUANDO è possibile rilasciare / distribuire. Se tutti si impegnano sul master, dovrai sincronizzare tutto lo sviluppo per avere uno stato coerente del tuo codice. Per le versioni monolitiche con un ambito chiaro, può essere ok, ma nel mio caso, come sviluppatore di integrazione, le funzionalità vanno e vengono e non hai mai un singolo punto nel tempo in cui "tutte le funzioni sono state eseguite".

Tuttavia, non impegnarsi in master non significa avere un master di ramo e uno sviluppo. Come indicato nella presentazione di Github, se esegui un flusso di lavoro delle branch caratteristiche , può funzionare solo con un master, creando un ramo per ogni funzione e unendoli nuovamente in master (senza avanzamento rapido) alla fine.

A mio modesto parere, Git Flow (master / sviluppo + funzioni / hotfix / rami di rilascio) è più adatto in un contesto in cui non si sa veramente quando sarà necessario rilasciarlo (non per ogni funzione eseguita) e quando l'ultima versione è spesso quella dell'aggiornamento rapido. Un grafico gitflow può essere contorto, mentre un flusso di lavoro di ramificazione delle funzionalità è spesso più semplice da leggere. Il "rumore" è spesso dovuto al rilascio / hotfix di commit in quello che verrà eliminato dopo alcuni minuti.

Esempio per Gitflow

Esempio di grafico per Flusso di lavoro Feature Branching

    
risposta data 23.05.2017 - 13:45
fonte

Leggi altre domande sui tag