SlideShare a Scribd company logo
Introduzione a GIT
                           Il sistema di Source Control distribuito




PHP User Group Friuli, 27/06/2012
STEFANO VALLE
http://www.mvassociati.it/
http://friuli.grusp.org/
Chi usa GIT?




5
COME SIAMO ARRIVATI A GIT?
7
CVS >> SVN




8
Introduzione a Git
SVN >> GIT




10
Perché è diverso?




11
E’ MOLTO VELOCE
E’ Distribuito




            Pro Git - http://git-scm.com/book
PERMETTE DI LAVORARE OFFLINE
Incoraggia sviluppo non lineare




           Pro Git - http://git-scm.com/book
Come funzionano gli altri?




                Pro Git - http://git-scm.com/book

16
Come funziona GIT?




               Pro Git - http://git-scm.com/book

17
LE BASI
Installare Git
     •   Debian/Ubuntu
         apt-get install git-core
     •   RedHat/Fedora/CentOS
         yum install git


     •   Disponibile per altre distribuzioni e SO:
         http://git-scm.com/downloads



19
Configurare Git
     •   Identità:
         git config --global user.name "John Doe"
         git config --global user.email johndoe@example.com



     •   Editor:
         git config --global core.editor emacs



     •   Verifica parametri:
         git config --list




20
«helper» per la console




21
Disponibili anche GUI




22
PARTIAMO!
init

     •   Inizializza un nuovo repository all’interno
         della cartella corrente
     •   Crea la sottocartella .git che conterrà
         tutti i file ad uso interno di git


24
clone

     •   Clona un repository git esistente




25
add

     •   Aggiunge un nuovo file a git, che da quel
         momento ne terrà traccia
     •   Aggiunge un file modificato all’area di
         staging (che vediamo fra poco)


26
commit

     •   Memorizza lo snapshot delle modifiche
         fatte
     •   Obbligatorio inserire un messaggio
     •   Identificato da hash SHA-1


27
Struttura di un commit




28
Ciclo di vita di un file
                                 Non
       Non gestito                                    Modificato                   In stage
                               modificato



               aggiunta del file
                                       modifica del file


                                                                staging del file


                rimozione del file




                                                           commit




29
status

     •   Mostra lo stato in cui si trovano i file del
         repository




30
log

     •   Mostra la storia dei commit
     •   Per ciascuno elenca autore e messaggio




31
DEMO 1
branch

     •   La killer feature di GIT!
     •   Consente di continuare lo sviluppo su una
         nuova feature senza impattare sul lavoro
         corrente


33
Un po’ di internals




                Pro Git - http://git-scm.com/book

34
git branch testing




                Pro Git - http://git-scm.com/book

35
Su quale branch stiamo lavorando?




                Pro Git - http://git-scm.com/book

36
checkout

     •   Consente di passare da un branch all’altro
     •   (o anche da un commit all’altro)




37
git checkout testing




                Pro Git - http://git-scm.com/book

38
DEMO 2 - BRANCHING
merge

     •   Incorpora sul branch principale le
         modifiche fatte su un altro branch
     •   Assieme a branch, è un altro comando
         che git incentiva ad usare spesso


40
merge

     fast-forward




                Pro Git - http://git-scm.com/book

41
merge
              Non fast-forward




     Pro Git - http://git-scm.com/book

42
DEMO 2 – OPERAZIONI DI MERGE
L’IMPREVISTO: I CONFLITTI
rebase

     •   Altro modo per integrare le modifiche di
         un branch
     •   Prende linearmente tutte le modifiche
         fatte su un branch e le applica ad un altro


45
rebase




     Pro Git - http://git-scm.com/book

46
Merge                                      Rebase

     Prende gli ultimi commit e li              Applica le modifiche di un
     «mette assieme», creando                   branch linearmente su un
     un nuovo commit di merge                   nuovo branch




                           Pro Git - http://git-scm.com/book

47
Git distribuito

                          repository
                          condiviso




        sviluppatore 1   sviluppatore 2   sviluppatore 3




48
remote

     •   Consente di gestire repository remoti
     •   Sincronizzandoli con il proprio repo locale




49
fetch

     •   Scarica branch e dati da un repository
         remoto




50
pull

     •   Scarica dati da un repository remoto e
         tenta di fare il merge con il branch
         corrente
     •   pull = fetch + merge


51
push

     •   Invia branch e dati ad un repository
         remoto
     •   Consente di aggiornare il repository
         remoto con le modifiche fatte localmente


52
DEMO 3 - REBASE
I REPOSITORY PUBBLICI
Github




55
Bitbucket




56
DEMO 4 – GIT WORKFLOW
Premessa
     •   Usate git per qualsiasi progetto
     •   Anche se sviluppate da soli
     •   Anche se lavorate solo in locale




58
Branches




59
Long-running branches
     •   master
         – Allineato con versione on-line


     •   develop
         – Allineato con versione in sviluppo




60
Topic branches
     •   Branch in cui sviluppare feature
     •   Feature terminata (e testata)? merge su
         develop
     •   Al termine, il branch viene cancellato




61
Hotfix branches
     •   Per bug fix / interventi veloci
     •   Fix terminato, merge su develop
     •   Cancellato al termine del merge
     •   Ha una vita molto breve




62
COMANDI UTILI
diff

     •   Mostra le differenze introdotte dalle
         modifiche non committate




64
tag

     •   Consente di contrassegnare un commit
     •   Spesso usato per identificare le versioni
         del progetto



65
stash

     •   Salva temporaneamente il contenuto della
         working directory, ripulendola
     •   Consente di cambiare branch in qualsiasi
         momento


66
reset

     •   Il comando più ambiguo!
     •   Consente di:
         – Togliere file dallo staging
         – Eliminare definitivamente file dallo staging
         – Riavvolgere storia commit

67
revert

     •   Consente di annullare uno o più commit
     •   Crea un nuovo commit che annulla
         l’effetto dei commit da eliminare



68
submodule

     •   Consente di includere un repository git
         all’interno del proprio progetto git
     •   Utile per caricare librerie esterne



69
BEST PRACTICES
Commit
     •   Fare commit spesso
     •   Un commit deve inglobare un insieme
         atomico di modifiche
     •   NON lavorare N giorni in attesa di aver
         finito il task!
     •   Al massimo fare tutti i commit alla fine,
         sfruttando lo staging



71
Testo del commit
     •   Sommario da max 50 caratteri
     •   Seguito (eventualmente) da descrizione
         più dettagliata
     •   Forma imperativa (es. «Add products
         section», ...)




72
COMMIT E PUSH PRIMA DEL COLLEGA!
LAVORARE TUTTI SUL MASTER, HUH?
TESTARE IL CODICE PRIMA DI COMMITTARLO
Decidere un workflow




76
LAVORARE CON GIT E’ PIACEVOLE
Per approfondire:

       •   Pro git: http://git-scm.com/book

       •   http://gitref.org/
       •   http://gitready.com/




78
DUBBI? DOMANDE?
http://www.hubme.in/
Grazie per l’attenzione




Stefano Valle
s.valle@mvassociati.it
@stefanovalle
Referenze Immagini
•   http://www.flickr.com/photos/boston_public_library/6323438849 /
•   http://www.flickr.com/photos/a03575/3632344397 /
•   http://www.flickr.com/photos/chiperoni/3456589962/
•   http://www.flickr.com/photos/53370644@ N06/4976492450
•   http://www.flickr.com/photos/lululemonathletica/4911299076/
•   http://www.flickr.com/photos/psi_mon/3473153641/
•   http://www.flickr.com/photos/masstravel/7454482646/
•   http://www.flickr.com/photos/53370644@ N06/4976497160/
•   http://www.flickr.com/photos/53370644@ N06/4975888229/
•   http://www.flickr.com/photos/53370644@ N06/4976490816/
•   http://www.flickr.com/photos/visualgrammar/2997271008/
•   http://www.flickr.com/photos/ejcdelahoya/2504629292 /
•   http://www.flickr.com/photos/altuwa/3582839737
•   http://www.flickr.com/photos/marine_corps/5132830788/
•   http://www.flickr.com/photos/72213316@ N00/5028110521/
•   http://www.flickr.com/photos/stevengrayphotography/6893446706/

More Related Content

PDF
Introduzione a Git
PDF
Git e GitHub - L'essenziale
PDF
Introducing GitLab
PDF
Introduzione a Git (ITA - 2017)
PPTX
Git 101 for Beginners
PDF
Docker containers : introduction
PPTX
Git and GitHub
PDF
GIT | Distributed Version Control System
Introduzione a Git
Git e GitHub - L'essenziale
Introducing GitLab
Introduzione a Git (ITA - 2017)
Git 101 for Beginners
Docker containers : introduction
Git and GitHub
GIT | Distributed Version Control System

What's hot (20)

PDF
Git training v10
PDF
Git - An Introduction
ODP
Introduction to Version Control
PDF
Git and github 101
KEY
Introduction to Git
PDF
Jenkins
PPTX
Git Lab Introduction
PDF
Introduction to Git
PPTX
GIT In Detail
PPTX
Jenkins CI
PDF
Git & GitHub WorkShop
PDF
Advanced Git Tutorial
PPTX
Introduction to Git and GitHub Part 1
PDF
Git real slides
PDF
Git & Github for beginners
ODP
An Introduction To Jenkins
PDF
svn 능력자를 위한 git 개념 가이드
PDF
git and github
PPT
Maven Introduction
PDF
Jenkins CI
Git training v10
Git - An Introduction
Introduction to Version Control
Git and github 101
Introduction to Git
Jenkins
Git Lab Introduction
Introduction to Git
GIT In Detail
Jenkins CI
Git & GitHub WorkShop
Advanced Git Tutorial
Introduction to Git and GitHub Part 1
Git real slides
Git & Github for beginners
An Introduction To Jenkins
svn 능력자를 위한 git 개념 가이드
git and github
Maven Introduction
Jenkins CI
Ad

Viewers also liked (20)

PDF
La filosofia Lean nello sviluppo di prodotti digitali
PDF
Stime e preventivi in un contesto di sviluppo agile
PDF
Moduli su Zend Framework 2: come sfruttarli
PDF
Introduzione a GIT - Laboratorio di Web Design 2014/15
PPTX
Sys05 uso consapevole di git - beyond the basic
PDF
PDF
GITT (part 1 of 2)
PDF
KEY
Perchè Git?
PDF
Linux Day 2015 Genova
PDF
Introduzione a git
PDF
Git best practices
KEY
PDF
Mini git tutorial
PDF
Anatomia di un progetto open-source
ODP
Controllo di versione e Git
PPTX
Git基礎介紹
PDF
Git in a nutshell
PDF
Git for dummies
PDF
Git 101 Presentation
La filosofia Lean nello sviluppo di prodotti digitali
Stime e preventivi in un contesto di sviluppo agile
Moduli su Zend Framework 2: come sfruttarli
Introduzione a GIT - Laboratorio di Web Design 2014/15
Sys05 uso consapevole di git - beyond the basic
GITT (part 1 of 2)
Perchè Git?
Linux Day 2015 Genova
Introduzione a git
Git best practices
Mini git tutorial
Anatomia di un progetto open-source
Controllo di versione e Git
Git基礎介紹
Git in a nutshell
Git for dummies
Git 101 Presentation
Ad

Similar to Introduzione a Git (20)

PDF
Git/Continuous Integration/Docker: la terna dello sviluppo moderno.
PDF
Emerasoft Git quickstart
PDF
Git e GitHub
PPTX
Introduzione a git
PDF
Git – lo stupido gestore di contenuti
PDF
Introduzione a git
PDF
Git: un'introduzione pratica
PDF
Git gestione comoda del repository
PDF
Git
PPTX
Git Flow - Un modello di branching che funziona
PDF
Revisionare, tracciare, collaborare. Version control con git
PDF
GIT SOTTO IL COFANO
PDF
Git in 5 minuti
KEY
Corso Python Deltapromo - Lezione 3
PDF
Git branching model
PPTX
Agile versioning with Git
PDF
Introduzione a Git e GitLab
PDF
GIT commands version control system and collaboration
Git/Continuous Integration/Docker: la terna dello sviluppo moderno.
Emerasoft Git quickstart
Git e GitHub
Introduzione a git
Git – lo stupido gestore di contenuti
Introduzione a git
Git: un'introduzione pratica
Git gestione comoda del repository
Git
Git Flow - Un modello di branching che funziona
Revisionare, tracciare, collaborare. Version control con git
GIT SOTTO IL COFANO
Git in 5 minuti
Corso Python Deltapromo - Lezione 3
Git branching model
Agile versioning with Git
Introduzione a Git e GitLab
GIT commands version control system and collaboration

More from Stefano Valle (6)

PDF
IoT: protocolli, dispositivi, architetture
PDF
Protocol Rollercoaster: da HTTP a AMQP, passando per CoAP e MQTT
PDF
Instant ACLs with Zend Framework 2
PDF
NoSQL Containers get Rich
PDF
Asset management with Zend Framework 2
PDF
Introduzione alle metodologie di sviluppo agile
IoT: protocolli, dispositivi, architetture
Protocol Rollercoaster: da HTTP a AMQP, passando per CoAP e MQTT
Instant ACLs with Zend Framework 2
NoSQL Containers get Rich
Asset management with Zend Framework 2
Introduzione alle metodologie di sviluppo agile

Introduzione a Git

  • 1. Introduzione a GIT Il sistema di Source Control distribuito PHP User Group Friuli, 27/06/2012
  • 7. 7
  • 13. E’ Distribuito Pro Git - http://git-scm.com/book
  • 15. Incoraggia sviluppo non lineare Pro Git - http://git-scm.com/book
  • 16. Come funzionano gli altri? Pro Git - http://git-scm.com/book 16
  • 17. Come funziona GIT? Pro Git - http://git-scm.com/book 17
  • 19. Installare Git • Debian/Ubuntu apt-get install git-core • RedHat/Fedora/CentOS yum install git • Disponibile per altre distribuzioni e SO: http://git-scm.com/downloads 19
  • 20. Configurare Git • Identità: git config --global user.name "John Doe" git config --global user.email johndoe@example.com • Editor: git config --global core.editor emacs • Verifica parametri: git config --list 20
  • 21. «helper» per la console 21
  • 24. init • Inizializza un nuovo repository all’interno della cartella corrente • Crea la sottocartella .git che conterrà tutti i file ad uso interno di git 24
  • 25. clone • Clona un repository git esistente 25
  • 26. add • Aggiunge un nuovo file a git, che da quel momento ne terrà traccia • Aggiunge un file modificato all’area di staging (che vediamo fra poco) 26
  • 27. commit • Memorizza lo snapshot delle modifiche fatte • Obbligatorio inserire un messaggio • Identificato da hash SHA-1 27
  • 28. Struttura di un commit 28
  • 29. Ciclo di vita di un file Non Non gestito Modificato In stage modificato aggiunta del file modifica del file staging del file rimozione del file commit 29
  • 30. status • Mostra lo stato in cui si trovano i file del repository 30
  • 31. log • Mostra la storia dei commit • Per ciascuno elenca autore e messaggio 31
  • 33. branch • La killer feature di GIT! • Consente di continuare lo sviluppo su una nuova feature senza impattare sul lavoro corrente 33
  • 34. Un po’ di internals Pro Git - http://git-scm.com/book 34
  • 35. git branch testing Pro Git - http://git-scm.com/book 35
  • 36. Su quale branch stiamo lavorando? Pro Git - http://git-scm.com/book 36
  • 37. checkout • Consente di passare da un branch all’altro • (o anche da un commit all’altro) 37
  • 38. git checkout testing Pro Git - http://git-scm.com/book 38
  • 39. DEMO 2 - BRANCHING
  • 40. merge • Incorpora sul branch principale le modifiche fatte su un altro branch • Assieme a branch, è un altro comando che git incentiva ad usare spesso 40
  • 41. merge fast-forward Pro Git - http://git-scm.com/book 41
  • 42. merge Non fast-forward Pro Git - http://git-scm.com/book 42
  • 43. DEMO 2 – OPERAZIONI DI MERGE
  • 45. rebase • Altro modo per integrare le modifiche di un branch • Prende linearmente tutte le modifiche fatte su un branch e le applica ad un altro 45
  • 46. rebase Pro Git - http://git-scm.com/book 46
  • 47. Merge Rebase Prende gli ultimi commit e li Applica le modifiche di un «mette assieme», creando branch linearmente su un un nuovo commit di merge nuovo branch Pro Git - http://git-scm.com/book 47
  • 48. Git distribuito repository condiviso sviluppatore 1 sviluppatore 2 sviluppatore 3 48
  • 49. remote • Consente di gestire repository remoti • Sincronizzandoli con il proprio repo locale 49
  • 50. fetch • Scarica branch e dati da un repository remoto 50
  • 51. pull • Scarica dati da un repository remoto e tenta di fare il merge con il branch corrente • pull = fetch + merge 51
  • 52. push • Invia branch e dati ad un repository remoto • Consente di aggiornare il repository remoto con le modifiche fatte localmente 52
  • 53. DEMO 3 - REBASE
  • 57. DEMO 4 – GIT WORKFLOW
  • 58. Premessa • Usate git per qualsiasi progetto • Anche se sviluppate da soli • Anche se lavorate solo in locale 58
  • 60. Long-running branches • master – Allineato con versione on-line • develop – Allineato con versione in sviluppo 60
  • 61. Topic branches • Branch in cui sviluppare feature • Feature terminata (e testata)? merge su develop • Al termine, il branch viene cancellato 61
  • 62. Hotfix branches • Per bug fix / interventi veloci • Fix terminato, merge su develop • Cancellato al termine del merge • Ha una vita molto breve 62
  • 64. diff • Mostra le differenze introdotte dalle modifiche non committate 64
  • 65. tag • Consente di contrassegnare un commit • Spesso usato per identificare le versioni del progetto 65
  • 66. stash • Salva temporaneamente il contenuto della working directory, ripulendola • Consente di cambiare branch in qualsiasi momento 66
  • 67. reset • Il comando più ambiguo! • Consente di: – Togliere file dallo staging – Eliminare definitivamente file dallo staging – Riavvolgere storia commit 67
  • 68. revert • Consente di annullare uno o più commit • Crea un nuovo commit che annulla l’effetto dei commit da eliminare 68
  • 69. submodule • Consente di includere un repository git all’interno del proprio progetto git • Utile per caricare librerie esterne 69
  • 71. Commit • Fare commit spesso • Un commit deve inglobare un insieme atomico di modifiche • NON lavorare N giorni in attesa di aver finito il task! • Al massimo fare tutti i commit alla fine, sfruttando lo staging 71
  • 72. Testo del commit • Sommario da max 50 caratteri • Seguito (eventualmente) da descrizione più dettagliata • Forma imperativa (es. «Add products section», ...) 72
  • 73. COMMIT E PUSH PRIMA DEL COLLEGA!
  • 74. LAVORARE TUTTI SUL MASTER, HUH?
  • 75. TESTARE IL CODICE PRIMA DI COMMITTARLO
  • 77. LAVORARE CON GIT E’ PIACEVOLE
  • 78. Per approfondire: • Pro git: http://git-scm.com/book • http://gitref.org/ • http://gitready.com/ 78
  • 81. Grazie per l’attenzione Stefano Valle s.valle@mvassociati.it @stefanovalle
  • 82. Referenze Immagini • http://www.flickr.com/photos/boston_public_library/6323438849 / • http://www.flickr.com/photos/a03575/3632344397 / • http://www.flickr.com/photos/chiperoni/3456589962/ • http://www.flickr.com/photos/53370644@ N06/4976492450 • http://www.flickr.com/photos/lululemonathletica/4911299076/ • http://www.flickr.com/photos/psi_mon/3473153641/ • http://www.flickr.com/photos/masstravel/7454482646/ • http://www.flickr.com/photos/53370644@ N06/4976497160/ • http://www.flickr.com/photos/53370644@ N06/4975888229/ • http://www.flickr.com/photos/53370644@ N06/4976490816/ • http://www.flickr.com/photos/visualgrammar/2997271008/ • http://www.flickr.com/photos/ejcdelahoya/2504629292 / • http://www.flickr.com/photos/altuwa/3582839737 • http://www.flickr.com/photos/marine_corps/5132830788/ • http://www.flickr.com/photos/72213316@ N00/5028110521/ • http://www.flickr.com/photos/stevengrayphotography/6893446706/

Editor's Notes

  • #10: Intro + sondaggio
  • #13: 1 o 2 ordini di grandezza più veloce di SVN
  • #14: L’intero repo si trova in tutti nella macchina di ogni sviluppatore
  • #15: Quasi tutte le operazioni sono localiLa clonazione del repo (operazione più lenta) scarica tutti i dati e tutta la storia
  • #16: Si adatta alla realtà fatta di interruzioni, fix da fare velocemente, lavoro in parallelo da parte di più sviluppatori
  • #17: Mantengono i delta
  • #18: Commit sono snapshots, i file modificati vengono copiati, i file non modificati mantengono la stessa referenza
  • #20: Anche per windows
  • #26: Si parte da qui per continuare a lavorare su un repo già fatto o per contribuire ad un progetto
  • #27: Doppia funzione
  • #32: git log --pretty=oneline
  • #35: Capiamo come funziona per comprendere perchè è così veloce e quindi perchè ha senso usare branch senza paura
  • #42: Definire fast-forward
  • #44: Quasi tutte le operazioni sono localiLa clonazione del repo (operazione più lenta) scarica tutti i dati e tutta la storia
  • #48: Esempi non ffVantaggi rebase: mantiene la storia dei commit lineareNon facciamo ora esemi, eventualmente alla fine a richiesta
  • #50: git remote –vcgit remote add githubgit@github.com:schacon/hw.git
  • #58: Quasi tutte le operazioni sono localiLa clonazione del repo (operazione più lenta) scarica tutti i dati e tutta la storia
  • #59: L’undo dello sviluppatore
  • #60: A cui aggiungere eventualmente branch di hotfixPer semplificare si può togliere branch develop
  • #62: Git fa cancellare solo branch completamente mergeati
  • #65: Non in stage: git diffIn stage: git diff --cachedEntrambe: git diff HEADSpecifico commit: git diff [commit]
  • #66: git tag –a [tagname] >> per annotated tagsgit push –taggit checkout [tagname]
  • #67: git stashgit stash listgit stash apply
  • #68: Rimuovere da staging: git reset HEAD o git reset HEAD – [nomefile]Differenze -- soft, -- hard
  • #76: Perlomeno su branch pubblici
  • #77: Come coding conventionsgitflow