SlideShare uma empresa Scribd logo
1 de 73
PERCHÈ GIT ?



                                      i t
Ciò che tutti gli Sviluppatori dovrebbero sapere...
...ma non osano imparare perchè è troppo sbatta!
C’era una volta SVN ...
C’era una volta SVN ...
Ehi fino a prova contraria
                           è ancora il piu’ diffuso!



C’era una volta SVN ...
SI, PERÒ QUALCHE DIFETTO CE L’HA!
SI, PERÒ QUALCHE DIFETTO CE L’HA!


           Ad esempio ???
LATENZA
LATENZA

Cause possibili:
LATENZA

     Cause possibili:

connettivita’ [rete lenta]

operazioni complesse [CPU]
LATENZA

     Cause possibili:                           Risultato:

connettivita’ [rete lenta]

operazioni complesse [CPU]
                                  Perdita di tempo
                                     e denaro
                                                           Noia e
                                                        demotivazione
REPOSITORY NON RAGGIUNGIBILE
REPOSITORY NON RAGGIUNGIBILE

 Cause possibili:
REPOSITORY NON RAGGIUNGIBILE

      Cause possibili:
Link down

server down

VPN down

Fastweb, telecom, infostrada, ecc...

Treno, Aereo, Nave, ecc...
REPOSITORY NON RAGGIUNGIBILE

      Cause possibili:                 Risultato:
                                            Perdita di tempo
Link down                                      e denaro

server down
                                                              Noia e
VPN down                                                   demotivazione

Fastweb, telecom, infostrada, ecc...

Treno, Aereo, Nave, ecc...                     Rabbia e
                                              nervosismo
COMMIT TROPPO FREQUENTI
        (sul trunk)
COMMIT TROPPO FREQUENTI
                   (sul trunk)

Cause possibili:
COMMIT TROPPO FREQUENTI
                              (sul trunk)

    Cause possibili:


Commit ossessivo compulsivo

Apprensione
COMMIT TROPPO FREQUENTI
                              (sul trunk)

    Cause possibili:                          Risultato:


Commit ossessivo compulsivo

Apprensione




                                            applicazione instabile
TRUNK NON STABILE
TRUNK NON STABILE

Cause possibili:
TRUNK NON STABILE

     Cause possibili:


Commit irresponsabili

Merge mal riusciti
TRUNK NON STABILE

     Cause possibili:                 Risultato:
                                               Rabbia e
                                              nervosismo
Commit irresponsabili

Merge mal riusciti


                           Perdita di tempo
                              e denaro
MERGE!
MERGE!

Cause possibili:
MERGE!

     Cause possibili:


Procedimento complesso

Conflitti
MERGE!

     Cause possibili:                     Risultato:
                                                        Noia e
                                                     demotivazione


Procedimento complesso

Conflitti


                                                           Rabbia e
                                                          nervosismo
                                  Perdita di tempo
                                     e denaro
E quindi ???
E quindi ???   C’è GIT !!!
Non e’ come passare da




                         a
Non e’ come passare da




                         a
ma piuttosto da




                  a
ma piuttosto da




                  a
Git non è l’evoluzione di SVN
Ma una vera e propria rivoluzione
Git si basa su princìpi diversi
Git si basa su princìpi diversi

                                  Svn funziona “Out of the box”
Git si basa su princìpi diversi

                                   Svn funziona “Out of the box”




                        Git ha una certa
                        curva di apprendimento
Git è strutturato come un File System
Git è strutturato come un File System



                                        Ehhh???
Git salva uno snapshot
del progetto ad ogni commit
Git salva uno snapshot
del progetto ad ogni commit
                              Svn salva le differenze (delta)
                              tr a l’ultimo commit e la
                              versione precedente
E allora???




              Beh questo porta diversi vantaggi
Git crea uno snapshot
del progetto e ne calcola il checksum
(hash SHA1 [24b9da6552252987aa493b52f8696cd6d3b00373] )
Git crea uno snapshot
del progetto e ne calcola il checksum
(hash SHA1 [24b9da6552252987aa493b52f8696cd6d3b00373] )

                                                    In questo modo si accorge di
                                                    qualsiasi modifica ed impedisce
                                                    di fare operazioni pericolose
Git crea uno snapshot
 del progetto e ne calcola il checksum
 (hash SHA1 [24b9da6552252987aa493b52f8696cd6d3b00373] )

                                                     In questo modo si accorge di
                                                     qualsiasi modifica ed impedisce
                                                     di fare operazioni pericolose
Si può fare di tutto, ma
semplicemente è più faticoso fare
stupidate che fare le cose per bene.
(vedi Ruby on Rails )
Git è Distribuito
Git è Distribuito


                    Gratuitamente in
                    metropolitana???
No!
Significa che ogni sviluppatore ha in
locale la copia dell’intero Repository
No!
Significa che ogni sviluppatore ha in
locale la copia dell’intero Repository

                                         Quindi il Repositor y è
                                         ridonandato e si riducono i
                                         Point of failure
No!
Significa che ogni sviluppatore ha in
locale la copia dell’intero Repository

                                         Quindi il Repositor y è
                                         ridonandato e si riducono i
                                         Point of failure

Inoltre tutte le operazioni sono
praticamente istantanee.
Quindi Git è Veloce!



                   Veloce!


                        VELOCE!
Inoltre il processo di merge è
      molto più semplice
       (No Rev. bensì snapshot)


                                  L’imperativo quindi è
                                  sfruttare al massimo
                                         i branch




                                   Tanto il repository è locale, non
                                   si rischia di fare pasticci.
?
Non ho capito se è distribuito
  in metropolitana o no.
Questo e’ SVN

                Repository principale




  Developer
Questo e’ Git

               Repository principale




 1/20 di SVN




           Developer
La feature del repository distribuito permette di
  decidere quale sarà il repository principale.
La feature del repository distribuito permette di
  decidere quale sarà il repository principale.




                                    Chi gestisce il repository principale ha il potere
                                               di decidere cosa “mergiare”
La feature del repository distribuito permette di
  decidere quale sarà il repository principale.




                                    Chi gestisce il repository principale ha il potere
                                               di decidere cosa “mergiare”




                       ma soprattutto non dovrà fare un merge tra
                       innumerevoli commit, bensì solamente l’ultima
                       versione del master (trunk) aggiornata (da colui che
                       ha fatto le modifiche).
RELAX

Relax

          RELAX!
    STOP! ai merge che durano 1/2 giornata
No Revision!
No Revision!




               Git riconosce automaticamente
                      gli eventi di branch
No Revision!




                                Git riconosce automaticamente
                                       gli eventi di branch




e registra automaticamente gli eventi di merge
         (quali branch, committer, ecc...)
5 diversi algoritmi di merge!




                                maggiori probabilità di successo

                                meno conflitti
5 diversi algoritmi di merge!




                                            maggiori probabilità di successo

                                            meno conflitti



            Finalmente branch e merge
           diventano operazioni semplici.
Perchè con SVN nessuno vuole usare i branch?


                                                  Perchè non sempre è necessario!




    Oppure perchè è troppo complesso e oneroso,
            e non ne va mai bene uno!
         E meno lo si fa, meno lo si impara.
Con Git è un’operazione semplice, all’ordine del giorno.




Per questo branch e merge diventano operazioni naturali
Un paio di comandi evoluti che fanno la differenza...
Rebase


         REBASE

Per integrare in maniera rapida e indolore,
            nel ramo corrente,
  le patch provenienti da un altro ramo.
                                              REBASE
Stash


                STASH

Per “parcheggiare” temporaneamente le modifiche locali,
           applicare la/e patch, committare, e
                                                           STASH
tornare ai propri sviluppi come se niente fosse accaduto
stash
                  clone            STATUS
                           reset
 BRANCH

         add
                          COMMIT
merge                   CHECKOUT
               rebase                  diff
...rimane solamente da provare...
Created by
                                      Questo non sono io,
                                      è Arthur Christmas© !
                                  Però c’è una certa somiglianza.




http://about.me/mauroferratello

Mais conteúdo relacionado

Mais procurados

Mais procurados (8)

Introduzione a Git (ITA - 2017)
Introduzione a Git (ITA - 2017)Introduzione a Git (ITA - 2017)
Introduzione a Git (ITA - 2017)
 
Systemd - Firenze LUG
Systemd - Firenze LUGSystemd - Firenze LUG
Systemd - Firenze LUG
 
Buildout
BuildoutBuildout
Buildout
 
Git e GitHub - L'essenziale
Git e GitHub - L'essenziale Git e GitHub - L'essenziale
Git e GitHub - L'essenziale
 
Introduzione a Git e GitLab
Introduzione a Git e GitLabIntroduzione a Git e GitLab
Introduzione a Git e GitLab
 
Controllo di versione e Git
Controllo di versione e GitControllo di versione e Git
Controllo di versione e Git
 
Applicazioni Serverless con AWS
Applicazioni Serverless con AWSApplicazioni Serverless con AWS
Applicazioni Serverless con AWS
 
La mia prima lezione di pozioni
La mia prima lezione di pozioniLa mia prima lezione di pozioni
La mia prima lezione di pozioni
 

Destaque

Sys05 uso consapevole di git - beyond the basic
Sys05   uso consapevole di git - beyond the basicSys05   uso consapevole di git - beyond the basic
Sys05 uso consapevole di git - beyond the basic
DotNetCampus
 
Advanced Git
Advanced GitAdvanced Git
Advanced Git
segv
 

Destaque (20)

Linux Day 2015 Genova
Linux Day 2015 GenovaLinux Day 2015 Genova
Linux Day 2015 Genova
 
Git–SVN
Git–SVNGit–SVN
Git–SVN
 
Sys05 uso consapevole di git - beyond the basic
Sys05   uso consapevole di git - beyond the basicSys05   uso consapevole di git - beyond the basic
Sys05 uso consapevole di git - beyond the basic
 
GITT (part 1 of 2)
GITT (part 1 of 2)GITT (part 1 of 2)
GITT (part 1 of 2)
 
Introduzione a git
Introduzione a gitIntroduzione a git
Introduzione a git
 
Mini git tutorial
Mini git tutorialMini git tutorial
Mini git tutorial
 
Git - An Introduction
Git - An IntroductionGit - An Introduction
Git - An Introduction
 
Anatomia di un progetto open-source
Anatomia di un progetto open-sourceAnatomia di un progetto open-source
Anatomia di un progetto open-source
 
Git基礎介紹
Git基礎介紹Git基礎介紹
Git基礎介紹
 
Git in a nutshell
Git in a nutshellGit in a nutshell
Git in a nutshell
 
Git for dummies
Git for dummiesGit for dummies
Git for dummies
 
Git 101 Presentation
Git 101 PresentationGit 101 Presentation
Git 101 Presentation
 
Git and Github
Git and GithubGit and Github
Git and Github
 
Git and GitHub
Git and GitHubGit and GitHub
Git and GitHub
 
[NDC16] Effective Git
[NDC16] Effective Git[NDC16] Effective Git
[NDC16] Effective Git
 
Advanced Git
Advanced GitAdvanced Git
Advanced Git
 
Git Tutorial 教學
Git Tutorial 教學Git Tutorial 教學
Git Tutorial 教學
 
Introduction to git
Introduction to gitIntroduction to git
Introduction to git
 
Getting Git Right
Getting Git RightGetting Git Right
Getting Git Right
 
Intro to git and git hub
Intro to git and git hubIntro to git and git hub
Intro to git and git hub
 

Semelhante a Perchè Git?

Agile Creativity - Creativity Day 2014 - Roma, Milano, Reggio Emilia
Agile Creativity - Creativity Day 2014 - Roma, Milano, Reggio EmiliaAgile Creativity - Creativity Day 2014 - Roma, Milano, Reggio Emilia
Agile Creativity - Creativity Day 2014 - Roma, Milano, Reggio Emilia
Giulio Roggero
 

Semelhante a Perchè Git? (20)

Software ...e tutto ciò che comporta
Software ...e tutto ciò che comportaSoftware ...e tutto ciò che comporta
Software ...e tutto ciò che comporta
 
Sai lavorare Agile? Un nuovo modo di pensare i progetti; un nuovo modo di lav...
Sai lavorare Agile? Un nuovo modo di pensare i progetti; un nuovo modo di lav...Sai lavorare Agile? Un nuovo modo di pensare i progetti; un nuovo modo di lav...
Sai lavorare Agile? Un nuovo modo di pensare i progetti; un nuovo modo di lav...
 
Introduzione ad ubuntu core - Qt day 2017
Introduzione ad ubuntu core  - Qt day 2017Introduzione ad ubuntu core  - Qt day 2017
Introduzione ad ubuntu core - Qt day 2017
 
Node and the Cloud
Node and the CloudNode and the Cloud
Node and the Cloud
 
kube-green | Davide Bianchi
kube-green | Davide Bianchikube-green | Davide Bianchi
kube-green | Davide Bianchi
 
Agile versioning with Git
Agile versioning with GitAgile versioning with Git
Agile versioning with Git
 
Agile Creativity - Creativity Day 2014 - Roma, Milano, Reggio Emilia
Agile Creativity - Creativity Day 2014 - Roma, Milano, Reggio EmiliaAgile Creativity - Creativity Day 2014 - Roma, Milano, Reggio Emilia
Agile Creativity - Creativity Day 2014 - Roma, Milano, Reggio Emilia
 
Basta problemi-con-tensorflow-usando-docker-nvidia-docker
Basta problemi-con-tensorflow-usando-docker-nvidia-dockerBasta problemi-con-tensorflow-usando-docker-nvidia-docker
Basta problemi-con-tensorflow-usando-docker-nvidia-docker
 
Maze Enterprise: front-end e back-end. Trova la miglior soluzione!
Maze Enterprise: front-end e back-end. Trova la miglior soluzione!Maze Enterprise: front-end e back-end. Trova la miglior soluzione!
Maze Enterprise: front-end e back-end. Trova la miglior soluzione!
 
Agileday2013 pratiche agili applicate all'infrastruttura
Agileday2013 pratiche agili applicate all'infrastrutturaAgileday2013 pratiche agili applicate all'infrastruttura
Agileday2013 pratiche agili applicate all'infrastruttura
 
Visual Studio Release Management - una nuova Weltanschauung o un'evoluzione n...
Visual Studio Release Management - una nuova Weltanschauung o un'evoluzione n...Visual Studio Release Management - una nuova Weltanschauung o un'evoluzione n...
Visual Studio Release Management - una nuova Weltanschauung o un'evoluzione n...
 
Loosely Coupled Complexity - Unleash the power of your domain model
Loosely Coupled Complexity - Unleash the power of your domain modelLoosely Coupled Complexity - Unleash the power of your domain model
Loosely Coupled Complexity - Unleash the power of your domain model
 
01 linux corso teoria
01 linux corso teoria01 linux corso teoria
01 linux corso teoria
 
Inversion of Control @ CD2008
Inversion of Control @ CD2008Inversion of Control @ CD2008
Inversion of Control @ CD2008
 
Tech Webinar: Firefox Developer Tool
Tech Webinar: Firefox Developer ToolTech Webinar: Firefox Developer Tool
Tech Webinar: Firefox Developer Tool
 
Il tuo router è sicuro?!
Il tuo router è sicuro?!Il tuo router è sicuro?!
Il tuo router è sicuro?!
 
Il tuo router è sicuro?
Il tuo router è sicuro?Il tuo router è sicuro?
Il tuo router è sicuro?
 
Alice in WordPressLand - "We're all mad here"
Alice in WordPressLand - "We're all mad here"Alice in WordPressLand - "We're all mad here"
Alice in WordPressLand - "We're all mad here"
 
Development process
Development processDevelopment process
Development process
 
Jug Roma - Wii Remote
Jug Roma - Wii RemoteJug Roma - Wii Remote
Jug Roma - Wii Remote
 

Perchè Git?

  • 1. PERCHÈ GIT ? i t Ciò che tutti gli Sviluppatori dovrebbero sapere...
  • 2. ...ma non osano imparare perchè è troppo sbatta!
  • 5. Ehi fino a prova contraria è ancora il piu’ diffuso! C’era una volta SVN ...
  • 6. SI, PERÒ QUALCHE DIFETTO CE L’HA!
  • 7. SI, PERÒ QUALCHE DIFETTO CE L’HA! Ad esempio ???
  • 10. LATENZA Cause possibili: connettivita’ [rete lenta] operazioni complesse [CPU]
  • 11. LATENZA Cause possibili: Risultato: connettivita’ [rete lenta] operazioni complesse [CPU] Perdita di tempo e denaro Noia e demotivazione
  • 13. REPOSITORY NON RAGGIUNGIBILE Cause possibili:
  • 14. REPOSITORY NON RAGGIUNGIBILE Cause possibili: Link down server down VPN down Fastweb, telecom, infostrada, ecc... Treno, Aereo, Nave, ecc...
  • 15. REPOSITORY NON RAGGIUNGIBILE Cause possibili: Risultato: Perdita di tempo Link down e denaro server down Noia e VPN down demotivazione Fastweb, telecom, infostrada, ecc... Treno, Aereo, Nave, ecc... Rabbia e nervosismo
  • 16. COMMIT TROPPO FREQUENTI (sul trunk)
  • 17. COMMIT TROPPO FREQUENTI (sul trunk) Cause possibili:
  • 18. COMMIT TROPPO FREQUENTI (sul trunk) Cause possibili: Commit ossessivo compulsivo Apprensione
  • 19. COMMIT TROPPO FREQUENTI (sul trunk) Cause possibili: Risultato: Commit ossessivo compulsivo Apprensione applicazione instabile
  • 22. TRUNK NON STABILE Cause possibili: Commit irresponsabili Merge mal riusciti
  • 23. TRUNK NON STABILE Cause possibili: Risultato: Rabbia e nervosismo Commit irresponsabili Merge mal riusciti Perdita di tempo e denaro
  • 26. MERGE! Cause possibili: Procedimento complesso Conflitti
  • 27. MERGE! Cause possibili: Risultato: Noia e demotivazione Procedimento complesso Conflitti Rabbia e nervosismo Perdita di tempo e denaro
  • 29. E quindi ??? C’è GIT !!!
  • 30. Non e’ come passare da a
  • 31. Non e’ come passare da a
  • 34. Git non è l’evoluzione di SVN
  • 35. Ma una vera e propria rivoluzione
  • 36. Git si basa su princìpi diversi
  • 37. Git si basa su princìpi diversi Svn funziona “Out of the box”
  • 38. Git si basa su princìpi diversi Svn funziona “Out of the box” Git ha una certa curva di apprendimento
  • 39. Git è strutturato come un File System
  • 40. Git è strutturato come un File System Ehhh???
  • 41. Git salva uno snapshot del progetto ad ogni commit
  • 42. Git salva uno snapshot del progetto ad ogni commit Svn salva le differenze (delta) tr a l’ultimo commit e la versione precedente
  • 43. E allora??? Beh questo porta diversi vantaggi
  • 44. Git crea uno snapshot del progetto e ne calcola il checksum (hash SHA1 [24b9da6552252987aa493b52f8696cd6d3b00373] )
  • 45. Git crea uno snapshot del progetto e ne calcola il checksum (hash SHA1 [24b9da6552252987aa493b52f8696cd6d3b00373] ) In questo modo si accorge di qualsiasi modifica ed impedisce di fare operazioni pericolose
  • 46. Git crea uno snapshot del progetto e ne calcola il checksum (hash SHA1 [24b9da6552252987aa493b52f8696cd6d3b00373] ) In questo modo si accorge di qualsiasi modifica ed impedisce di fare operazioni pericolose Si può fare di tutto, ma semplicemente è più faticoso fare stupidate che fare le cose per bene. (vedi Ruby on Rails )
  • 48. Git è Distribuito Gratuitamente in metropolitana???
  • 49. No! Significa che ogni sviluppatore ha in locale la copia dell’intero Repository
  • 50. No! Significa che ogni sviluppatore ha in locale la copia dell’intero Repository Quindi il Repositor y è ridonandato e si riducono i Point of failure
  • 51. No! Significa che ogni sviluppatore ha in locale la copia dell’intero Repository Quindi il Repositor y è ridonandato e si riducono i Point of failure Inoltre tutte le operazioni sono praticamente istantanee.
  • 52. Quindi Git è Veloce! Veloce! VELOCE!
  • 53. Inoltre il processo di merge è molto più semplice (No Rev. bensì snapshot) L’imperativo quindi è sfruttare al massimo i branch Tanto il repository è locale, non si rischia di fare pasticci.
  • 54. ? Non ho capito se è distribuito in metropolitana o no.
  • 55. Questo e’ SVN Repository principale Developer
  • 56. Questo e’ Git Repository principale 1/20 di SVN Developer
  • 57. La feature del repository distribuito permette di decidere quale sarà il repository principale.
  • 58. La feature del repository distribuito permette di decidere quale sarà il repository principale. Chi gestisce il repository principale ha il potere di decidere cosa “mergiare”
  • 59. La feature del repository distribuito permette di decidere quale sarà il repository principale. Chi gestisce il repository principale ha il potere di decidere cosa “mergiare” ma soprattutto non dovrà fare un merge tra innumerevoli commit, bensì solamente l’ultima versione del master (trunk) aggiornata (da colui che ha fatto le modifiche).
  • 60. RELAX Relax RELAX! STOP! ai merge che durano 1/2 giornata
  • 62. No Revision! Git riconosce automaticamente gli eventi di branch
  • 63. No Revision! Git riconosce automaticamente gli eventi di branch e registra automaticamente gli eventi di merge (quali branch, committer, ecc...)
  • 64. 5 diversi algoritmi di merge! maggiori probabilità di successo meno conflitti
  • 65. 5 diversi algoritmi di merge! maggiori probabilità di successo meno conflitti Finalmente branch e merge diventano operazioni semplici.
  • 66. Perchè con SVN nessuno vuole usare i branch? Perchè non sempre è necessario! Oppure perchè è troppo complesso e oneroso, e non ne va mai bene uno! E meno lo si fa, meno lo si impara.
  • 67. Con Git è un’operazione semplice, all’ordine del giorno. Per questo branch e merge diventano operazioni naturali
  • 68. Un paio di comandi evoluti che fanno la differenza...
  • 69. Rebase REBASE Per integrare in maniera rapida e indolore, nel ramo corrente, le patch provenienti da un altro ramo. REBASE
  • 70. Stash STASH Per “parcheggiare” temporaneamente le modifiche locali, applicare la/e patch, committare, e STASH tornare ai propri sviluppi come se niente fosse accaduto
  • 71. stash clone STATUS reset BRANCH add COMMIT merge CHECKOUT rebase diff
  • 73. Created by Questo non sono io, è Arthur Christmas© ! Però c’è una certa somiglianza. http://about.me/mauroferratello

Notas do Editor

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n