Ogni volta che esegui un commit in un DVCS stai tecnicamente facendo un ramo nella cronologia, ogni volta che lo rimandi al repository benedetto lo reintegri, ecco la parte interessante:
- Se nessuno ha apportato modifiche durante il commit, non assomiglierà a un ramo nel DAG (grafico aciclico diretto)
- Se qualcun altro ha apportato una modifica durante il commit, apparirà come un ramo nel DAG, solo senza nome
Ricorda il pulsante "fork" in Bitbucket / github ?, il biforcarsi può essere considerato come un sinonimo di diramazione e ciò che il pulsante "fork" fa è solo un clone di quel repository sul tuo account.
L'unico vantaggio di "clonare in un ramo" è poter lavorare contemporaneamente su due punti della cronologia e ironicamente per il tuo collega, è un flusso di lavoro comune per lavorare contemporaneamente su diversi rami (senza dover andare avanti e indietro).
Dì al tuo collega di imparare come ramo , è molto facile, qui, avere un tutorial:
D:\>mkdir lol
D:\>cd lol
D:\lol>hg init
D:\lol>hg branch
default
D:\lol>touch lol
D:\lol>hg add lol
D:\lol>hg commit -m "lol"
D:\lol>hg branch lol
marked working directory as branch lol
(branches are permanent and global, did you want a bookmark?)
D:\lol>hg branches
default 0:35d562fafaf2
D:\lol>echo "lol" > lol
D:\lol>hg commit -m "New lol branch"
D:\lol>hg branches
lol 1:9384f923e78d
default 0:35d562fafaf2 (inactive)
D:\lol>hg branch
lol
D:\lol>hg update default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
D:\lol>hg branch
default
D:\lol>hg update lol
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
D:\lol>hg branch
lol
D:\lol>hg update default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
D:\lol>hg branch
default
D:\lol>hg merge lol
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
D:\lol>hg commit -m "lol merge"
D:\lol>hg branch
default
D:\lol>hg update lol
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
D:\lol>hg branch
lol
"La clonazione al ramo" ha senso quando lavori in rami diversi allo stesso tempo , oppure, quando vuoi prova un esperimento senza creare un ramo permanente nella storia e sarà comunque in grado di integrarlo in un ramo già esistente.
Personalmente non mi piace questa pratica e preferisco fare rami e chiuderli se necessario. Ecco, ecco come lo fai:
D:\lol>hg branches
default 2:46420aca1612
lol 1:9384f923e78d (inactive)
D:\lol>hg branch
lol
D:\lol>hg commit --close-branch -m "Obai, glorious lol branch"
D:\lol>hg branches
default 2:46420aca1612
D:\lol>hg branch
lol
D:\lol>hg update default
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
D:\lol>hg branches
default 2:46420aca1612
D:\lol>hg branches --closed
default 2:46420aca1612
lol 3:4b79c577e029 (closed)
Spero che questo chiarisca i dubbi sulla ramificazione di DVCS, qui i rami non sono più spaventosi.