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

Git best practices