Jon Purdy ha l'idea giusta. git flowsemplifica anche la gestione effettiva di queste filiali e la gestione delle filiali è un argomento a cui rivolgersi git.
Cominciamo con una carrellata di base git, dal momento che si sta venendo dal svn-a- gitprospettiva. Considerare gitquanto segue:
master--...............-.....-..............-
\ / / /
---develop---------............../
\ /
--feature---
Sopra, si ramifica masterin develop(indicato da \) e si ramifica developin un featureramo. Uniamo i rami di backup (indicato da /), con commit ( -) lungo un ramo. (Se non c'è nessun commit ma l'unione è a destra, ci sono degli .indicatori per mostrare che il prossimo -è il prossimo commit).
Abbastanza facile. E se avessimo un hotfix nella nostra versione principale?
master--...............-.....-................-...........-.........-
\ / / / \ /| /
\ / / / -hotfix-- V /
---develop---------............../..............-...----
\ / \ V /
--feature--- --feature2...----
Sopra, developramificato da master. Il bug scoperto in masterveniva corretto ramificandosi master, risolvendolo e ricongiungendosi master. Ci siamo quindi uniti masterin develop, e poi developinfeature2 , che ha rotolato il nuovo codice da hotfixquesti rami.
Quando feature2torni a develop, la sua cronologia include developcon hotfix. Allo stesso modo, developviene unito feature2al nuovo codice da master, quindi la fusione di developnuovo masteravverrà senza intoppi, dato che si basa su quel commit in masterquel momento, come se da quel momento ti fossi ramificato master.
Quindi ecco un altro modo per farlo.
master--..........-........-
\ /\ /
---1.0-- --1.1--
I suoi 1.0 release ottenere tagged- 1.0.1, 1.0.2, 1.0.3, e così via.
Ora ecco un trucco: hai trovato un bug in 1.0 e riguarda 1.1, 1.2 e 1.3. cosa fai?
Si ramifica la versione più recente o la prima mantenuta e la si corregge. Poi si unisce la nuova hotfixfiliale in 1.3-e in 1.2, 1.1e 1.0. Non diramare da ciascuno dei rami della versione di manutenzione; Non unire 1.0in mastero unire masternuovamente dentro 1.0. Prendi un hotfixramo e uniscilo in tutti i rami della versione. Se ci sono conflitti, te lo dirà; rivedi il tuo codice per assicurarti che le modifiche siano corrette ( git diffè tuo amico).
Ora quel cambiamento specifico è applicato ovunque. Il lignaggio è ramificato, ma va bene. Non è casuale. Contrassegnare la 1.3testina come 1.3.17, unirla in ogni feature in progress derivata 1.3e andare avanti.
L' git flowestensione aiuta a gestire questi rami di manutenzione, funzionalità e hotfix per te. Una volta ridotto il flusso di lavoro, questo è banale e risolve enormemente la gestione del codice sorgente.
Ho visto questo fatto nei team di programmazione, ma non ho lavorato così profondamente come programmatore, quindi mi sto ancora concentrando sul flusso di lavoro quotidiano.
gittag dopo ogni build riuscita? Ciò avrebbe l'ulteriore vantaggio di chiarire qualigitcommit hanno problemi di build o test di errori, poiché rimarrebbero senza tag.