SlideShare a Scribd company logo
GIT – Distributed Version Control System (DVCS)
Sommario
• Breve storia di Git
• Centralized vs Distributed VCS
• Gli oggetti di Git
• Comandi Git
• Branching Model
• Git GUI Clients
• Fonti
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
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
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
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
Working Directory (come Area di Lavoro)
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
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
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
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
Comandi
Working
Directory
Staging Area
(index)
Local Repo
git add
git commit
Remote
Repo
git push
git init
git clone <url of remote repository)
Initialize
git pull
git fetch
Update
Changes
git checkoutRevert
git diff
git diff
Diff
git push
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
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
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
Fonti
• GitPro Book https://git-scm.com/book/it/v1
• Wikipedia
• Google Search
• Internet

More Related Content

PDF
PDF
Git best practices
PDF
Revisionare, tracciare, collaborare. Version control con git
PDF
Introduzione a Git
PDF
Emerasoft Git quickstart
KEY
PDF
Git for dummies
PDF
Introduzione a Git e GitLab
Git best practices
Revisionare, tracciare, collaborare. Version control con git
Introduzione a Git
Emerasoft Git quickstart
Git for dummies
Introduzione a Git e GitLab

Similar to Git (20)

PDF
Git/Continuous Integration/Docker: la terna dello sviluppo moderno.
PDF
Git e GitHub
PDF
Introduzione a Git (ITA - 2017)
PDF
Git in 5 minuti
ODP
Controllo di versione e Git
PPTX
Introduzione a git
PDF
Introduzione a Git
PDF
Introduzione a git
PDF
Git – lo stupido gestore di contenuti
PDF
Git
PDF
GIT SOTTO IL COFANO
PDF
Introduzione a GIT - Laboratorio di Web Design 2014/15
PPTX
TFS - Quale source control
PDF
Git: un'introduzione pratica
PDF
Git gestione comoda del repository
PDF
Git e GitHub - L'essenziale
PPTX
Git Flow - Un modello di branching che funziona
PDF
GIT commands version control system and collaboration
PDF
Git branching model
Git/Continuous Integration/Docker: la terna dello sviluppo moderno.
Git e GitHub
Introduzione a Git (ITA - 2017)
Git in 5 minuti
Controllo di versione e Git
Introduzione a git
Introduzione a Git
Introduzione a git
Git – lo stupido gestore di contenuti
Git
GIT SOTTO IL COFANO
Introduzione a GIT - Laboratorio di Web Design 2014/15
TFS - Quale source control
Git: un'introduzione pratica
Git gestione comoda del repository
Git e GitHub - L'essenziale
Git Flow - Un modello di branching che funziona
GIT commands version control system and collaboration
Git branching model
Ad

Git

  • 1. GIT – Distributed Version Control System (DVCS)
  • 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
  • 7. Working Directory (come Area di Lavoro)
  • 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
  • 12. Comandi Working Directory Staging Area (index) Local Repo git add git commit Remote Repo git push git init git clone <url of remote repository) Initialize git pull git fetch Update Changes git checkoutRevert git diff git diff Diff git push
  • 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