SlideShare a Scribd company logo
1 of 16
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

Similar to Git

Git/Continuous Integration/Docker: la terna dello sviluppo moderno.
Git/Continuous Integration/Docker: la terna dello sviluppo moderno.Git/Continuous Integration/Docker: la terna dello sviluppo moderno.
Git/Continuous Integration/Docker: la terna dello sviluppo moderno.Gerardo Di Iorio
 
Introduzione a Drupal 7 - 14/03/2013
Introduzione a Drupal 7 - 14/03/2013Introduzione a Drupal 7 - 14/03/2013
Introduzione a Drupal 7 - 14/03/2013Alessandro del Gobbo
 
Introduzione a Git (ITA - 2017)
Introduzione a Git (ITA - 2017)Introduzione a Git (ITA - 2017)
Introduzione a Git (ITA - 2017)Valerio Radice
 
Migrare da un VCS centralizzato a Git
Migrare da un VCS centralizzato a GitMigrare da un VCS centralizzato a Git
Migrare da un VCS centralizzato a GitGian Maria Ricci
 
Git Flow - Un modello di branching che funziona
Git Flow - Un modello di branching che funzionaGit Flow - Un modello di branching che funziona
Git Flow - Un modello di branching che funzionaInnoteam Srl
 
Corso di Versioning, Configuration & Document Management
Corso di Versioning, Configuration & Document ManagementCorso di Versioning, Configuration & Document Management
Corso di Versioning, Configuration & Document ManagementSalvatore Cordiano
 
Introduzione a git
Introduzione a gitIntroduzione a git
Introduzione a gitKlab
 
Development process
Development processDevelopment process
Development processEmidio Croci
 
CI CD per .Net 5? Facile con Azure Pipelines e GitHub Actions
 CI CD per .Net 5? Facile con Azure Pipelines e GitHub Actions  CI CD per .Net 5? Facile con Azure Pipelines e GitHub Actions
CI CD per .Net 5? Facile con Azure Pipelines e GitHub Actions Davide Benvegnù
 
Chi ha paura di Github? Conosciamolo meglio!
Chi ha paura di Github? Conosciamolo meglio!Chi ha paura di Github? Conosciamolo meglio!
Chi ha paura di Github? Conosciamolo meglio!Giacoma Allegretta
 
Presentazione django reminiscence
Presentazione django reminiscencePresentazione django reminiscence
Presentazione django reminiscenceAndrea Gottardi
 

Similar to Git (20)

Git/Continuous Integration/Docker: la terna dello sviluppo moderno.
Git/Continuous Integration/Docker: la terna dello sviluppo moderno.Git/Continuous Integration/Docker: la terna dello sviluppo moderno.
Git/Continuous Integration/Docker: la terna dello sviluppo moderno.
 
Git e GitHub
Git e GitHubGit e GitHub
Git e GitHub
 
Controllo di versione e Git
Controllo di versione e GitControllo di versione e Git
Controllo di versione e Git
 
GIT SOTTO IL COFANO
GIT SOTTO IL COFANOGIT SOTTO IL COFANO
GIT SOTTO IL COFANO
 
Git in 5 minuti
Git in 5 minutiGit in 5 minuti
Git in 5 minuti
 
Introduzione a Drupal 7 - 14/03/2013
Introduzione a Drupal 7 - 14/03/2013Introduzione a Drupal 7 - 14/03/2013
Introduzione a Drupal 7 - 14/03/2013
 
Docker & DevOps
Docker  & DevOpsDocker  & DevOps
Docker & DevOps
 
Introduzione a Git (ITA - 2017)
Introduzione a Git (ITA - 2017)Introduzione a Git (ITA - 2017)
Introduzione a Git (ITA - 2017)
 
Git
GitGit
Git
 
Xamarin DevOps
Xamarin DevOpsXamarin DevOps
Xamarin DevOps
 
Migrare da un VCS centralizzato a Git
Migrare da un VCS centralizzato a GitMigrare da un VCS centralizzato a Git
Migrare da un VCS centralizzato a Git
 
Git Flow - Un modello di branching che funziona
Git Flow - Un modello di branching che funzionaGit Flow - Un modello di branching che funziona
Git Flow - Un modello di branching che funziona
 
Corso di Versioning, Configuration & Document Management
Corso di Versioning, Configuration & Document ManagementCorso di Versioning, Configuration & Document Management
Corso di Versioning, Configuration & Document Management
 
DDive - 8.5.2 Xpages - L'evoluzione continua
DDive - 8.5.2 Xpages - L'evoluzione continuaDDive - 8.5.2 Xpages - L'evoluzione continua
DDive - 8.5.2 Xpages - L'evoluzione continua
 
Quickr8 Evoluzione Di Quick Place
Quickr8 Evoluzione Di Quick PlaceQuickr8 Evoluzione Di Quick Place
Quickr8 Evoluzione Di Quick Place
 
Introduzione a git
Introduzione a gitIntroduzione a git
Introduzione a git
 
Development process
Development processDevelopment process
Development process
 
CI CD per .Net 5? Facile con Azure Pipelines e GitHub Actions
 CI CD per .Net 5? Facile con Azure Pipelines e GitHub Actions  CI CD per .Net 5? Facile con Azure Pipelines e GitHub Actions
CI CD per .Net 5? Facile con Azure Pipelines e GitHub Actions
 
Chi ha paura di Github? Conosciamolo meglio!
Chi ha paura di Github? Conosciamolo meglio!Chi ha paura di Github? Conosciamolo meglio!
Chi ha paura di Github? Conosciamolo meglio!
 
Presentazione django reminiscence
Presentazione django reminiscencePresentazione django reminiscence
Presentazione django reminiscence
 

Recently uploaded

Giornata Tecnica da Piave Servizi, 11 aprile 2024 | DISCIPIO Antonio
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | DISCIPIO AntonioGiornata Tecnica da Piave Servizi, 11 aprile 2024 | DISCIPIO Antonio
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | DISCIPIO AntonioServizi a rete
 
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | CADEI Giovanni
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | CADEI GiovanniGiornata Tecnica da Piave Servizi, 11 aprile 2024 | CADEI Giovanni
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | CADEI GiovanniServizi a rete
 
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | DI DOMENICO Simone
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | DI DOMENICO SimoneGiornata Tecnica da Piave Servizi, 11 aprile 2024 | DI DOMENICO Simone
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | DI DOMENICO SimoneServizi a rete
 
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | ALBIERO Andrea
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | ALBIERO AndreaGiornata Tecnica da Piave Servizi, 11 aprile 2024 | ALBIERO Andrea
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | ALBIERO AndreaServizi a rete
 
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | SERRA Giorgio
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | SERRA GiorgioGiornata Tecnica da Piave Servizi, 11 aprile 2024 | SERRA Giorgio
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | SERRA GiorgioServizi a rete
 
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | RENZI Daniele
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | RENZI DanieleGiornata Tecnica da Piave Servizi, 11 aprile 2024 | RENZI Daniele
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | RENZI DanieleServizi a rete
 
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | ROMANO' Davide
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | ROMANO' DavideGiornata Tecnica da Piave Servizi, 11 aprile 2024 | ROMANO' Davide
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | ROMANO' DavideServizi a rete
 

Recently uploaded (7)

Giornata Tecnica da Piave Servizi, 11 aprile 2024 | DISCIPIO Antonio
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | DISCIPIO AntonioGiornata Tecnica da Piave Servizi, 11 aprile 2024 | DISCIPIO Antonio
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | DISCIPIO Antonio
 
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | CADEI Giovanni
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | CADEI GiovanniGiornata Tecnica da Piave Servizi, 11 aprile 2024 | CADEI Giovanni
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | CADEI Giovanni
 
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | DI DOMENICO Simone
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | DI DOMENICO SimoneGiornata Tecnica da Piave Servizi, 11 aprile 2024 | DI DOMENICO Simone
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | DI DOMENICO Simone
 
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | ALBIERO Andrea
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | ALBIERO AndreaGiornata Tecnica da Piave Servizi, 11 aprile 2024 | ALBIERO Andrea
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | ALBIERO Andrea
 
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | SERRA Giorgio
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | SERRA GiorgioGiornata Tecnica da Piave Servizi, 11 aprile 2024 | SERRA Giorgio
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | SERRA Giorgio
 
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | RENZI Daniele
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | RENZI DanieleGiornata Tecnica da Piave Servizi, 11 aprile 2024 | RENZI Daniele
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | RENZI Daniele
 
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | ROMANO' Davide
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | ROMANO' DavideGiornata Tecnica da Piave Servizi, 11 aprile 2024 | ROMANO' Davide
Giornata Tecnica da Piave Servizi, 11 aprile 2024 | ROMANO' Davide
 

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