Jon Purdy ha l'idea giusta. git flow
semplifica 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- git
prospettiva. Considerare git
quanto segue:
master--...............-.....-..............-
\ / / /
---develop---------............../
\ /
--feature---
Sopra, si ramifica master
in develop
(indicato da \
) e si ramifica develop
in un feature
ramo. 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, develop
ramificato da master
. Il bug scoperto in master
veniva corretto ramificandosi master
, risolvendolo e ricongiungendosi master
. Ci siamo quindi uniti master
in develop
, e poi develop
infeature2
, che ha rotolato il nuovo codice da hotfix
questi rami.
Quando feature2
torni a develop
, la sua cronologia include develop
con hotfix
. Allo stesso modo, develop
viene unito feature2
al nuovo codice da master
, quindi la fusione di develop
nuovo master
avverrà senza intoppi, dato che si basa su quel commit in master
quel 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 hotfix
filiale in 1.3
-e in 1.2
, 1.1
e 1.0
. Non diramare da ciascuno dei rami della versione di manutenzione; Non unire 1.0
in master
o unire master
nuovamente dentro 1.0
. Prendi un hotfix
ramo 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.3
testina come 1.3.17, unirla in ogni feature in progress derivata 1.3
e andare avanti.
L' git flow
estensione 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.
git
tag dopo ogni build riuscita? Ciò avrebbe l'ulteriore vantaggio di chiarire qualigit
commit hanno problemi di build o test di errori, poiché rimarrebbero senza tag.