SlideShare a Scribd company logo
1 of 33
Download to read offline
Git
A cura di Mario Vitale
System Developer & System Integrator
Napoli: NaLUG – Talk 16/05/2020
Panoramica
Git, questo sconosciuto
● Software per repository con version control
● Creato nel 2005 da Linus Torvalds
● Ottimizzato per POSIX
● Realizza un filesystem “distribuito”
Filesystem Distribuito
Filesystem:
● Non distingue i file per tipologia
● Utilizza access right propri
● I contenuti sono oggetti
● Indicizzazione propria degli oggetti
Distribuito:
● Non usa un server centralizzato
● Predisposto per la collaborazione con
terzi
Repository vs Hosting
Hands-on: installazione Git
Aggiungere il repo (se necessario):
● sudo add-apt-repository ppa:git-core/ppa
Installare Git:
● sudo apt update
● sudo apt install git
Check
● git --version
● which git
Hands-on: inizializzare un progetto
Creare la working folder:
● cd ~
● mkdir myproject
Creare il repository:
● git init
Configurare
● git config --global user.name <nome>
● git config --global user.email <email>
Analizzare:
● ls -la
● cd .git
● cd object
● ls
Creare file nella working dir:
● cd ~/myproject
● touch file1.txt
Analizzare:
● git status
● Eventualmente cartella object
Staging e check
● git add file1.txt
● cd .git/objects
● git ls-files
Commit e check
git commit
cd .git/objects
Workspaces
Workspaces e comandi
File lifecycle
Objects
Blob Tree Commit Annotated
Tag
Dentro gli objects
Hash
0a2b198f595e55060dec9f0e196c10de86f2ca1c
SHA1
Caratteristiche:
● 160 bit
● Output a 40 caratteri esadecimali: 160/4
● 2^160 combinazioni possibili
● 2^160 file possibili per repository
● SHA1 eseguito sugli oggetti, non sui file
Tree object
Costituito da:
● Permessi
● Tipo object
● Hash dell’object (contenente il file): puntatore
● Tabulazione
● Nome originale del file
Commit object
Costituito da:
● Hash dell’oggetto tree cui punta
● Nome di autore e commiter
● E-mail di autore e commiter
● Hash del commit parent (se non è un primo commit)
● Timestamp del commit in UTC
● Dati autore configurati globalmente o per progetto
Hands-on: oggetti
Check del commit:
● cd .git/objects
● git cat-file -t <hash>
● git cat-file -p <hash>
Aggiungere nuovo file
● Come prima
Analizzare:
● Come prima
Esempio struttura
Ogni oggetto ha un hash che lo identifica
I puntatori sono hash
HEAD e Master
Checkout Branch
Detached HEAD state
Merge: fast-forward (1)
Merge: fast-forward (2)
Hands-on: branch & FF merge
Check e creazione branch:
● git branch
● git branch feature1
Operare sul nuovo branch:
● git checkout feature1
● git branch
● touch file4.txt
● nano file1.txt (modificare)
● git add .
● git commit
● git log (anche i log del vecchio branch)
Merge:
● git checkout master
● git merge feature1
● git log
Merge: 3-way merge (1)
Merge: 3-way merge (2)
Hands-on: branch & 3-way merge
Creazione branch:
● git branch feature2
● nano file5.txt
● git add .
● git commit
Sul nuovo branch:
● git checkout feature2
● ls
● nano file5.txt
● git add .
● git commit
Merge:
● git checkout master
● git merge feature2
● git ls-files -s
● git cat-file <hash>
● nano file5.txt
● git add .
● git commit
● git log
Rebase (1)
Rebase (2)
Hands-on: rebase
Creazione branch:
● git branch feature3
● nano file6.txt
● git add .
● git commit
Sul nuovo branch:
● git checkout feature3
● ls
● nano file7.txt
● git add .
● git commit
● nano file8.txt
● git add .
● git commit
Rebase:
● git checkout feature3
● git rebase master
● git ls-files -s
● git cat-file <hash>
● git checkout master
● git merge feature 3
● git log
Hosting Repository
● Git pull = git fetch + git checkout
● git merge FETCH_HEAD
● Git push
● Git clone
● Download
Hands-on: repository remoto
Creazione repository remoto da locale via https:
● git push --set-upstream https://gitlab.com/username/project_name.git master
● Inserimento username
● Inserimento password
Clonazione repository remoto su locale via https:
● git clone https://gitlab.com/username/project_name.git
● cat <nomepackfile>.pack | git unpack
● Clonazione != Download
.gitignore
E.g.:
● FileName.ext
● FolderName/
● *.ext
Esclusioni
● la cartella bin/: chi clona il repository può crearsela direttamente su sistema di
produzione, copiarla non sarebbe efficiente
● le cartelle delle dipendenze: sono tipicamente grandi e possono essere soddisfatte
da chi clona il repository, copiarle non è efficiente (e.g.: node_modules/).
● i file compilati
● i log
● i file creati dal sistema operativo (e.g.: Thumbs.db o DS_Store)
Link Utili
Tool grafici:
● https://gitahead.github.io/gitahead.com/
● https://wiki.gnome.org/action/show/Apps/Gitg
Riferimenti e troubleshooting
● https://git-scm.com/
● https://ohshitgit.com/

More Related Content

Similar to Git

Grunt: automazione per sviluppatori “pigri” - WordCamp Bari 2019
Grunt: automazione per sviluppatori “pigri” - WordCamp Bari 2019Grunt: automazione per sviluppatori “pigri” - WordCamp Bari 2019
Grunt: automazione per sviluppatori “pigri” - WordCamp Bari 2019Marco Chiesi
 
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
 
Introduzione a Git e GitLab
Introduzione a Git e GitLabIntroduzione a Git e GitLab
Introduzione a Git e GitLabYefry Figueroa
 
Linux Embedded per l'automazione
Linux Embedded per l'automazioneLinux Embedded per l'automazione
Linux Embedded per l'automazioneDaniele Costarella
 
NuIEEE - Workshop de Git
NuIEEE - Workshop de GitNuIEEE - Workshop de Git
NuIEEE - Workshop de GitZé Bateira
 
Revisionare, tracciare, collaborare. Version control con git
Revisionare, tracciare, collaborare. Version control con gitRevisionare, tracciare, collaborare. Version control con git
Revisionare, tracciare, collaborare. Version control con gitFabio Alessandrelli
 
Con Aruba, a lezione di Cloud #lezione 30 - parte 2: 'GitLab e Cloud Server ...
Con Aruba, a lezione di Cloud  #lezione 30 - parte 2: 'GitLab e Cloud Server ...Con Aruba, a lezione di Cloud  #lezione 30 - parte 2: 'GitLab e Cloud Server ...
Con Aruba, a lezione di Cloud #lezione 30 - parte 2: 'GitLab e Cloud Server ...Aruba S.p.A.
 
High Performance Web Apps con PHP e Symfony 2
High Performance Web Apps con PHP  e Symfony 2High Performance Web Apps con PHP  e Symfony 2
High Performance Web Apps con PHP e Symfony 2Giorgio Cefaro
 
Git gestione comoda del repository
Git   gestione comoda del repositoryGit   gestione comoda del repository
Git gestione comoda del repositoryRoberto Polli
 
Git: un'introduzione pratica
Git: un'introduzione praticaGit: un'introduzione pratica
Git: un'introduzione praticaBabel
 
Introduzione a git
Introduzione a gitIntroduzione a git
Introduzione a gitKlab
 

Similar to Git (20)

Controllo di versione e Git
Controllo di versione e GitControllo di versione e Git
Controllo di versione e Git
 
Introduzione a Git
Introduzione a GitIntroduzione a Git
Introduzione a Git
 
Grunt: automazione per sviluppatori “pigri” - WordCamp Bari 2019
Grunt: automazione per sviluppatori “pigri” - WordCamp Bari 2019Grunt: automazione per sviluppatori “pigri” - WordCamp Bari 2019
Grunt: automazione per sviluppatori “pigri” - WordCamp Bari 2019
 
Desktop searching
Desktop searchingDesktop searching
Desktop searching
 
Emerasoft Git quickstart
Emerasoft Git quickstartEmerasoft Git quickstart
Emerasoft Git quickstart
 
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!
 
Introduzione a Git e GitLab
Introduzione a Git e GitLabIntroduzione a Git e GitLab
Introduzione a Git e GitLab
 
Linux Embedded per l'automazione
Linux Embedded per l'automazioneLinux Embedded per l'automazione
Linux Embedded per l'automazione
 
Xamarin DevOps
Xamarin DevOpsXamarin DevOps
Xamarin DevOps
 
NuIEEE - Workshop de Git
NuIEEE - Workshop de GitNuIEEE - Workshop de Git
NuIEEE - Workshop de Git
 
Revisionare, tracciare, collaborare. Version control con git
Revisionare, tracciare, collaborare. Version control con gitRevisionare, tracciare, collaborare. Version control con git
Revisionare, tracciare, collaborare. Version control con git
 
GITT (part 1 of 2)
GITT (part 1 of 2)GITT (part 1 of 2)
GITT (part 1 of 2)
 
GIT SOTTO IL COFANO
GIT SOTTO IL COFANOGIT SOTTO IL COFANO
GIT SOTTO IL COFANO
 
Introduzione a Python e GitHub
Introduzione a Python e GitHub Introduzione a Python e GitHub
Introduzione a Python e GitHub
 
Con Aruba, a lezione di Cloud #lezione 30 - parte 2: 'GitLab e Cloud Server ...
Con Aruba, a lezione di Cloud  #lezione 30 - parte 2: 'GitLab e Cloud Server ...Con Aruba, a lezione di Cloud  #lezione 30 - parte 2: 'GitLab e Cloud Server ...
Con Aruba, a lezione di Cloud #lezione 30 - parte 2: 'GitLab e Cloud Server ...
 
Introduzione a Git
Introduzione a GitIntroduzione a Git
Introduzione a Git
 
High Performance Web Apps con PHP e Symfony 2
High Performance Web Apps con PHP  e Symfony 2High Performance Web Apps con PHP  e Symfony 2
High Performance Web Apps con PHP e Symfony 2
 
Git gestione comoda del repository
Git   gestione comoda del repositoryGit   gestione comoda del repository
Git gestione comoda del repository
 
Git: un'introduzione pratica
Git: un'introduzione praticaGit: un'introduzione pratica
Git: un'introduzione pratica
 
Introduzione a git
Introduzione a gitIntroduzione a git
Introduzione a git
 

Git

  • 1. Git A cura di Mario Vitale System Developer & System Integrator Napoli: NaLUG – Talk 16/05/2020
  • 3. Git, questo sconosciuto ● Software per repository con version control ● Creato nel 2005 da Linus Torvalds ● Ottimizzato per POSIX ● Realizza un filesystem “distribuito”
  • 4. Filesystem Distribuito Filesystem: ● Non distingue i file per tipologia ● Utilizza access right propri ● I contenuti sono oggetti ● Indicizzazione propria degli oggetti Distribuito: ● Non usa un server centralizzato ● Predisposto per la collaborazione con terzi
  • 6. Hands-on: installazione Git Aggiungere il repo (se necessario): ● sudo add-apt-repository ppa:git-core/ppa Installare Git: ● sudo apt update ● sudo apt install git Check ● git --version ● which git
  • 7. Hands-on: inizializzare un progetto Creare la working folder: ● cd ~ ● mkdir myproject Creare il repository: ● git init Configurare ● git config --global user.name <nome> ● git config --global user.email <email> Analizzare: ● ls -la ● cd .git ● cd object ● ls Creare file nella working dir: ● cd ~/myproject ● touch file1.txt Analizzare: ● git status ● Eventualmente cartella object Staging e check ● git add file1.txt ● cd .git/objects ● git ls-files Commit e check git commit cd .git/objects
  • 11. Objects Blob Tree Commit Annotated Tag
  • 13. Hash 0a2b198f595e55060dec9f0e196c10de86f2ca1c SHA1 Caratteristiche: ● 160 bit ● Output a 40 caratteri esadecimali: 160/4 ● 2^160 combinazioni possibili ● 2^160 file possibili per repository ● SHA1 eseguito sugli oggetti, non sui file
  • 14. Tree object Costituito da: ● Permessi ● Tipo object ● Hash dell’object (contenente il file): puntatore ● Tabulazione ● Nome originale del file
  • 15. Commit object Costituito da: ● Hash dell’oggetto tree cui punta ● Nome di autore e commiter ● E-mail di autore e commiter ● Hash del commit parent (se non è un primo commit) ● Timestamp del commit in UTC ● Dati autore configurati globalmente o per progetto
  • 16. Hands-on: oggetti Check del commit: ● cd .git/objects ● git cat-file -t <hash> ● git cat-file -p <hash> Aggiungere nuovo file ● Come prima Analizzare: ● Come prima
  • 17. Esempio struttura Ogni oggetto ha un hash che lo identifica I puntatori sono hash
  • 23. Hands-on: branch & FF merge Check e creazione branch: ● git branch ● git branch feature1 Operare sul nuovo branch: ● git checkout feature1 ● git branch ● touch file4.txt ● nano file1.txt (modificare) ● git add . ● git commit ● git log (anche i log del vecchio branch) Merge: ● git checkout master ● git merge feature1 ● git log
  • 26. Hands-on: branch & 3-way merge Creazione branch: ● git branch feature2 ● nano file5.txt ● git add . ● git commit Sul nuovo branch: ● git checkout feature2 ● ls ● nano file5.txt ● git add . ● git commit Merge: ● git checkout master ● git merge feature2 ● git ls-files -s ● git cat-file <hash> ● nano file5.txt ● git add . ● git commit ● git log
  • 29. Hands-on: rebase Creazione branch: ● git branch feature3 ● nano file6.txt ● git add . ● git commit Sul nuovo branch: ● git checkout feature3 ● ls ● nano file7.txt ● git add . ● git commit ● nano file8.txt ● git add . ● git commit Rebase: ● git checkout feature3 ● git rebase master ● git ls-files -s ● git cat-file <hash> ● git checkout master ● git merge feature 3 ● git log
  • 30. Hosting Repository ● Git pull = git fetch + git checkout ● git merge FETCH_HEAD ● Git push ● Git clone ● Download
  • 31. Hands-on: repository remoto Creazione repository remoto da locale via https: ● git push --set-upstream https://gitlab.com/username/project_name.git master ● Inserimento username ● Inserimento password Clonazione repository remoto su locale via https: ● git clone https://gitlab.com/username/project_name.git ● cat <nomepackfile>.pack | git unpack ● Clonazione != Download
  • 32. .gitignore E.g.: ● FileName.ext ● FolderName/ ● *.ext Esclusioni ● la cartella bin/: chi clona il repository può crearsela direttamente su sistema di produzione, copiarla non sarebbe efficiente ● le cartelle delle dipendenze: sono tipicamente grandi e possono essere soddisfatte da chi clona il repository, copiarle non è efficiente (e.g.: node_modules/). ● i file compilati ● i log ● i file creati dal sistema operativo (e.g.: Thumbs.db o DS_Store)
  • 33. Link Utili Tool grafici: ● https://gitahead.github.io/gitahead.com/ ● https://wiki.gnome.org/action/show/Apps/Gitg Riferimenti e troubleshooting ● https://git-scm.com/ ● https://ohshitgit.com/