2. Sommario
• Breve storia di Git
• Centralized vs Distributed VCS
• Gli oggetti di Git
• Comandi Git
• Branching Model
• Git GUI Clients
• Fonti
3. Breve storia di Git
Git è un software di controllo versione distribuito utilizzabile da interfaccia a riga di
comando, creato da Linus Torvalds nel 2005.
Linus Torvalds è l’autore della prima versione del Kernel Linux e coordinatore del progetto
di sviluppo dello stesso.
Linus iniziò a scrivere Git perché riteneva che i sistemi di controllo versione centralizzati
che aveva preso in considerazione (CVS, SVN,…) rendevano il lavoro difficile e lento.
Infatti una delle principali caratteristiche di Git è proprio la velocità, oltre a:
• Design Semplice
• Un forte sostegno per lo sviluppo non lineare (rami paralleli)
• Completamente distribuito
• Capacità di gestire grandi progetti come il kernel linux in modo efficiente (speed and data size)
• Licenza Free
4. Centralized vs Distributed VCS
Centralized (CVS, SVN, …) Distributed (Git, Mercurial, …)
• Singolo Repository
• Aggiungere modifiche richiede la connessione
• Impossibile inviare i cambiamenti ad un altro
sviluppatore
• Tutta la storia in un unico posto
• Ogni singolo versamento contiene solo il
Delta rispetto al precedente versamento
• Considerato non veloce come il DVCS
• Multiple Repositories
• Aggiungere modifiche NON richiede la
connessione
• Possibilità di inviare i cambiamenti ad un altro
sviluppatore
• Tutta la storia distribuita in più repository
• Ogni singolo versamento contiene TUTTO il
codice e non il Delta rispetto al precedente
• Considerato molto più veloce del CVCS
5. Gli oggetti Git
• Branch
• HEAD
• Tag
Riferimenti, Puntatori ad una commit
• SHA-1
• Commit Singola versione dell’intero progetto (All Files,no Delta)
• Repository
Che sia Remoto o Locale contiene
tutta la storia, tutti gli oggetti e tutte le versioni del progetto
• Patch Aggiornare repository remoti non connessi
• File File che compongono il nostro progetto
• Working Dir Area di Lavoro, nonché un’immagine di una commit
• Staging Area cache, area di appoggio prima di aggiungerli nel repository
Secure Hash Algorithm, identifica la singola commit e mantiene integro il
repository
6. File Status LifeCycle
• Staged: File pronti per il prossimo commit
UnTracked UnModified Modified Staged
Add File (git add)
Remove File (git rm)
Edit File
Stage File (git add)
Commit File (git commit)
• Untracked: File presenti nella working
directory che non sono stati aggiunti
né alla staging area né al repository
• Unmodified:File tracciati ma non modificati
• Modified: File tracciati e modificati
8. Commit e SHA-1 (b17edbf214e7d724c70b5634b2f1b2fba40f5dcd)
Inizio Progetto proj_1
Aggiunto il file_A
Modificata la funzione X
Modifica main.c
• La commit equivale ad una copia della working directory
• SHA-1 è un codice di 160bit ed identifica in modo univoco l’oggetto commit
b17edbf2
a15efda1
c14ddaa1
abb1fede
Time
9. Riferimenti (Branch, HEAD, Tag)
Inizio Progetto proj_1
Aggiunto il file_A
Modificata la funzione X
Modifica main.c
• Gli oggetti Branch, Head e Tag sono dei Link(riferimenti, puntatori) ad una commit
b17edbf2
a15efda1
c14ddaa1
abb1fede develop
Ver 1.0
master
Time
10. master
Working Directory(come Immagine di una Commit)
In Git non esistono tante directory come nell’esempio precedente, ma un’unica directory chiamata
Working Directory che viene modificata quando spostiamo il riferimento HEAD ad una determinata
commit con il comando checkout.
Inizio Progetto proj_1
Aggiunto il file_A
Modificata la funzione X
Modifica main.c
b17edbf2
a15efda1
c14ddaa1
abb1fede develop
Ver 1.0
Time
11. Repository
Un Repository Git è una cartella nascosta chiamata .git presente nella working directory del progetto
che contiene tutti gli oggetti elencati in precedenza
master
b17edbf2
a15efda1
c14ddaa1
abb1fede develop
Ver 1.0
Hotfix_1
Time
13. Bugfixes from
rel.branch
may be
continuously
merged back
into develop
hotfix
Branching Model (parallelizzare)
Time
1
Crea Directory
2
>git init/clone
master
3
Ver 0.1
DevelopFeature_1Feature_2 Release-1.0
Ver 1.0
Release-2.0
Ver 2.0
> git branch develop ( or git checkout –b develop)
> git checkout –b feature_X
Ver 0.2> git merge
> git merge
> git checkout –b release_X
> git merge
Start of
release
branch for
1.0
Only
bugfixes!
Severe bug
fixed for
production
Incorporate
hotfix in
develop
Finish of
release
branch for
1.0
Develop
features
for next
rel 2.0
14. Utilizzo di Git in un progetto
Supponiamo di avere un progetto composto da vari SW sviluppati tra i siti aziendali e da un subfornitore
Repository
«blessed»
DEV_2DEV_1 DEV_4DEV_3
FEAT_1 FEAT_2 FEAT_1 FEAT_2
Repository
«Integrazione»
FEAT_1 FEAT_2
Fornitore
gitclone
gitclone
clone
clone
clone
clone
clone
clone
clone
clone/fetch
clone/fetch
push
push
push
push
push
push
push
push
SVN
Aziendale
patch
15. Git GUI Client
• https://git-scm.com/download/gui/linux troviamo tutte le GUI presenti per i sistemi operativi Mac,
Windows e Linux
• Gitk (Linux)
• SourceTree (Mac, Windows)
• Git cola (Linux)
• Smart Git https://www.syntevo.com/smartgit/ (Linux, Windows)
gitk SmartGit
16. Fonti
• GitPro Book https://git-scm.com/book/it/v1
• Wikipedia
• Google Search
• Internet