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.