1. VCS, DVCS, Git-flow
La gestione dei sorgenti e il controllo di versione
Tiziano Lattisi
giovedì 20 giugno 13
2. a cosa serve? (1)
Backup incrementale di modifiche
Gestione di versioni distinte di un software
(funzionalità introdotte a breve, medio, lungo
termine; personalizzazioni)
“Time machine” (per passi di sviluppo)
Documentazione sorgenti più efficace dei commenti
nel codice
Statistiche
giovedì 20 giugno 13
3. a cosa serve? (2)
Lavoro contemporaneo sulla stessa risorsa
lock dei file (profili di accesso, necessità di
un responsabile...)
strumenti di merge (automatici con
risoluzione conflitti)
Risoluzione bug (che potrebbero essere di
versione)
giovedì 20 giugno 13
4. Storia
1972
1974
1982
1985
1986
2000
2003
2005
Source Code Control System (Bell Labs)
diff (AT&T)
GNU Revision Control System (Walter F. Tichy)
patch (Larry Wall)
CVS (Dick Grune)
Subversion (Apache)
Darcs (David Roundy)
Git (Linus Torvalds)
Mercurial (Matt Mackall)
giovedì 20 giugno 13
6. definizioni
hunk (o change): una modifica atomica ad un
file
commit (o record): un insieme di hunk che
porta lo sviluppo da A a B
branch: un ramo di sviluppo che porta ad un
obiettivo specifico (ad esempio una feature)
giovedì 20 giugno 13
7. cantieri aperti
produzione (la versione in uso)
la correzione di un baco
il test per la futura versione di produzione
lo sviluppo di una o più funzionalità (alcune
per la prossima versione in test, altre per
milestone più lontane...)
giovedì 20 giugno 13
8. flow
master: branch allineato con la versione in
produzione
develop: branch allineato con la versione in
sviluppo
master
ver. 1.0
giovedì 20 giugno 13
9. flow
master: branch allineato con la versione in
produzione
develop: branch allineato con la versione in
sviluppo
master
develop
ver. 1.0
giovedì 20 giugno 13
10. flow
master: branch allineato con la versione in
produzione
develop: branch allineato con la versione in
sviluppo
master
develop
ver. 1.0
giovedì 20 giugno 13
11. flow
master: branch allineato con la versione in
produzione
develop: branch allineato con la versione in
sviluppo
master
develop
ver. 1.0
giovedì 20 giugno 13
12. flow
master: branch allineato con la versione in
produzione
develop: branch allineato con la versione in
sviluppo
master
develop
ver. 1.0 ver. 2.0
giovedì 20 giugno 13
13. flow
master: branch allineato con la versione in
produzione
develop: branch allineato con la versione in
sviluppo
master
develop
ver. 1.0 ver. 2.0
giovedì 20 giugno 13
14. feature branch
branch di sviluppo di una nuova funzionalità
ramifica da develop e si innesta su develop
a fine sviluppo viene cancellato (merge o rebase)
develop
giovedì 20 giugno 13
15. feature branch
branch di sviluppo di una nuova funzionalità
ramifica da develop e si innesta su develop
a fine sviluppo viene cancellato (merge o rebase)
develop
feature/a
giovedì 20 giugno 13
16. feature branch
branch di sviluppo di una nuova funzionalità
ramifica da develop e si innesta su develop
a fine sviluppo viene cancellato (merge o rebase)
develop
feature/b
feature/a
giovedì 20 giugno 13
17. feature branch
branch di sviluppo di una nuova funzionalità
ramifica da develop e si innesta su develop
a fine sviluppo viene cancellato (merge o rebase)
develop
feature/b
feature/a
giovedì 20 giugno 13
18. feature branch
branch di sviluppo di una nuova funzionalità
ramifica da develop e si innesta su develop
a fine sviluppo viene cancellato (merge o rebase)
develop
feature/b
feature/a
giovedì 20 giugno 13
19. feature branch
branch di sviluppo di una nuova funzionalità
ramifica da develop e si innesta su develop
a fine sviluppo viene cancellato (merge o rebase)
develop
feature/b
feature/a
giovedì 20 giugno 13
20. feature branch
branch di sviluppo di una nuova funzionalità
ramifica da develop e si innesta su develop
a fine sviluppo viene cancellato (merge o rebase)
develop
feature/b
feature/a
giovedì 20 giugno 13
21. feature branch
branch di sviluppo di una nuova funzionalità
ramifica da develop e si innesta su develop
a fine sviluppo viene cancellato (merge o rebase)
develop
feature/b
feature/a
giovedì 20 giugno 13
22. feature branch
branch di sviluppo di una nuova funzionalità
ramifica da develop e si innesta su develop
a fine sviluppo viene cancellato (merge o rebase)
develop
feature/b
feature/a
giovedì 20 giugno 13
23. feature branch
branch di sviluppo di una nuova funzionalità
ramifica da develop e si innesta su develop
a fine sviluppo viene cancellato (merge o rebase)
develop
feature/b
feature/a
potenziale
conflitto
giovedì 20 giugno 13
24. feature branch
branch di sviluppo di una nuova funzionalità
ramifica da develop e si innesta su develop
a fine sviluppo viene cancellato (merge o rebase)
develop
feature/b
feature/a
potenziale
conflitto
giovedì 20 giugno 13
25. hotfix branch
branch di fix per un bug in produzione
ramifica da master (produzione) e si innesta su
master
a fine sviluppo viene cancellato (può essere
necessario un merge su develop)
master
ver. 2.0
giovedì 20 giugno 13
26. hotfix branch
branch di fix per un bug in produzione
ramifica da master (produzione) e si innesta su
master
a fine sviluppo viene cancellato (può essere
necessario un merge su develop)
master
ver. 2.0
hotfix/a
giovedì 20 giugno 13
27. hotfix branch
branch di fix per un bug in produzione
ramifica da master (produzione) e si innesta su
master
a fine sviluppo viene cancellato (può essere
necessario un merge su develop)
master
ver. 2.0 ver. 2.1
hotfix/a
giovedì 20 giugno 13
28. hotfix branch
branch di fix per un bug in produzione
ramifica da master (produzione) e si innesta su
master
a fine sviluppo viene cancellato (può essere
necessario un merge su develop)
master
ver. 2.0 ver. 2.1
hotfix/a
develop
merge in
develop?
giovedì 20 giugno 13
29. hotfix branch
branch di fix per un bug in produzione
ramifica da master (produzione) e si innesta su
master
a fine sviluppo viene cancellato (può essere
necessario un merge su develop)
master
ver. 2.0 ver. 2.1
hotfix/a
develop
merge in
develop?
giovedì 20 giugno 13
30. release branch
candidata in test per la prossima versione di
produzione
ramifica da develop e si innesta su master
viene generalmente “taggata” con un numero di
versione
master
ver. 2.1
develop
giovedì 20 giugno 13
31. release branch
candidata in test per la prossima versione di
produzione
ramifica da develop e si innesta su master
viene generalmente “taggata” con un numero di
versione
master
ver. 2.1
release/3.0
develop
giovedì 20 giugno 13
32. release branch
candidata in test per la prossima versione di
produzione
ramifica da develop e si innesta su master
viene generalmente “taggata” con un numero di
versione
master
ver. 2.1
release/3.0
develop
giovedì 20 giugno 13
33. release branch
candidata in test per la prossima versione di
produzione
ramifica da develop e si innesta su master
viene generalmente “taggata” con un numero di
versione
master
ver. 2.1
release/3.0
develop
giovedì 20 giugno 13
34. release branch
candidata in test per la prossima versione di
produzione
ramifica da develop e si innesta su master
viene generalmente “taggata” con un numero di
versione
master
ver. 2.1
release/3.0
develop
ver. 3.0
giovedì 20 giugno 13
35. release branch
candidata in test per la prossima versione di
produzione
ramifica da develop e si innesta su master
viene generalmente “taggata” con un numero di
versione
master
ver. 2.1
release/3.0
develop
ver. 3.0
giovedì 20 giugno 13
36. release branch
candidata in test per la prossima versione di
produzione
ramifica da develop e si innesta su master
viene generalmente “taggata” con un numero di
versione
master
ver. 2.1
release/3.0
develop
ver. 3.0
giovedì 20 giugno 13
37. buona creanza
pull, (risolvi i conflitti), push
commit frequenti (ma “significativi”, potrebbero
andare in changelog)
test prima di push
regole di stesura dei commenti (es. niente nomi di
file, forma dichiarativa, etc)
definizione delle regole di flow:
utilizzo dei branch
tempi di vita dei branch
responsabili dei branch principali
giovedì 20 giugno 13
38. fine
Thank you.
Tiziano Lattisi
Me: http://www.linkedin.com/in/tizianolattisi/
Slides: http://www.slideshare.net/lattisi/
Spunti e approfondimenti
http://leif.me/papers/Singer2012a.pdf
http://nvie.com/posts/a-successful-git-branching-model/
giovedì 20 giugno 13