Manuale di minima sopravvivenza

Workflow di base

a partire dalla working copy pulita:

hg up <nome_del_branch_principale_dal_quale_voglio_partire> (normalmente default)
faccio le mie modifiche
hg topic <nome_del_topic>
hg commit -m "messaggio"
hg push -t <nome_del_topic>

Se ho concluso il lavoro:

eseguo:

hg pull (-u per applicare direttamente)
  • controllo i commit che sono arrivati sul branch dal quale sono partito, per verificare se impattano o meno su quello che io sto facendo nel mio topic.

  • Faccio un rebase o un merge. * Vedi sezione Merge or Rebase (si! non riesco a fare gli ancor. scrolla verso il basso!!)

  • Pusho e creo la MR che mercurial mi propone. (in caso di + branch fate attenzione nel submittare la MR puntando al branch dal quale siete partiti)

Se NON ho concluso il lavoro:

faccio altre modifiche poi:

hg commit -m "messaggio"
hg push -t <nome_del_topic>

se mi rendo conto di dover fare una modifica (un fix in genere) che non modifica la sostanza del lavoro svolto posso, con la working copy pulita, fare (dal topic):

hg absorb
hg push -t <nome_del_branch>

Linee guida:

  • I topics devono essere consistenti e devono avere nomi parlanti.

  • I topic devono dipendere sempre e solo dal branch dal quale sono partiti.

  • I topics non dovrebbero mai essere costruiti uno sull’altro.

  • Portare avanti + topics in parallelo è un’attività sconveniente e rischiosa. A meno di casi particolari.

  • Bisogna sempre usare il buon senso.

  • Le MR andrebbero submittate quando si ritiene di poter chiudere il topic definitivamente.

Se ho dei topic che devono dipendere uno dall’altro probabilmente non sto seguendo la strada giusta. Dunque; o includo, se pertinente, quello che dovrei fare sul mio attuale topic oppure finisco il primo topic lo rebaso ( o mergio) con il branch dal quale sono partito. A questo punto mi sposto sul branch dal quale sono partito e inizio nuovament il ciclo.

Se vi trovaste in situazioni particolari Sandro ha riportato ampie casistiche qui

Merge or Rebase?

Supponendo di essere all’interno del topic: * se dal branch da cui sono partito non sono state introdotte nuove modifiche da altri (o anche da me) è probabile che mi convenga fare un rebase.

hg rebase -d <nome_del_branch_di_destinazione>
  • se nel mentre che lavoravo al mio topic, il branch dal quale sono partito ha ricevuto nuovi changeset (è andato avanti nella storia) e queste modifiche coinvolgono in tutto o in parte i files e le righe da me modificate, è probabile che le mie modifiche attuali non siano aggiornate a quanto si è cambiato sul branch. Dunque effettuo un merge (discrimino cosa voglio tenere e cosa voglio modificare) con il branch dal quale sono partito.

hg merge <nome_del_branch_di_destinazione>

altri comandi utili

hg diff –r BRANCH1:BRANCH2  # per vedere le differenze tra 2 branches.