2013-08-12 5 views

risposta

95

Come discusso nel GitMinutes episodio 17, da Nicholas Zakas nel suo articolo su "GitHub workflows inside of a company":

Git-flow è un processo per la gestione dei cambiamenti di Git che è stato creato da Vincent Driessen e accompagnato da alcuni Git extensions per la gestione che flusso.
L'idea generale dietro git-flow è di avere diversi rami separati che esistono sempre, ciascuno per uno scopo diverso: master, develop, feature, release e hotfix.
Il processo di sviluppo di funzionalità o bug passa da un ramo all'altro prima che venga finalmente rilasciato.

Alcuni degli intervistati hanno indicato che usano git-flow in generale.
Alcuni hanno iniziato con git-flow e si sono allontanati da esso.

La ragione principale per lo spostamento è che il processo git-flow è difficile da gestire in un modello di distribuzione continuo (o quasi continuo).
L'impressione generale è che git-flow funzioni bene per i prodotti in un modello di rilascio più tradizionale, in cui le pubblicazioni vengono eseguite una volta ogni poche settimane, ma questo processo si interrompe considerevolmente quando si rilascia una volta al giorno o più.

In breve:

Inizia con un modello più semplice possibile (come il flusso di GitHub tende ad essere), e muoversi verso un modello più complesso se è necessario.


Si può vedere un esempio interessante di una semplice workflow , sulla base di GitHub-Flow a:
"A simple git branching model", con gli elementi principali sono:

  1. master deve sempre essere schierabili.
  2. tutte le modifiche apportate tramite diramazioni (richiesta pull + unione)
  3. rebase per evitare/risolvere i conflitti; si fondono per master

https://a248.e.akamai.net/camo.github.com/9783623eba280ba5ace8b9e63842be52af2f0546/687474703a2f2f7374617469632e62656e65742e61692f736b697463682f666c6f772d32303133303932362d3139333431392e706e67

25

Sto usando il modello git-flusso per oltre un anno e il suo ok.

Ma in realtà dipende da come verrà sviluppata e implementata la tua applicazione.

Funziona bene quando si dispone di un'applicazione con un flusso di sviluppo/distribuzione lento.

Ma ad esempio, come GitHub, abbiamo un'applicazione con un flusso di sviluppo/distribuzione veloce, che distribuiamo ogni giorno, a volte più volte al giorno, in questo caso, git-flow tende a rallentare tutto a mio parere, e io uso il flusso GitHub.

L'altra cosa da considerare è che git-flow non è git standard, quindi potresti, e quando dico che potresti, intendo davvero, troverai sviluppatori che non lo sanno, e poi c'è il curva di apprendimento, più possibilità di rovinare le cose. Come detto sopra, qualcuno ha sviluppato un set di script per rendere più facile l'uso di git-flow, quindi non devi ricordare tutti i comandi, ti assisterà con i comandi, ma ricordare il flusso reale è il tuo lavoro , Mi sono imbattuto più di una volta quando uno sviluppatore non sapeva se si trattava di un hotfix o di una funzionalità, o ancora peggio quando non riuscivano a ricordare il flusso e cose da fare.

C'è almeno una GUI che supporta git-flow per Mac e Windows SourceTree.

In questi giorni, mi sto appoggiando più verso il flusso GitHub, grazie alla sua semplicità e facile da gestire. Inoltre, a causa di "distribuire presto distribuire spesso" ...

Spero che questo aiuti

+0

+1. Sono d'accordo con te. – VonC

+2

Il flusso GitHub è all'interno di Git-Flow. Pensa se hai bisogno di un'integrazione continua e di una distribuzione continua, puoi semplicemente eseguire il più possibile con lo sviluppo del ramo. Ogni funzione è derivata dal ramo di sviluppo. Potrebbe non essere necessario il ramo master o i rami di rilascio a meno che non si disponga di modelli di distribuzione complessi. (Ad esempio, la tua versione 1.1 è in diretta su alcuni client la tua 1.2 è in diretta su un altro client e attualmente sviluppi 1.3 per il tuo nuovo client) Tutti e 3 i client chiederanno correzioni di bug e modifiche alla loro rispettiva versione. –

39

Non v'è alcuna pallottola d'argento del flusso di lavoro in cui tutti dovrebbero seguire, dal momento che tutti i modelli sono sub-ottimali. Detto questo, è possibile selezionare il modello adatto per il proprio software in base ai seguenti punti;

più versioni in produzione - usare Git-flow

Se il codice è avere più versioni in produzione (cioè tipici prodotti software come sistemi operativi, pacchetti Office, personalizzati applicazioni, ecc) che si può usare git-flow. Il motivo principale è che è necessario il per supportare continuamente le versioni precedenti in produzione mentre lo sviluppa la versione successiva.

Versione unica nel software semplice produzione - usare Github-flow

Se il codice è avere una sola versione per la produzione in ogni momento (ad esempio siti web, servizi web, ecc) si può usare github-flow. Principale motivo è che non è necessario per cose complesse per lo sviluppatore. Una volta che lo sviluppatore termina una funzionalità o termina una correzione di bug, viene immediatamente promosso alla versione di produzione .

Single Version in produzione, ma molto complesso software - utilizzare Gitlab-flow

Grande software come Facebook e Gmail, potrebbe essere necessario introdurre rami distribuzione tra il ramo e ramo master dove CI Gli strumenti/CD> potrebbero essere eseguiti, prima che entrino in produzione. L'idea è di introdurre più protezione per la versione di produzione poiché è utilizzata da milioni di persone.

+3

Basta aggiungere "Gitdmz-flow"/"Git DMZ Flow" all'elenco: https://gist.github.com/djspiewak/9f2f91085607a4859a66 –

+1

Le società indicate utilizzano un sistema basato su trunk. http://paulhammant.com/2014/01/08/googles-vs-facebooks-trunk-based-development/ – PatrickWalker

+1

Git Il flusso DMZ è più simile a Gitflow e il ramo DMZ è come sviluppare un ramo. Quindi non sento nulla di speciale a riguardo. –