2010-02-26 11 views
32

La mia squadra sta appena iniziando con Mercurial e un repository centrale. Abbiamo Hudson che costruisce la punta del ramo "predefinito", che è fondamentalmente la nostra linea principale. Avevamo una politica di check-in con il nostro vecchio VCS che le revisioni del codice, i test, ecc. Devono essere eseguiti prima di effettuare il check-in sulla linea principale.Flusso di lavoro mercuriale per gli sviluppatori ~ 15 - Dovremmo utilizzare le filiali denominate?

Quindi, diciamo che stai lavorando sulla funzione X. Lavori su alcune cose, basandole su "default", e poi commetti una funzione parziale come checkpoint. Localmente il tuo "default" è ora rotto - non lo hai ancora condiviso con nessuno, ma se dovessi fare una spinta, beh ora hai il codice rotto in mainline.

Anche se si aspetta di spingere fino a quando non è stato risolto tutto, sembra che ci siano situazioni (ad esempio lavorando su due cose contemporaneamente) in cui è necessario spingere alcune modifiche ma non tutte.

Inoltre, se si verificano tutte le modifiche del checkpoint, verranno apportate alcune revisioni nella riga principale che viene creata e altre nella linea principale che non vengono create.

Abbiamo iniziato a utilizzare i rami denominati, ma più mi sto leggendo, più penso che stiamo usando male i rami nominati.

Qualche suggerimento su come impostare un buon flusso di lavoro che ci consenta di eseguire Hudson e mantenere la nostra politica principale?

risposta

2

Si potrebbero prendere in considerazione almeno due repository. Il repository "mainline" ha il codice testato e revisionato. Il codice viene inviato a questo repository solo dopo che Hudson lo ha testato e dopo che le recensioni sono state completate. Il repository "testing" sarebbe un clone della linea principale. Questo è il repository che Hudson monitora, così che ogni volta che un changeset viene spinto nel repository di test, lo sono i test di Hudson. Probabilmente è possibile configurare una fase di costruzione di Hudson che trasferisce le modifiche dal repository di test alla linea principale se i test vengono superati.

Gli sviluppatori spingono sempre verso il repository di test, ma si limitano a tirare dalla linea principale, in modo da inserire solo il codice testato. Se hanno bisogno di condividere i changeset non testati, possono spingere/tirare direttamente tra i rispettivi repository locali. Forse è possibile configurare Hg in modo che la mainline accetti solo le push dal repository di test, in modo che gli sviluppatori non possano accidentalmente spingere alla mainline invece di testare.

Potrebbe anche essere utile disporre di un repository di recensioni. Così gli sviluppatori spingono al testing, Hudson spinge il codice testato per la revisione, e quindi il codice revisionato viene spinto a mainline.

Disclaimer: Ho usato solo Hg su progetti banali e in modi banali.

+1

Penso che questa strategia possa funzionare anche all'interno di un singolo repo, ma usando solo un ramo stabile e instabile. Gli sviluppatori si impegnano solo in unstable e una volta che i test passano viene unito a stable. Devo pensarci un po 'di più ... ma questa è l'idea a cui torno sempre. –

2

Quello che facciamo nella mia azienda è utilizzare il ramo denominato per distinguere la versione stabile (su cui si commettono solo correzioni di bug) e la prossima versione su cui si verifica lo sviluppo e si esegue il backport di correzioni da stabile a predefinito su base regolare (con hg merge stable sul ramo predefinito).

Per la revisione del codice utilizziamo l'estensione mq per consentire agli sviluppatori di inviare patch pulite. E gli sviluppatori possono estrarre dagli altri repository, senza inquinare il repository di riferimento.

Disclaimer: non usiamo Hudson.

2

È una questione di mentalità. I VCS distribuiti non richiedono il mantenimento di un singolo repository centrale.

Anziché avere la linea principale aperta a tutti per il check-in, configurarlo con accesso di scrittura limitato.Solo i changeset che sono stati approvati (testati, firmati, qualsiasi cosa abbia senso per te) sono incorporati nella linea principale.

Il modo in cui gestisci le modifiche alla linea principale è una domanda aperta con molte risposte possibili. Eccone due in cima alla mia testa:

  • Gli sviluppatori possono passare liberamente a un repository "di verifica" centrale, dal quale vengono esaminate le modifiche.
  • Gli sviluppatori pubblicano i changeset sulle proprie workstation (ricorda, i rami sono economici) e il processo di revisione principale li preleva direttamente da lì.
18

In primo luogo, consiglio vivamente A Guide to Branching in Mercurial

successivo, si potrebbe spingere appena il ramo corrente: Nudge - A Gentler Version of Push

E forse si potrebbe decidere di consentire solo una testa per ogni ramo: 32. Prevent a push that would create multiple heads

Altro QUINDI domande relative ai rami nominati:

+1

Grazie, il primo collegamento è stato piuttosto utile - non l'avevo mai visto prima. L'autore menziona alcune delle stesse preoccupazioni che ho, ma sembra vedere i benefici nei rami denominati. Forse posso farlo funzionare con l'idea stabile/instabile. –

0

Si potrebbe anche considerare utilizzando l'estensione Bookmarks invece di rami con nome.

Se hai familiarità con git, i segnalibri si comportano come rami di git invece di rami mercuriali.

Problemi correlati