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

Perchè Git?

  • 1.
    PERCHÈ GIT ? i t Ciò che tutti gli Sviluppatori dovrebbero sapere...
  • 2.
    ...ma non osanoimparare perchè è troppo sbatta!
  • 3.
  • 4.
  • 5.
    Ehi fino aprova contraria è ancora il piu’ diffuso! C’era una volta SVN ...
  • 6.
    SI, PERÒ QUALCHEDIFETTO CE L’HA!
  • 7.
    SI, PERÒ QUALCHEDIFETTO CE L’HA! Ad esempio ???
  • 8.
  • 9.
  • 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
  • 12.
  • 13.
  • 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.
  • 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
  • 20.
  • 21.
  • 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
  • 24.
  • 25.
  • 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
  • 28.
  • 29.
    E quindi ??? C’è GIT !!!
  • 30.
    Non e’ comepassare da a
  • 31.
    Non e’ comepassare da a
  • 32.
  • 33.
  • 34.
    Git non èl’evoluzione di SVN
  • 35.
    Ma una verae propria rivoluzione
  • 36.
    Git si basasu princìpi diversi
  • 37.
    Git si basasu princìpi diversi Svn funziona “Out of the box”
  • 38.
    Git si basasu princìpi diversi Svn funziona “Out of the box” Git ha una certa curva di apprendimento
  • 39.
    Git è strutturatocome un File System
  • 40.
    Git è strutturatocome un File System Ehhh???
  • 41.
    Git salva unosnapshot del progetto ad ogni commit
  • 42.
    Git salva unosnapshot 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 unosnapshot del progetto e ne calcola il checksum (hash SHA1 [24b9da6552252987aa493b52f8696cd6d3b00373] )
  • 45.
    Git crea unosnapshot 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 unosnapshot 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 )
  • 47.
  • 48.
    Git è Distribuito Gratuitamente in metropolitana???
  • 49.
    No! Significa che ognisviluppatore ha in locale la copia dell’intero Repository
  • 50.
    No! Significa che ognisviluppatore ha in locale la copia dell’intero Repository Quindi il Repositor y è ridonandato e si riducono i Point of failure
  • 51.
    No! Significa che ognisviluppatore 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 processodi 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 capitose è 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 delrepository distribuito permette di decidere quale sarà il repository principale.
  • 58.
    La feature delrepository distribuito permette di decidere quale sarà il repository principale. Chi gestisce il repository principale ha il potere di decidere cosa “mergiare”
  • 59.
    La feature delrepository 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
  • 61.
  • 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 algoritmidi merge! maggiori probabilità di successo meno conflitti
  • 65.
    5 diversi algoritmidi merge! maggiori probabilità di successo meno conflitti Finalmente branch e merge diventano operazioni semplici.
  • 66.
    Perchè con SVNnessuno 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 dicomandi 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
  • 72.
  • 73.
    Created by Questo non sono io, è Arthur Christmas© ! Però c’è una certa somiglianza. http://about.me/mauroferratello