Introduzione a Git

2,258 views

Published on

Presentazione su Git tenuta all'incontro del PHP Users Group Friuli il 27/06/2012

Published in: Technology
1 Comment
10 Likes
Statistics
Notes
No Downloads
Views
Total views
2,258
On SlideShare
0
From Embeds
0
Number of Embeds
29
Actions
Shares
0
Downloads
61
Comments
1
Likes
10
Embeds 0
No embeds

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

    1. 1. Introduzione a GIT Il sistema di Source Control distribuitoPHP User Group Friuli, 27/06/2012
    2. 2. STEFANO VALLE
    3. 3. http://www.mvassociati.it/
    4. 4. http://friuli.grusp.org/
    5. 5. Chi usa GIT?5
    6. 6. COME SIAMO ARRIVATI A GIT?
    7. 7. 7
    8. 8. CVS >> SVN8
    9. 9. SVN >> GIT10
    10. 10. Perché è diverso?11
    11. 11. E’ MOLTO VELOCE
    12. 12. E’ Distribuito Pro Git - http://git-scm.com/book
    13. 13. PERMETTE DI LAVORARE OFFLINE
    14. 14. Incoraggia sviluppo non lineare Pro Git - http://git-scm.com/book
    15. 15. Come funzionano gli altri? Pro Git - http://git-scm.com/book16
    16. 16. Come funziona GIT? Pro Git - http://git-scm.com/book17
    17. 17. LE BASI
    18. 18. 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/downloads19
    19. 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 --list20
    20. 20. «helper» per la console21
    21. 21. Disponibili anche GUI22
    22. 22. PARTIAMO!
    23. 23. init • Inizializza un nuovo repository all’interno della cartella corrente • Crea la sottocartella .git che conterrà tutti i file ad uso interno di git24
    24. 24. clone • Clona un repository git esistente25
    25. 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
    26. 26. commit • Memorizza lo snapshot delle modifiche fatte • Obbligatorio inserire un messaggio • Identificato da hash SHA-127
    27. 27. Struttura di un commit28
    28. 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 commit29
    29. 29. status • Mostra lo stato in cui si trovano i file del repository30
    30. 30. log • Mostra la storia dei commit • Per ciascuno elenca autore e messaggio31
    31. 31. DEMO 1
    32. 32. branch • La killer feature di GIT! • Consente di continuare lo sviluppo su una nuova feature senza impattare sul lavoro corrente33
    33. 33. Un po’ di internals Pro Git - http://git-scm.com/book34
    34. 34. git branch testing Pro Git - http://git-scm.com/book35
    35. 35. Su quale branch stiamo lavorando? Pro Git - http://git-scm.com/book36
    36. 36. checkout • Consente di passare da un branch all’altro • (o anche da un commit all’altro)37
    37. 37. git checkout testing Pro Git - http://git-scm.com/book38
    38. 38. DEMO 2 - BRANCHING
    39. 39. merge • Incorpora sul branch principale le modifiche fatte su un altro branch • Assieme a branch, è un altro comando che git incentiva ad usare spesso40
    40. 40. merge fast-forward Pro Git - http://git-scm.com/book41
    41. 41. merge Non fast-forward Pro Git - http://git-scm.com/book42
    42. 42. DEMO 2 – OPERAZIONI DI MERGE
    43. 43. L’IMPREVISTO: I CONFLITTI
    44. 44. rebase • Altro modo per integrare le modifiche di un branch • Prende linearmente tutte le modifiche fatte su un branch e le applica ad un altro45
    45. 45. rebase Pro Git - http://git-scm.com/book46
    46. 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/book47
    47. 47. Git distribuito repository condiviso sviluppatore 1 sviluppatore 2 sviluppatore 348
    48. 48. remote • Consente di gestire repository remoti • Sincronizzandoli con il proprio repo locale49
    49. 49. fetch • Scarica branch e dati da un repository remoto50
    50. 50. pull • Scarica dati da un repository remoto e tenta di fare il merge con il branch corrente • pull = fetch + merge51
    51. 51. push • Invia branch e dati ad un repository remoto • Consente di aggiornare il repository remoto con le modifiche fatte localmente52
    52. 52. DEMO 3 - REBASE
    53. 53. I REPOSITORY PUBBLICI
    54. 54. Github55
    55. 55. Bitbucket56
    56. 56. DEMO 4 – GIT WORKFLOW
    57. 57. Premessa • Usate git per qualsiasi progetto • Anche se sviluppate da soli • Anche se lavorate solo in locale58
    58. 58. Branches59
    59. 59. Long-running branches • master – Allineato con versione on-line • develop – Allineato con versione in sviluppo60
    60. 60. Topic branches • Branch in cui sviluppare feature • Feature terminata (e testata)? merge su develop • Al termine, il branch viene cancellato61
    61. 61. Hotfix branches • Per bug fix / interventi veloci • Fix terminato, merge su develop • Cancellato al termine del merge • Ha una vita molto breve62
    62. 62. COMANDI UTILI
    63. 63. diff • Mostra le differenze introdotte dalle modifiche non committate64
    64. 64. tag • Consente di contrassegnare un commit • Spesso usato per identificare le versioni del progetto65
    65. 65. stash • Salva temporaneamente il contenuto della working directory, ripulendola • Consente di cambiare branch in qualsiasi momento66
    66. 66. reset • Il comando più ambiguo! • Consente di: – Togliere file dallo staging – Eliminare definitivamente file dallo staging – Riavvolgere storia commit67
    67. 67. revert • Consente di annullare uno o più commit • Crea un nuovo commit che annulla l’effetto dei commit da eliminare68
    68. 68. submodule • Consente di includere un repository git all’interno del proprio progetto git • Utile per caricare librerie esterne69
    69. 69. BEST PRACTICES
    70. 70. 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 staging71
    71. 71. Testo del commit • Sommario da max 50 caratteri • Seguito (eventualmente) da descrizione più dettagliata • Forma imperativa (es. «Add products section», ...)72
    72. 72. COMMIT E PUSH PRIMA DEL COLLEGA!
    73. 73. LAVORARE TUTTI SUL MASTER, HUH?
    74. 74. TESTARE IL CODICE PRIMA DI COMMITTARLO
    75. 75. Decidere un workflow76
    76. 76. LAVORARE CON GIT E’ PIACEVOLE
    77. 77. Per approfondire: • Pro git: http://git-scm.com/book • http://gitref.org/ • http://gitready.com/78
    78. 78. DUBBI? DOMANDE?
    79. 79. http://www.hubme.in/
    80. 80. Grazie per l’attenzioneStefano Valles.valle@mvassociati.it@stefanovalle
    81. 81. 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/

    ×