Version Control
Introduzione, principi generali e implementazione in Git
gennaio 2011
aggiornato aprile 2012
ri-aggiornato febbraio 2013
ri-ri-aggiornato aprile 2014
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...
E se non lo uso?
● E' un mondo libero, e ciascuno è libero di sbagliare
nel modo che preferisce.
● MA questo è quello che può succedere..
Metodologie di sviluppo...
● Sviluppatore singolo
● Più sviluppatori
– Sviluppo con copie multiple
– Sviluppo con copia unica
Sviluppatore singolo
#include<stdio.h>
Int main()
{
int a;
int b;
}
File.c
#include<stdio.h>
Int main()
{
int a;
}
File.c
Ieri
Oggi
Sviluppatore singolo
(Problemi)
● Difficile recuperare le versioni più vecchie
basandosi sulla data.
● Difficile stabilire le differenze tra le versioni di uno
stesso file.
Sviluppatori multipli
(Sviluppo con copia individuale)
Sviluppatore-1
Sviluppatore-2
Sviluppatore-3
PC-1
PC-2
PC-3
server
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.
Sviluppatori multipli
(Sviluppo con copia unica)
Sviluppatore-1
Sviluppatore-2
Sviluppatore-3
server
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.
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.
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.
Sviluppatore singolo
#include<stdio.h>
Int main()
{
int a;
int b;
}
File.c
#include<stdio.h>
Int main()
{
int a;
}
File.c
Ieri
Stamattina
Versione-1 Versione-2 Versione-3
#include<stdio.h>
Int main()
{
int a;
int b;
}
File.c
Stasera
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
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
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
40 anni di versioning
SCCS & RCS ('70) CVS (2006)
Subversion (2001) GIT (2005)
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
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
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
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)
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
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
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
Controllo di versione e Git
Controllo di versione e Git
Controllo di versione e Git
Controllo di versione e Git
Controllo di versione e Git
Controllo di versione e Git
Controllo di versione e Git
Controllo di versione e Git
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)
Ciao, sono
Bob
Ciao, sono
Bob
Controllo di versione e Git
Pentitevi,
infedeli!!
Pentitevi,
infedeli!!
$ mkdir librosacro
$ cd librosacro
$ git init
Capitolo 1
NerdGenesi
All'inizio ci fu Bob, che
era l'origine di tutto. 
'capitolo 1.txt' salvato
$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
#
(use "git add <file>..." to 
include in what will be committed)
#
#
chapter1.txt
$ git add chapter1.txt
$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#
(use "git rm ­­cached <file>..."
to unstage)
#
#  new file: chapter1.txt
$ git commit ­m 
“Aggiungi il primo capitolo.”
[master (root­commit) 8621aee] 
Aggiungi il primo capitolo.
1 files changed, 1 insertions(+), 0
deletions(­)
create mode 100644 chapter1.txt
 
Whew!
● Diamo un'occhiata al log per vedere cos'è successo.
● $ git log
commit 
bb9c52540ec20eca6bb3aee5713fb24474959b6a
Author: Marcello Missiroli 
<prof.missiroli@gmail.com>
Date:   Sun Jan 27 18:09:15 2013 +0100
    Reservations: start
Indice del “commit”.
Calcolato in base al nome
dell'autore, alle modiche
e alla data.
Commento
E più in dettaglio...
● git diff HEAD
app/views/users/index.html.haml
@@ -3,14 +3,15 @@
-%ul{:class=>"users"}
-@users.each do |user|
+%table{class: "table table-striped"}
+ %tr
+ %th{:class => @name_header}= link_to 'Nome'
Ciao, sono
Tim
Ciao, sono
TimInsieme scriveremo...Insieme scriveremo...
Il Librone sacro!
$ git remote add origin
git://librone/sacro.git
$ git push origin master
Protocolli utilizzabili:
Git, ssh. http, local.
$ git clone
git://librone/sacro.git
$ cd librosacro
Capitolo 2
NerdCloning
E poi ci fu Tim, che 
pensava che era cosa buona
E giusta. 
'capitolo 2.txt' salvato
$ git add 'capitolo 2.txt'
$ git commit ­m “Secondo capitolo'
$ git push origin master
$ git pull origin master
$ ls
capitolo 1.txt capitolo 2.txt 
$ git commit ­m 'Terzo capitolo'
$ git commit ­m 'Capitolo bello'
$ git commit ­m 'Capitolo nuovo'
$ git commit ­m 'Quarto capitolo'
$ git commit ­m 'Nuove idee'
$ git commit ­m 'Conquista'
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à
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
$ git ­b comandamenti
$ git branch
master
* comandamenti
$ git checkout ­b comandamenti
$ git add comandamenti.txt
$ git commit ­m “Inizio 
comandamenti.”
$ ls
capitolo 1.txt
capitolo 2.txt
comandamenti.txt
$ git checkout master
$ ls
capitolo 1.txt
capitolo 2.txt 
$ git checkout comandamenti
$ git commit ­m “Primo 
comandamento”
$ git commit ­m “Secondo 
comandamento”
$ git checkout master
$ git merge commandments
master
mastermaster
comandamenti
master
master
mastermaster
comandamenti
masterprecetti
Le branch sono utili
...ma possono diventare
complicate da gestire!
$ git checkout master
$ git pull origin master
$ git merge comandamenti
Auto­merging Capitolo 1.txt
CONFLICT (content): 
Merge conflict in Capitolo 1.txt
Automatic merge failed;
 fix conflicts and then 
commit the result.
$ <<<<<<< HEAD:Capitolo 1.txt
All'inizio ci fu Bob, che
=======
All'inizio ci fu Tim, che
>>>>>>> comandamenti:Capitolo 1.txt
Commit? Discard?Commit!
Fork!
$ git remote add libroditim
git://libroditim/librone.git
$ git push libroditim master
* Installazione
* GitHub
* Demo project
Next: Workshop
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
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

More Related Content

PDF
Introduzione a Git (ITA - 2017)
PDF
Git e GitHub - L'essenziale
PDF
Introduzione a Git
PDF
Git e GitHub
PDF
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
PPTX
Gitflow - Branching and Merging Flow for Git
PDF
Git flow Introduction
PDF
Git flow
Introduzione a Git (ITA - 2017)
Git e GitHub - L'essenziale
Introduzione a Git
Git e GitHub
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Gitflow - Branching and Merging Flow for Git
Git flow Introduction
Git flow

What's hot (20)

PDF
Pull Request (PR): A git workflow
PPTX
Git 101 for Beginners
PPTX
Présentation de git
PPTX
Jenkins CI
PPTX
CI-CD WITH GITLAB WORKFLOW
PDF
Git flow en github
PDF
GitHub Actions in action
PPT
U boot porting guide for SoC
PDF
Tutoriel GIT
PDF
Embedded Linux Kernel - Build your custom kernel
PDF
Aprendendo Git
PDF
Gitlab flow solo
PDF
Introducing GitLab (June 2018)
PDF
Git Series. Episode 3. Git Flow and Github-Flow
PDF
Git - An Introduction
PPTX
Kolla talk at OpenStack Summit 2017 in Sydney
PDF
Introduzione a Git
PDF
Introdução a Gerência de Configuração de Software
PDF
Using GitLab CI
Pull Request (PR): A git workflow
Git 101 for Beginners
Présentation de git
Jenkins CI
CI-CD WITH GITLAB WORKFLOW
Git flow en github
GitHub Actions in action
U boot porting guide for SoC
Tutoriel GIT
Embedded Linux Kernel - Build your custom kernel
Aprendendo Git
Gitlab flow solo
Introducing GitLab (June 2018)
Git Series. Episode 3. Git Flow and Github-Flow
Git - An Introduction
Kolla talk at OpenStack Summit 2017 in Sydney
Introduzione a Git
Introdução a Gerência de Configuração de Software
Using GitLab CI
Ad

Viewers also liked (20)

ODP
L'avvento del programmatore sociale
PPT
Programmazione a oggetti tramite la macchina del caffé (pt. 3)
ODP
Insegnare Agile
PDF
Ruby in 25 minuti
PPT
Corso Moodle: perché?
ODP
Uefi: l'eterna lotta tra il bene e il male
PPT
Corso Moodle: presentazione
ODP
Lo stack: tipo di dato astratto e implementazione in Java
ODP
Il ciclo for
ODP
Eccezioni in java
ODP
Investire nelle user story
PPT
Moodle: i compiti (homework)
ODP
Routing dinamico
ODP
Espressioni regolari
ODP
Introduzione a java doc
ODP
The Sequel to sql
PDF
Introduzione a GIT - Laboratorio di Web Design 2014/15
PDF
PDF
L'avvento del programmatore sociale
Programmazione a oggetti tramite la macchina del caffé (pt. 3)
Insegnare Agile
Ruby in 25 minuti
Corso Moodle: perché?
Uefi: l'eterna lotta tra il bene e il male
Corso Moodle: presentazione
Lo stack: tipo di dato astratto e implementazione in Java
Il ciclo for
Eccezioni in java
Investire nelle user story
Moodle: i compiti (homework)
Routing dinamico
Espressioni regolari
Introduzione a java doc
The Sequel to sql
Introduzione a GIT - Laboratorio di Web Design 2014/15
Ad

Similar to Controllo di versione e Git (20)

PDF
Git/Continuous Integration/Docker: la terna dello sviluppo moderno.
PDF
Git e GitHub
ODP
Introduzione al Version Control (SVN)
PDF
Docker & DevOps
PDF
Linux & Tools: per la piccola azienda e i freelance
PDF
02 linux corso pratica
PDF
Git in 5 minuti
ODP
Presentazione del Software Libero e di Ubuntu al Linux Day 25 ottobre 2014
PDF
Revisionare, tracciare, collaborare. Version control con git
PDF
GIT commands version control system and collaboration
PDF
CodingGym - Lezione 1 - Corso Linux, Android e Internet of Things
ODP
Corso linux base
PDF
Desktop searching
PDF
Emerasoft Git quickstart
PDF
Git best practices
PDF
Corso di Versioning, Configuration & Document Management
PDF
Systemd - Como Lug
ODT
Distro linux
PDF
Amministrazione base dei sistemi Linux
PDF
Systemd - Firenze LUG
Git/Continuous Integration/Docker: la terna dello sviluppo moderno.
Git e GitHub
Introduzione al Version Control (SVN)
Docker & DevOps
Linux & Tools: per la piccola azienda e i freelance
02 linux corso pratica
Git in 5 minuti
Presentazione del Software Libero e di Ubuntu al Linux Day 25 ottobre 2014
Revisionare, tracciare, collaborare. Version control con git
GIT commands version control system and collaboration
CodingGym - Lezione 1 - Corso Linux, Android e Internet of Things
Corso linux base
Desktop searching
Emerasoft Git quickstart
Git best practices
Corso di Versioning, Configuration & Document Management
Systemd - Como Lug
Distro linux
Amministrazione base dei sistemi Linux
Systemd - Firenze LUG

More from Marcello Missiroli (13)

PDF
Algorithmist guide II
PPTX
Guida del perfetto Algoritmista I
ODP
Workshop: Introduzione ad TDD
PPTX
Dal c a Java (3/3)
PPTX
Dal C a Java (2/3)
PPTX
Dal C a Java (1/3)
ODP
PPT
Sviluppo degli algoritmi
PPTX
5 stadi dello sviluppo di un gruppo
PDF
Vogliamo programmatori stupidi e pigri!
PPTX
Big O Notation
PPT
Il sistema binario
ODP
Introduzione al dns
Algorithmist guide II
Guida del perfetto Algoritmista I
Workshop: Introduzione ad TDD
Dal c a Java (3/3)
Dal C a Java (2/3)
Dal C a Java (1/3)
Sviluppo degli algoritmi
5 stadi dello sviluppo di un gruppo
Vogliamo programmatori stupidi e pigri!
Big O Notation
Il sistema binario
Introduzione al dns

Controllo di versione e Git