Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Git e GitHub

How to use Git and GitHub

  • Be the first to comment

Git e GitHub

  1. 1. Sviluppo collaborativo Simone Scalabrino Evoluzione dei sistemi software 8/12/2015
  2. 2. 1. Introduzione: VCS 4. GitHub Git 2. Comandi di base 3. Comandi avanzati
  3. 3. Team di sviluppo
  4. 4. Team di sviluppo ● Come condividere il codice? ● Come capire chi ha fatto cosa?
  5. 5. Sistema stabileSistema stabile
  6. 6. Sistema stabileSistema stabile Ma manca una funzionalità...Ma manca una funzionalità...
  7. 7. Qualcosa puòQualcosa può sempre andaresempre andare storto!storto!
  8. 8. Come si puòCome si può tornare indietrotornare indietro nel tempo?nel tempo?
  9. 9. Version Control Systems
  10. 10. Concurrent Version System Subversion VCS centralizzati
  11. 11. VCS centralizzati Repository Client 1 Client 2 Client 3
  12. 12. Mercurial Git VCS distribuiti
  13. 13. VCS distribuiti Repository Repository Repository Repository
  14. 14. VCS distribuiti Repository Repository Repository Repository
  15. 15. Git Nasce nel 2005 Creato da Linus Torvalds
  16. 16. “Per i primi 10 anni di manutenzione del kernel, usavamo letteralmente tarball (archivi compressi) e patch, che è un sistema di gestione del codice sorgente molto migliore di CVS.” “Per un po' lo slogan di Subversion era ‘CVS fatto bene’, o qualcosa di simile, e se incominci con quel tipo di slogan, non puoi andare da nessuna parte. Non c'è modo di fare CVS bene.”
  17. 17. Terzo scenario
  18. 18. Git Linea di comando Interfaccia grafica Plugin IDE
  19. 19. Come funziona? Client Repository remoto
  20. 20. Come funziona? Client Repository centrale Git può essere usato offline
  21. 21. File Working directory Staging area Repository locale add commit checkout/merge
  22. 22. File Working directory Staging area Repository locale Repository remoto add commit push fetch/pull checkout/merge
  23. 23. src/Main.java src/Network.java src/Files.java src/FS.java File modificati Staging area
  24. 24. File modificati src/Main.java src/FS.java Staging area Add src/Main.java src/Network.java src/Files.java src/FS.java
  25. 25. src/Network.java src/Files.java File modificati Staging area Commit src/Main.java src/FS.java
  26. 26. af342 435dd acc23 54634Locale Push Remoto af342
  27. 27. af342 435dd acc23 54634Locale Push Remoto af342 435dd acc23 54634
  28. 28. 435ddLocale Fetch Remoto af342 435dd acc23 54634af342
  29. 29. 435ddLocale Fetch Remoto af342 435dd acc23 54634af342 acc23 54634
  30. 30. Iniziamo!
  31. 31. Git init ● Crea un repository git vuoto in una determinata cartella ● La cartella “.git” conterrà tutti i dati storici git init
  32. 32. Git clone ● Crea una copia locale di un repository remoto esistente git clone http://rm.te/x.git
  33. 33. Git status ● Stampa lo stato attuale del branch su cui si sta lavorando ● Elenca i file: – Modificati e nella staging area – Modificati e non (ancora) nella staging area – Non tracciati git status
  34. 34. Gitignore ● Si può inserire un file “.gitignore” ● Contiene un elenco di pattern di nomi di file o cartelle da ignorare
  35. 35. Git diff e difftool ● Mostra le differenze tra un file e la versione nell'ultimo commit ● Diff mostra le differenze nella shell ● Difftool permette di usare un tool esterno git diff src/network.c git difftool src/network.c git difftool
  36. 36. Git add ● Aggiunge un file alla staging area ● La staging area contiene tutti i file che faranno parte del prossimo commit ● Si può aggiungere un file ignorato usando l'opzione “-f” git add src/test.c git add src/ git add -f src/test.pdf
  37. 37. Git commit ● Carica sul repository locale i file nella staging area ● Crea uno snapshot del progetto ● È identificato univocamente da un hash (SHA1) di 40 caratteri ● Contiene un breve messaggio che indica i motivi del commit git commit -m “Fixed!”
  38. 38. Esempio di commit Commit 2f68f110fa5f66b2a3c603a7e3d6cdcecd54ad2e Author: Mario Rossi <m.rossi@unimol.it> Date: Fri Dec 4 14:30:23 2015 +0100 Fixed bug #12. Now the connection works properly. File: src/network.c src/network.h src/main.c
  39. 39. Git reset ● Ambiguo! Ha due significati: – Opposto di “add” – Opposto di “commit” ● Toglie un file dalla staging area git reset src/main.c ● Permette di tornare ad un commit passato git reset --hard af2314d
  40. 40. Git revert ● Elimina le modifiche del commit specificato ● Crea un nuovo commit di revert git revert af2314d git revert HEAD~1
  41. 41. af432 d5364 cb654 36c34 HEAD
  42. 42. af432 d5364 cb654 36c34 HEAD (Hard) Reset
  43. 43. HEAD Revert ff24f3 af432 d5364 cb654 36c34
  44. 44. Git remote ● Permette di impostare un repository remoto – Utile se si inizia con “git init” – Inutile se si clona un repository remoto git remote add http://rm.te/x.git
  45. 45. Git push ● Carica i commit locali sul repository remoto ● Rende pubblici i cambiamenti effettuati, il codice è stato testato e funziona git push origin master git push http://rm.te/x.git master
  46. 46. Git fetch ● Opposto del “push” ● Carica sul repository locale gli ultimi commit del repository remoto git fetch origin master git fetch http://rm.te/x.git master
  47. 47. Demo 1 Comandibase
  48. 48. Cosa abbiamo risolto?
  49. 49. Cosa abbiamo risolto? 1. Possiamo collaborare usando un repository remoto 2. Possiamo tornare a un commit passato se qualcosa non va
  50. 50.
  51. 51. Sviluppo non lineareSviluppo non lineare Git permette lo
  52. 52. Sviluppo non lineareSviluppo non lineare Git permette lo incoraggia
  53. 53. Branch Ramo di sviluppo parallelo Parte da un ramo già esistente
  54. 54. master 132fd 2dfc3 662fa
  55. 55. cdc23 87435 mastermaster develop 132fd 2dfc3 662fa
  56. 56. Merge
  57. 57. 13243mastermaster develop cdc23 87435 132fd 2dfc3 662fa
  58. 58. Merge automatico ● Algoritmi per il merge automatico – Three way – Recursive – Fast-forward ● Nuovo commit alla fine del processo
  59. 59. Se ci sonoSe ci sono conflitti?conflitti?
  60. 60. Merge manuale ● Git interrompe il merge automatico ● Per ogni file in conflitto bisogna scegliere se: – Mantenere la versione del branch corrente/locale – Mantenere la versione del branch fuso/remoto – Fondere linea per linea ● Bisogna fare manualmente il commit di merge (il messaggio è già impostato)
  61. 61. Modello di sviluppo master develop topic
  62. 62. Master ● Contiene la versione più aggiornata del sistema ● Si può usare, contiene codice testato e funzionante
  63. 63. Develop ● Contiene la prossima versione del sistema ● Nuove funzionalità ● Il codice non è necessariamente stabile, è testato solo parzialmente ● Viene fuso in “master” quando è stabile
  64. 64. Topic ● Si crea un branch per ogni nuova funzionalità del sistema ● Ogni branch “topic” contiene codice puramente sperimentale, spesso non testato
  65. 65. Esempio 324da 17d3f 98ffa 1132d 243dd ba231 a3b42 901ac cc1ac d2ff1 1d12a 9873c master develop login registration afc23
  66. 66. Nuovi comandi
  67. 67. Git status ● Dà anche informazioni sul branch corrente git status git status -b
  68. 68. Git branch ● Crea un nuovo branch. ● Il commit 0 del nuovo branch è il commit attuale del branch di partenza ● Non cambia branch! git branch topic
  69. 69. Git checkout ● Ambiguo! Ha due significati: – Cambia il branch (sposta la HEAD) git checkout topic git checkout -b topic2 – Ripristina lo stato di un file da un commit passato git checkout -- src/test.c git checkout af453d -- src/test.c
  70. 70. Git merge ● Fonde un altro branch nel branch corrente ● Il merge è automatico, quando possibile git merge topic
  71. 71. Git pull ● Preleva i file dal repository remoto ● Fa il merge con il branch attuale git pull origin topic1
  72. 72. Git mergetool ● Se il merge automatico fallisce, permette di usare un tool esterno per fare il merge ● Non sostituisce “merge”! ● Tool per il merge: – Meld – Beyond compare git mergetool
  73. 73. Git stash ● Salva i cambiamenti attuali su uno stack, non nella staging area ● Ripristina l'ultimo commit git stash git stash pop
  74. 74. Demo 2 Branch
  75. 75. È tutto su git?
  76. 76. Altro http://www.git-scm.com http://www.stackoverflow.com
  77. 77. GitHub Repository git Sviluppo Open Source Social
  78. 78. GitHub Repository Repository Repository
  79. 79. Impostazione del remote ● Come visto precedentemente… git remote add [URL] ● URL di GitHub: – http://github.com/[OWNER]/[REPO] – http://github.com/[OWNER]/[REPO].git
  80. 80. Markdown
  81. 81. Markdown ● Formattazione di testi in GitHub – README.md – Documentazione – Discussioni ● È convertito in HTML
  82. 82. Markdown in 1 minuto Main heading =============== This is *italic*, this is **bold**, this is `monospace` * List Item 1 * List Item 2 # Heading 1 ## Heading 2 ### Heading 3 ```java public class Test { } ```
  83. 83. Social coding
  84. 84. Issue TAG Bug, feature request, ... Discussione su un argomento Riferimenti ai commit
  85. 85. Commit Possono essere commentati Riferimenti alle issue
  86. 86. Utenti Following/Followers Star ai progetti preferiti
  87. 87. Fork
  88. 88. Branch in git cdc23 87435 master develop 132fd 2dfc3 662fa
  89. 89. Fork su GitHub
  90. 90. Esempio StarOffice OpenOffice LibreOffice NeoOffice
  91. 91. Pull request
  92. 92. Pull request ● Si può: – Commentare – Migliorare (follow-up commits) – Unire (merge) – Chiudere – Eliminare
  93. 93. Pull request Pull request
  94. 94. Pull request Pull request Comment
  95. 95. Pull request Pull request Comment Commit
  96. 96. Pull request Pull request Comment Commit Commit
  97. 97. Pull request Pull request Comment Commit Commit Comment
  98. 98. Pull request Pull request Comment Commit Commit Comment Merge
  99. 99. Pull request Pull request Comment Commit Commit Comment Merge Anche per i branch dello stesso repository!
  100. 100. Demo 3 GitHub
  101. 101. Per concludere
  102. 102. Grazie per l'attenzione Domande?

×