SlideShare a Scribd company logo
1 of 67
Download to read offline
GIT
BEST PRACTICES
***
MATTEO GAVAGNIN
@MACTEO
PROGRAMMA
BASI
ESEMPI
ONE TO ONE
GLOSSARIO
INTENDIAMOCI SUI TERMINI
Sistema di controllo di versione distribuito.
Gratuito ed Open Source.
Inizialmente progettato e sviluppato da Linus Torvalds per il
kernel di Linux.
REPOSITORY
Sistema di gestione del versionamento del codice. Per git può
essere remoto o locale, ma ogni utente ha almeno la propria
repository locale equivalente alla cartella contenente i file del
progetto.
COMMIT
BRANCH
Ramo contenente diversi commit.
CHECKOUT
CHECKOUT
Scelgo e mi posiziono su una branch.
git checkout
MASTER
Branch principale (e generalmente la prima creata), ma non
necessariamente quella davvero importante.
TREE
Albero contenente varie branch, che a loro volta contengono
svariati commit.
REMOTE
Copia remota della repository, ove più utenti possono pushare
le proprie modifiche ed ottenere quelle altrui.
ORIGIN
Tipico nome dell'unica remote nella maggior parte dei
progetti.
CLONE
Download in locale di un progetto da una repository remota.
FETCH
Download locale dell'elenco delle branch da un remote.
PULL
Download dei commit presenti sulla repository remota,
tipicamente effettuati da terzi. Prima di iniziare a lavorare, è
indicato fare un pull, per limitare al massimo la possibilità di
conflitti.
git pull
PUSH
Upload dei propri commit sul remote.
git push
TAG
Etichetta assegnabile ad uno specifico commit, generalmente
usato per segnalare i numeri di versione rilasciati.
Linee guida su cosa usare come tag:
SEMANTIC VERSIONING
http://semver.org
MERGE
Unione delle modifiche fatte su una branch, con quelle di
un'altra.
CONFLICT
Conflitto.
Può avvenire quando viene fatto il merge tra due branch e
queste contengono modifiche alle stesse righe di codice sullo
stesso file.
PUBLISH
Pubblicazione di una branch locale su una repository remota.
REVERT
Eliminazione delle modifiche in modo distruttivo a vari livelli:
- riga - file - più file
RESET
Annullamento distruttivo di tutte le modifiche locali fino
all'ultimo commit.
git reset --hard
STASH
Salvataggio delle modifiche locali ai file, prima di fare un
commit. Generalemente per poter cambiare branch durante
un work in progress.
DIFF
Comparazione dello stesso file tra due commit o tra un
commit e la versione in lavorazione.
REBASE
Attenzione: viene sovrascritta la storia dei commit e ne
vengono fatti di nuovi. Usare con molta cautela.
FORK
Copia di una repository, generalmente remota, generalmente
fatta per poter guadagnare privilegi di scrittura. Molto utile
per fare pull requests in progetti open source.
SUBMODULE
Sotto progetto git nidificato, con remote differente, utile per
poter gestire dipendenze del progetto principale.
PULL REQUEST
Proposta di cambiamento, composta da uno o più commit,
residenti su una fork del progetto principale. Se accettata è il
modo di contribuire a progetti open source su GitHub.
ISSUE
Problema, ticket, segnalazione.
GITHUB
http://github.com
Sito di hosting per repository git.
GITLAB
http://gitlab.com
Software open source per hosting repository git.
SOURCETREE
Software gratuito e multipiattaforma per la gestione
completa delle repository git.
http://www.sourcetreeapp.com
DISTRIBUITO
LOCAL
LOCAL ­ REMOTE
DUE LOCAL ED UN REMOTE
DUE CLIENT E DUE REMOTE
DUE CLIENT SENZA REMOTE
MESH
MUST
1 PROGETTO
1 REPOSITORY
COMMIT
Prima di ogni commit, vedere quali file sono stati modificati e
fare il revert delle modifiche inutili.
I commit sono più puliti ed è possibile evitare grossolani
errori.
DESCRIZIONI
SIGNIFICATIVE
Se usate un sistema di ticket, riportate il numero #123, ma
anche un breve testo che sarà ricercabile. Sia GitHub che
GitLab permettono di citare automaticamente issues nei
commit e viceversa.
BRANCHARE
Ogni nuova funzione ha la sua branch, che nasce e muore nel
tempo dello sviluppo della funzione. Non necessariamente
devo pusharla sulla repository remota.
MERGIARE
Con attenzione e giusta frequenza.
Faccio checkout della branch su cui voglio finiscano le
modifiche e mi tiro il commit dell'altra branch.
CONFLITTI
Mine: scelgo la versione della branch su cui sono.
Theirs: scelgo la versione dell'altra branch.
Manuale: tool esterno (editor di testo) e poi marchio come
risolto.
NIENTE PANICO
.GITIGNORE
escludere dalla repository file e cartelle: builds, dipendenze,
file generati dall'IDE, assets e
CREDENZIALI
SUBMODULES
Tutto il codice condiviso tra più progetti, se in forma di
sorgente, deve avere la propria repository ed essere incluso
come submodulo, a meno che la piattaforma su cui state
sviluppando non preveda altri sistemi di dipendenza (gems,
cocoapods, npms, ecc).
AUTENTICAZIONE
SSH oppure Username e Password con keychain, ma
NON DEVE CHIEDERVI LE
CREDENZIALI OGNI VOLTA
GITHUB
VS
GITLAB
GITHUB
+ Standard de facto
+ Completo
+ Gratis per Open Source
- Costa
GITLAB
+ Gratuito
+ Self Hosted
+ Open Source
+ Funziona bene
- Bisogna mantenerlo
CONSIGLIO
GitHub per i progetti che coinvolgono terzi, open source e con
deploy automatico (capistrano, chef, puppet, ecc).
GitLab per progetti interni su macchina locale.
SOURCETREE
GUI per git
Completo
Multipiattaforma
Gratuito
MAC
WIN
IDE
La maggior parte degli IDE include direttamente il supporto a
git, ma solo con le funzioni base.
È il miglior modo per usare git male.
ESEMPI
Creazione repository su GitHub;
Clono il progetto sulla macchina locale;
Faccio un commit iniziale;
Faccio una branch;
Faccio una modifica;
Faccio un commit;
Faccio il merge;
Altra branch;
Genero un conflitto;
Risolvo il conflitto;
Faccio il push.
PRELIMINARI
Download SourceTree
Inserire credenziali GitHub
SLIDESHARE
https://www.slideshare.net/secret/deEPMnUgEus2vY
MI TROVATE QUI
matteo.gavagnin@dimension.it
@macteo
GRAZIE

More Related Content

What's hot

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
 
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
 
Git e GitHub - L'essenziale
Git e GitHub - L'essenziale Git e GitHub - L'essenziale
Git e GitHub - L'essenziale Gemma Catolino
 
Vagrant e Docker a confronto;scegliere ed iniziare
Vagrant e  Docker a confronto;scegliere ed iniziareVagrant e  Docker a confronto;scegliere ed iniziare
Vagrant e Docker a confronto;scegliere ed iniziareDaniele Mondello
 
Livin' with Docker - dallo sviluppo alla produzione
Livin' with Docker - dallo sviluppo alla produzioneLivin' with Docker - dallo sviluppo alla produzione
Livin' with Docker - dallo sviluppo alla produzionegiacomos
 
Introduzione a Docker (parte 2 - Pratica)
Introduzione a Docker (parte 2 - Pratica)Introduzione a Docker (parte 2 - Pratica)
Introduzione a Docker (parte 2 - Pratica)Cristian Consonni
 
Architetture a Microservizi con Docker Container
Architetture a Microservizi con Docker ContainerArchitetture a Microservizi con Docker Container
Architetture a Microservizi con Docker ContainerRoberto Messora
 
Un'Infrastruttura di Sviluppo Web Enterprise Distribuita Basata su Modelli Pa...
Un'Infrastruttura di Sviluppo Web Enterprise Distribuita Basata su Modelli Pa...Un'Infrastruttura di Sviluppo Web Enterprise Distribuita Basata su Modelli Pa...
Un'Infrastruttura di Sviluppo Web Enterprise Distribuita Basata su Modelli Pa...Natale Vinto
 
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
 
Systemd - Firenze LUG
Systemd - Firenze LUGSystemd - Firenze LUG
Systemd - Firenze LUGTruelite
 
Corso Python Deltapromo - Lezione 3
Corso Python Deltapromo - Lezione 3Corso Python Deltapromo - Lezione 3
Corso Python Deltapromo - Lezione 3Paolo Ferretti
 
Introduzione a Docker (Maggio 2017) [ITA]
Introduzione a Docker (Maggio 2017) [ITA]Introduzione a Docker (Maggio 2017) [ITA]
Introduzione a Docker (Maggio 2017) [ITA]Valerio Radice
 
Google cloud: Big Data + docker = kubernetes
Google cloud: Big Data + docker = kubernetesGoogle cloud: Big Data + docker = kubernetes
Google cloud: Big Data + docker = kubernetesGiuliano Latini
 
La mia prima lezione di pozioni
La mia prima lezione di pozioniLa mia prima lezione di pozioni
La mia prima lezione di pozioniGianluca Padovani
 
Systemd - Como Lug
Systemd - Como LugSystemd - Como Lug
Systemd - Como LugTruelite
 
Git – lo stupido gestore di contenuti
Git – lo stupido gestore di contenutiGit – lo stupido gestore di contenuti
Git – lo stupido gestore di contenutiGiulio Caccin
 

What's hot (20)

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
 
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 - L'essenziale
Git e GitHub - L'essenziale Git e GitHub - L'essenziale
Git e GitHub - L'essenziale
 
Perchè Git?
Perchè Git?Perchè Git?
Perchè Git?
 
Docker & DevOps
Docker  & DevOpsDocker  & DevOps
Docker & DevOps
 
Vagrant e Docker a confronto;scegliere ed iniziare
Vagrant e  Docker a confronto;scegliere ed iniziareVagrant e  Docker a confronto;scegliere ed iniziare
Vagrant e Docker a confronto;scegliere ed iniziare
 
Emerasoft Git quickstart
Emerasoft Git quickstartEmerasoft Git quickstart
Emerasoft Git quickstart
 
Livin' with Docker - dallo sviluppo alla produzione
Livin' with Docker - dallo sviluppo alla produzioneLivin' with Docker - dallo sviluppo alla produzione
Livin' with Docker - dallo sviluppo alla produzione
 
Introduzione a Docker (parte 2 - Pratica)
Introduzione a Docker (parte 2 - Pratica)Introduzione a Docker (parte 2 - Pratica)
Introduzione a Docker (parte 2 - Pratica)
 
Architetture a Microservizi con Docker Container
Architetture a Microservizi con Docker ContainerArchitetture a Microservizi con Docker Container
Architetture a Microservizi con Docker Container
 
Un'Infrastruttura di Sviluppo Web Enterprise Distribuita Basata su Modelli Pa...
Un'Infrastruttura di Sviluppo Web Enterprise Distribuita Basata su Modelli Pa...Un'Infrastruttura di Sviluppo Web Enterprise Distribuita Basata su Modelli Pa...
Un'Infrastruttura di Sviluppo Web Enterprise Distribuita Basata su Modelli Pa...
 
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
 
Systemd - Firenze LUG
Systemd - Firenze LUGSystemd - Firenze LUG
Systemd - Firenze LUG
 
Corso Python Deltapromo - Lezione 3
Corso Python Deltapromo - Lezione 3Corso Python Deltapromo - Lezione 3
Corso Python Deltapromo - Lezione 3
 
Introduzione a Docker (Maggio 2017) [ITA]
Introduzione a Docker (Maggio 2017) [ITA]Introduzione a Docker (Maggio 2017) [ITA]
Introduzione a Docker (Maggio 2017) [ITA]
 
Google cloud: Big Data + docker = kubernetes
Google cloud: Big Data + docker = kubernetesGoogle cloud: Big Data + docker = kubernetes
Google cloud: Big Data + docker = kubernetes
 
La mia prima lezione di pozioni
La mia prima lezione di pozioniLa mia prima lezione di pozioni
La mia prima lezione di pozioni
 
Systemd - Como Lug
Systemd - Como LugSystemd - Como Lug
Systemd - Como Lug
 
Git – lo stupido gestore di contenuti
Git – lo stupido gestore di contenutiGit – lo stupido gestore di contenuti
Git – lo stupido gestore di contenuti
 

Viewers also liked

Getting started with Apache Camel - Javagruppen Copenhagen - April 2014
Getting started with Apache Camel - Javagruppen Copenhagen - April 2014Getting started with Apache Camel - Javagruppen Copenhagen - April 2014
Getting started with Apache Camel - Javagruppen Copenhagen - April 2014Claus Ibsen
 
Sys05 uso consapevole di git - beyond the basic
Sys05   uso consapevole di git - beyond the basicSys05   uso consapevole di git - beyond the basic
Sys05 uso consapevole di git - beyond the basicDotNetCampus
 
Linux Day 2015 Genova
Linux Day 2015 GenovaLinux Day 2015 Genova
Linux Day 2015 Genovamperrando
 
Git - An Introduction
Git - An IntroductionGit - An Introduction
Git - An IntroductionBehzad Altaf
 
Git基礎介紹
Git基礎介紹Git基礎介紹
Git基礎介紹Max Ma
 
Git in a nutshell
Git in a nutshellGit in a nutshell
Git in a nutshellNelson Tai
 
Software Project Management using Redmine
Software Project Management using RedmineSoftware Project Management using Redmine
Software Project Management using RedmineRitesh Tamrakar
 
Redmine - a project management system
Redmine - a project management systemRedmine - a project management system
Redmine - a project management systemCaesar Chi
 
Git 101 Presentation
Git 101 PresentationGit 101 Presentation
Git 101 PresentationScott Chacon
 
Git and GitHub
Git and GitHubGit and GitHub
Git and GitHubJames Gray
 
[NDC16] Effective Git
[NDC16] Effective Git[NDC16] Effective Git
[NDC16] Effective GitChanwoong Kim
 
Advanced Git
Advanced GitAdvanced Git
Advanced Gitsegv
 

Viewers also liked (20)

Mini git tutorial
Mini git tutorialMini git tutorial
Mini git tutorial
 
Getting started with Apache Camel - Javagruppen Copenhagen - April 2014
Getting started with Apache Camel - Javagruppen Copenhagen - April 2014Getting started with Apache Camel - Javagruppen Copenhagen - April 2014
Getting started with Apache Camel - Javagruppen Copenhagen - April 2014
 
Sys05 uso consapevole di git - beyond the basic
Sys05   uso consapevole di git - beyond the basicSys05   uso consapevole di git - beyond the basic
Sys05 uso consapevole di git - beyond the basic
 
Linux Day 2015 Genova
Linux Day 2015 GenovaLinux Day 2015 Genova
Linux Day 2015 Genova
 
GITT (part 1 of 2)
GITT (part 1 of 2)GITT (part 1 of 2)
GITT (part 1 of 2)
 
Git–SVN
Git–SVNGit–SVN
Git–SVN
 
Introduzione a git
Introduzione a gitIntroduzione a git
Introduzione a git
 
Git - An Introduction
Git - An IntroductionGit - An Introduction
Git - An Introduction
 
Anatomia di un progetto open-source
Anatomia di un progetto open-sourceAnatomia di un progetto open-source
Anatomia di un progetto open-source
 
Git基礎介紹
Git基礎介紹Git基礎介紹
Git基礎介紹
 
Git in a nutshell
Git in a nutshellGit in a nutshell
Git in a nutshell
 
Software Project Management using Redmine
Software Project Management using RedmineSoftware Project Management using Redmine
Software Project Management using Redmine
 
Redmine - a project management system
Redmine - a project management systemRedmine - a project management system
Redmine - a project management system
 
Git 101 Presentation
Git 101 PresentationGit 101 Presentation
Git 101 Presentation
 
Git and Github
Git and GithubGit and Github
Git and Github
 
Git and GitHub
Git and GitHubGit and GitHub
Git and GitHub
 
[NDC16] Effective Git
[NDC16] Effective Git[NDC16] Effective Git
[NDC16] Effective Git
 
Advanced Git
Advanced GitAdvanced Git
Advanced Git
 
Redmine
RedmineRedmine
Redmine
 
Git Tutorial 教學
Git Tutorial 教學Git Tutorial 教學
Git Tutorial 教學
 

Similar to Git best practices

CodingGym - Lezione 1 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 1 - Corso Linux, Android e Internet of ThingsCodingGym - Lezione 1 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 1 - Corso Linux, Android e Internet of ThingsMirko Mancin
 
Open Source Parallel Computing ltcsp
Open Source Parallel Computing ltcspOpen Source Parallel Computing ltcsp
Open Source Parallel Computing ltcspLaura Camellini
 
Lezione corso Base GNU/Linux
Lezione corso Base GNU/LinuxLezione corso Base GNU/Linux
Lezione corso Base GNU/LinuxAlex Palesandro
 
LinuxDay 2004 - Linux - Storia e caratteristiche vincenti - slides
LinuxDay 2004 - Linux - Storia e caratteristiche vincenti - slidesLinuxDay 2004 - Linux - Storia e caratteristiche vincenti - slides
LinuxDay 2004 - Linux - Storia e caratteristiche vincenti - slidesMaurizio Antonelli
 
PIT2012: Workshop@UniNA - Compilazione del Kernel Linux
PIT2012: Workshop@UniNA - Compilazione del Kernel LinuxPIT2012: Workshop@UniNA - Compilazione del Kernel Linux
PIT2012: Workshop@UniNA - Compilazione del Kernel LinuxMarco Ferrigno
 
Drush make vs composer
Drush make vs composer Drush make vs composer
Drush make vs composer sparkfabrik
 
Understanding Linux
Understanding LinuxUnderstanding Linux
Understanding LinuxNaLUG
 
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi LinuxAmministrazione base dei sistemi Linux
Amministrazione base dei sistemi LinuxPaolo Campegiani
 
Apache Maven - Gestione di progetti Java e build automation
Apache Maven - Gestione di progetti Java e build automationApache Maven - Gestione di progetti Java e build automation
Apache Maven - Gestione di progetti Java e build automationTiziano Serritella
 
Pacchi e pacchetti
Pacchi e pacchettiPacchi e pacchetti
Pacchi e pacchettigiallu
 

Similar to Git best practices (20)

CodingGym - Lezione 1 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 1 - Corso Linux, Android e Internet of ThingsCodingGym - Lezione 1 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 1 - Corso Linux, Android e Internet of Things
 
Open Source Parallel Computing ltcsp
Open Source Parallel Computing ltcspOpen Source Parallel Computing ltcsp
Open Source Parallel Computing ltcsp
 
Lezione corso Base GNU/Linux
Lezione corso Base GNU/LinuxLezione corso Base GNU/Linux
Lezione corso Base GNU/Linux
 
LinuxDay 2004 - Linux - Storia e caratteristiche vincenti - slides
LinuxDay 2004 - Linux - Storia e caratteristiche vincenti - slidesLinuxDay 2004 - Linux - Storia e caratteristiche vincenti - slides
LinuxDay 2004 - Linux - Storia e caratteristiche vincenti - slides
 
GNU Linux Programming introduction
GNU Linux Programming introductionGNU Linux Programming introduction
GNU Linux Programming introduction
 
Tools & librerie PHP
Tools & librerie PHPTools & librerie PHP
Tools & librerie PHP
 
PIT2012: Workshop@UniNA - Compilazione del Kernel Linux
PIT2012: Workshop@UniNA - Compilazione del Kernel LinuxPIT2012: Workshop@UniNA - Compilazione del Kernel Linux
PIT2012: Workshop@UniNA - Compilazione del Kernel Linux
 
Corso linux base
Corso linux baseCorso linux base
Corso linux base
 
Distro linux
Distro linuxDistro linux
Distro linux
 
Introduzione a Docker
Introduzione a DockerIntroduzione a Docker
Introduzione a Docker
 
Drush make vs composer
Drush make vs composer Drush make vs composer
Drush make vs composer
 
Conferenza Pymaemo
Conferenza PymaemoConferenza Pymaemo
Conferenza Pymaemo
 
Understanding Linux
Understanding LinuxUnderstanding Linux
Understanding Linux
 
debian gnu linux
debian gnu linuxdebian gnu linux
debian gnu linux
 
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi LinuxAmministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
 
Apache Maven - Gestione di progetti Java e build automation
Apache Maven - Gestione di progetti Java e build automationApache Maven - Gestione di progetti Java e build automation
Apache Maven - Gestione di progetti Java e build automation
 
Pacchi e pacchetti
Pacchi e pacchettiPacchi e pacchetti
Pacchi e pacchetti
 
Introduzione ros
Introduzione rosIntroduzione ros
Introduzione ros
 
Drush make vs composer
 Drush make vs composer Drush make vs composer
Drush make vs composer
 
GNU Linux introduction
GNU Linux introductionGNU Linux introduction
GNU Linux introduction
 

Git best practices