Controllo di versione e Git

download Controllo di versione e Git

If you can't read please download the document

description

Introduzione al Controllo di versione (in generale) e al funzionamento di Git (in particolare). Upgrade di un'altra presentazione simile nelle basi ma incentrata su SVN.

Transcript of Controllo di versione e Git

  • 1. Version Control Introduzione, principi generali e implementazione in Git gennaio 2011 aggiornato aprile 2012 ri-aggiornato febbraio 2013 ri-ri-aggiornato aprile 2014

2. Di che si parla? Quando un progetto software diventa complesso, anche la sua gestione complicata Il controllo revisioni permette di gestire tutte le modifiche apportate ai documenti del progetto, archiviando tutte le versioni del progetto sin dal suo inizio Ecco cosa si pu fare... 3. E se non lo uso? E' un mondo libero, e ciascuno libero di sbagliare nel modo che preferisce. MA questo quello che pu succedere.. 4. Metodologie di sviluppo... Sviluppatore singolo Pi sviluppatori Sviluppo con copie multiple Sviluppo con copia unica 5. Sviluppatore singolo #include Int main() { int a; int b; } File.c #include Int main() { int a; } File.c Ieri Oggi 6. Sviluppatore singolo (Problemi) Difficile recuperare le versioni pi vecchie basandosi sulla data. Difficile stabilire le differenze tra le versioni di uno stesso file. 7. Sviluppatori multipli (Sviluppo con copia individuale) Sviluppatore-1 Sviluppatore-2 Sviluppatore-3 PC-1 PC-2 PC-3 server 8. Sviluppatori multipli (Sviluppo con copia individuale) Problemi Difficile riunire i vari file modificati singolarmente. Difficile recuperare le versioni precedenti basandosi sull'utente o sulla data. 9. Sviluppatori multipli (Sviluppo con copia unica) Sviluppatore-1 Sviluppatore-2 Sviluppatore-3 server 10. Sviluppatori multipli (Sviluppo con copia unica) Problemi Impatto sul server e traffico di rete. Tempi di sviluppo lenti. Difficile recuperare le versioni precedenti, basanndosi sulla data o sull'utente. Non si possono vedere le differenze tra la versione precedente e l'attuale. 11. I problemi in sintesi Non c' modo di recuperare le versioni precedenti, basandosi sulla data o l'utente. Non c' modo di vedere le differenze tra le versioni. Processo di fusione versioni manuale, lento e di dubbio successo. Lunghi tempi di sviluppo. 12. Come risolverli? Utilizzando, ad esempio, un sistema di controllo revisione. Detto anche Versioning, o Revision Control System Revision control (also known as version control, source control or (source) code management (SCM)) is the management of changes to documents, programs, and other information stored as computer files. 13. Sviluppatore singolo #include Int main() { int a; int b; } File.c #include Int main() { int a; } File.c Ieri Stamattina Versione-1 Versione-2 Versione-3 #include Int main() { int a; int b; } File.c Stasera 14. Sviluppatori multipli (Sviluppo in copia individuale) Sviluppatore-1 Sviluppatore-2 Sviluppatore-3 Copia di lavoro - 1 del Repository Server Repository (deposito) principale Copia di lavoro - 2 del Repository Commit (Consegna) Primo checkout (copia) dal repository del server Aggiornamentodal server Copia di lavoro 3 del Repository 15. Gestione file nel Repository Versione-1 User : user-1 Date : 24-10- 2007 Time :11:00:12 User : user-1 Date : 24-10- 2007 Time :11:00:12 User : user-2 Date : 24-10- 2007 Time :11:00:12 User : user-2 Date : 24-10- 2007 Time :11:00:12 User : user-1 Date : 24-10- 2007 Time :11:00:12 User : user-1 Date : 24-10- 2007 Time :11:00:12 User : user-3 Date : 24-10- 2007 Time :1200:12 User : user-3 Date : 24-10- 2007 Time :1200:12 User : user-2 Date : 24-10- 2007 Time :12:00:12 User : user-2 Date : 24-10- 2007 Time :12:00:12 User : user-1 Date : 24-10- 2007 Time :11:00:12 User : user-1 Date : 24-10- 2007 Time :11:00:12 User : user-2 Date : 24-10- 2007 Time :11:00:12 User : user-2 Date : 24-10- 2007 Time :11:00:12 User : user-3 Date : 24-10- 2007 Time :11:00:12 User : user-3 Date : 24-10- 2007 Time :11:00:12 User : user-1 Date : 24-10- 2007 Time :11:00:12 User : user-1 Date : 24-10- 2007 Time :11:00:12 User : user-1 Date : 24-10- 2007 Time :11:00:12 User : user-1 Date : 24-10- 2007 Time :11:00:12 User : user-2 Date : 24-10- 2007 Time :11:00:12 User : user-2 Date : 24-10- 2007 Time :11:00:12 User : user-3 Date : 24-10- 2007 Time :11:00:12 User : user-3 Date : 24-10- 2007 Time :11:00:12 Versione-2 Versione-3 Versione-4 16. Cosa otteniamo? Un posto dove memorizzare le varie versioni del codice (e tutti i documenti correlati) Possibilit di tornare indietro in caso di errore e tracciare le modifiche Codice sempre aggiornato Sviluppo parallelo facilitato 17. 40 anni di versioning SCCS & RCS ('70) CVS (2006) Subversion (2001) GIT (2005) 18. SCCS e RCS SCSS: Rilasciato nel 1972, proprietario Enorme successo Base di tutti gli altri sistemi RCS: Rilasciato nel 1983, free software Lavora solo su singoli file Sintassi complessa 19. CVS Basato su (RCS) con informazioni addizionali Presenta per alcune lacune, tra le quali: Supporta solo file di testo Numerazione separata per ogni file Impossibile rinominare i file 20. SVN Subversion, SVN per gli amici, un'evoluzione di CVS E' open source e gratuito (Apache Licence) E' molto diffuso E' multipiattaforma E' integrato in vari IDE 21. DRCS: Hg e Git Con l'avvento di Internet, si sviluppano i Distributed Revision Control System. Sfruttano le nuove caratteristiche dei sistemi e la rete. I pi noti sono Mercurial (Hg per gli amici) e Git. Basati su un software proprietario chiamato Bitkeeper (ma sono entrambi open source) 22. DRCS perch meglio? Git SVN Si pu lavorare offline, perch il sistema locale Se non c' rete non si pu lavorare (e si piange amaramente) Si pu portare il lavoro in una chiavetta No, non si pu Creazione semplice di una diramazione sperimentale Creare diramazioni complicato Setup semplice Occorre installare o appoggiarsi a un server Non c' un deposito centrale e di riferimento (anche se ci si pu accordare). Tutti hanno la copia di tutto. Il server centrare contiene tutte la modifiche. Il download iniziale potrebbe essere di grandi dimensioni 23. Glossario Repository (deposito) Un insieme di oggetti (file) e i riferimenti necessari. Pu essere online o offline Clone (solo git) L'atto di duplicare localmente un repository Commit (lett. 'impegno', ma qui 'consegna') Invio delle modifiche effettuate al repository Checkout Copia o ripristino di una particolare versione del progetto 24. GIT il funzionamento GIT identifica tre possibili 'stati' per ogni file del progetto a cui si sta lavorando Working Copy Sono i file a cui state lavorando, che potete modificare liberamente Staging Area I file che avete modificato e che avete intenzione di committare nel progetto definitivo Commit I file modificati 25. Un esempio pi pratico Vedremo il sistema applicato alla pratica Non useremo un programma, dato che funziona per tutti i tipi di file (al meglio con i file di testo) Si presume che abbiate gi installato Git (ne parleremo separatamente) 26. Ciao, sono Bob Ciao, sono Bob 27. Pentitevi, infedeli!! Pentitevi, infedeli!! 28. $mkdirlibrosacro $cdlibrosacro $gitinit 29. Capitolo1 NerdGenesi All'iniziocifuBob,che eral'origineditutto. 'capitolo1.txt'salvato 30. $gitstatus #Onbranchmaster # #Initialcommit # #Untrackedfiles: # (use"gitadd..."to includeinwhatwillbecommitted) # # chapter1.txt 31. $gitaddchapter1.txt $gitstatus #Onbranchmaster # #Initialcommit # #Changestobecommitted: # (use"gitrmcached..." tounstage) # #newfile:chapter1.txt 32. $gitcommitm Aggiungiilprimocapitolo. [master(rootcommit)8621aee] Aggiungiilprimocapitolo. 1fileschanged,1insertions(+),0 deletions() createmode100644chapter1.txt 33. Whew! Diamo un'occhiata al log per vedere cos' successo. $gitlog commit bb9c52540ec20eca6bb3aee5713fb24474959b6a Author:MarcelloMissiroli Date:SunJan2718:09:152013+0100 Reservations:start Indice del commit. Calcolato in base al nome dell'autore, alle modiche e alla data. Commento 34. E pi in dettaglio... git diff HEAD app/views/users/index.html.haml @@ -3,14 +3,15 @@ -%ul{:class=>"users"} [email protected] do |user| +%table{class: "table table-striped"} + %tr + %th{:class => @name_header}= link_to 'Nome' 35. Ciao, sono Tim Ciao, sono TimInsieme scriveremo...Insieme scriveremo... Il Librone sacro! 36. $gitremoteaddorigin git://librone/sacro.git $gitpushoriginmaster Protocolli utilizzabili: Git, ssh. http, local. 37. $gitclone git://librone/sacro.git $cdlibrosacro 38. Capitolo2 NerdCloning EpoicifuTim,che pensavacheeracosabuona Egiusta. 'capitolo2.txt'salvato 39. $gitadd'capitolo2.txt' $gitcommitmSecondocapitolo' $gitpushoriginmaster $gitpulloriginmaster $ls capitolo1.txtcapitolo2.txt 40. $gitcommitm'Terzocapitolo' $gitcommitm'Capitolobello' $gitcommitm'Capitolonuovo' $gitcommitm'Quartocapitolo' $gitcommitm'Nuoveidee' $gitcommitm'Conquista' 41. Branching merging - conflitti Finora tutte le modifiche confluiscono in un unico prodotto finale Pu essere necessario lavorare su versioni separate dei file per evitare di sporcare il lavoro degli altri (o per altri motivi) E' opportuno creare dei branch (diramazioni) sulle quali lavorare in piena libert 42. Branching merging - conflitti Il modo consigliato di lavoro proprio questo: 1) Branch & Edit Lavorate su una versione separata del codice 2) Merge Risincronizzarsi col ramo principale e risolvere conflitti 3) Commit Inviare le modifiche al repository centrale 43. $gitbcomandamenti $gitbranch master *comandamenti 44. $gitcheckoutbcomandamenti $gitaddcomandamenti.txt $gitcommitmInizio comandamenti. $ls capitolo1.txt capitolo2.txt comandamenti.txt $gitcheckoutmaster $ls capitolo1.txt capitolo2.txt 45. $gitcheckoutcomandamenti $gitcommitmPrimo comandamento $gitcommitmSecondo comandamento $gitcheckoutmaster $gitmergecommandments 46. master mastermaster comandamenti master 47. master mastermaster comandamenti masterprecetti 48. Le branch sono utili ...ma possono diventare complicate da gestire! 49. $gitcheckoutmaster $gitpulloriginmaster $gitmergecomandamenti AutomergingCapitolo1.txt CONFLICT(content): MergeconflictinCapitolo1.txt Automaticmergefailed; fixconflictsandthen committheresult. 50. $comandamenti:Capitolo1.txt Commit? Discard?Commit! 51. Fork! 52. $gitremoteaddlibroditim git://libroditim/librone.git $gitpushlibroditimmaster 53. * Installazione * GitHub * Demo project Next: Workshop 54. GIT Altri Links Netbeans: http://www.netbeans.org GIT: Repository pubblici online https://github.com/ https://bitbucket.org/ codeschool: http://try.github.com/levels/1/challenges/1 The Git Book http://git-scm.com/book 55. Grazie Con il contributo di Anil GuptaAnil Gupta (www.guptaanil.com) Pete Nicholls (github.com/Aupajo) Armando Fox Questo documento dotato di licenza CreativeCommonQuesto documento dotato di licenza CreativeCommon BY-SA 3.0BY-SA 3.0 http://creativecommons.org/licenses/by-sa/3.0/deed.ithttp://creativecommons.org/licenses/by-sa/3.0/deed.it