2012-01-16 12 views
5

Ho un'applicazione che è la versione 1.0. Ora devo iniziare a lavorare sulla versione 2.0 ma allo stesso tempo mantenere e correggere i bug nella versione 1.0.Flusso di lavoro per lavorare con due versioni di un progetto in Mercurial

Correzioni di bug da 1.0 saranno uniti nel rilascio 2.0 ma nessuna nuova funzionalità sarà backport dal rilascio 2.0-1.0.

Capisco come funzionano i rami, ma ho bisogno di poter lavorare su entrambe le versioni allo stesso tempo, quindi non è pratico passare tra i rami nella stessa cartella di lavoro. Voglio essere in grado di eseguire entrambe le versioni del codice contemporaneamente.

Che cosa è un setup o un flusso di lavoro tipico per poter lavorare su due versioni della stessa applicazione utilizzando i rami denominati contemporaneamente? cioè lavorando con un ramo in una cartella e un altro ramo in un'altra cartella?

Devo solo clonare il repository in una nuova cartella per la versione 2.0 e impostare il ramo su quello per la versione 2.0?

Sono un po 'nuovo a Mercurial quindi per favore perdonatemi se questo suona un po' ingenuo.

+1

Prova: http://nvie.com/posts/a-successful-git-branching-model/ è destinato a GIT, ma funziona per Mercurial. Potrebbe essere d'aiuto per il tuo problema – PostMan

+0

Farei esattamente come suggerisci: avere due versioni (clonate) del codice verificate, una per la versione 1.0 e una per la versione 2.0. –

risposta

7

Devo solo clonare il repository in una nuova cartella per la versione 2.0 e impostare il ramo su quello per la versione 2.0?

Sì, un clone separato per ogni versione principale andrà bene. Tuttavia, è necessario mantenere lo sviluppo principale on the default branch e utilizzare i rami denominati per ogni versione principale. Lasciami correre attraverso il flusso di lavoro:

Quando la versione 1.0 è fatto, si fa

$ cd ~/src/foo 
$ hg tag 1.0 
$ hg push http://your-server/foo 

e si può quindi continuare a lavorare in quel clone verso la versione 2.0. Quando si scopre che è necessario per correggere un bug in 1.0, si fa

$ cd ~/src 
$ hg clone http://your-server/foo foo-1.x 
$ cd foo-1.x 
$ hg update 1.0 
$ hg branch 1.x 
$ hg commit -m "Starting 1.x branch" 
# now fix the bug... left as an exercise to the reader :) 
$ hg commit -m "Fixed issue123" 
# do QA to test the bugfix, make more commits as necessary 
$ hg tag 1.1 
$ hg push --new-branch 
# make a release 

La bandiera --new-branch è necessaria solo la prima volta che si preme. Indica a Mercurial che vuoi davvero creare un nuovo ramo permanente nella storia.

ora si desidera tirare il bugfix nell'altro repository:

$ cd ~/src/foo 
$ hg pull http://your-server/foo 
$ hg merge 1.x 
$ hg commit -m "Merge with 1.1" 

Usando una named branch per la serie 1.x, è sempre possibile utilizzare hg update 1.x per andare alla più recente di modifiche su quel ramo. Pensa a 1.x come "tag mobile" che punta sempre al tip-most changeset su quel ramo.

Questo flusso di lavoro è descritto nello standard branching wiki page.

+1

+1. Forse vale la pena notare che nel Mercurial predefinito, penso che avresti bisogno di 'hg push -f' per forzare la spinta dal ramo 1.x ... perché staresti spingendo una nuova testa, che non è permessa senza" forzare " .In una singola linea di sviluppo, la testa aggiuntiva di solito sarebbe gestita dalla fusione, ma non è ciò che si vuole qui. – icabod

+1

@icabod: grazie, mi ero dimenticato della bandiera '--new-branch'. È una forma più controllata di '-f' che ti permette di spingere nuovi rami senza farti spingere più teste. –

+1

Ah, non avevo usato '--new-branch' prima, probabilmente perché ho una seccante abitudine di creare branch anonimi, per cui' --new-branch' non sembra funzionare. 'Va bene per i rami denominati tho'. Lo userò in futuro :) – icabod