Introduzione & alcuni concetti avanzati
Sviluppatore dal 2003
.NET / Java
Utilizzo Git dal 2012
Appassionato di diritti umani
Software libero (senza restrizioni di utilizzo)
E' uno standard de facto nel settore
Strutturato per favorire la collaborazione
le esigenze di Linus Torvald
Struttura di nodi
Percorrendo il grafo non si può mai tornare alla partenza
Nessun nodo può essere isolato
Commit spesso, fin da subito
Ogni commit rappresenta una idea o un cambiamento
Prima del push ci si può sbizzarrire
Si può riscrivere la storia dei commit locali
Il più vecchio metodo, si lavora solo su master
Si applicano le nuove modifiche sempre in cima alle vecchie
La storia viene mantenuta solo dai commit
E---F---G *E---F---G master
/ /
A---B---C---D master
Ogni feature viene sviluppata su un branch
Ogni branch viene innestato sul master mantenendo la storia separata
E---F---G branch
/ \
A---B---C---# master
Master taggato per versioni rilasciate
Develop per build non stabili
Feature branch
#---# branch
/ \
--#---#---#---#--- develop
/ \
#-----------#--- master
Lo sviluppatore ha un repo locale e uno pubblico
Ogni repo pubblico punta allo stesso repo centrale
Un mantainer ha i diritti di scrittura sul repo principale
Il più leggero: solo master e branch
Alla fine dello sviluppo si apre una pull request
Vengono implementate le modifiche
Viene prima deployato e poi mergiato in master
Si possono usare tutti i comandi di Git
Permette di capire tutte le GUI più velocemente
Viene installata con tutte le GUI in tutte le piattaforme
Update più frequenti
Ma la linea di comando offre alcune sorprese...
Multipiattaforma
Pensato per gestire commit, branch e merge
Permette di fare stage selettivo di linea
Multipiattaforma
Pensato per gestire lo storico
Visualizza il grafico dei commit
Permette di fare il blame
[bonus] gitk --follow nome-file
Consigliato da GitHub
Presenta il repository
Usa CommonMarkdown
git add
git diff
git branch
git push
git status
git commit
git checkout
git pull
git log
git clone
git [command] --help
/ git help [command]
git show [object]
git config
Alcuni esempi pratici
git config
Gestisce configurazioni per
macchina (system), utente (global) e repository (local)
Con credential.helper=manager
usa le credenziali di windows
[bonus] crea i tuoi alias
git config --global alias.grog "log --all --decorate --graph --oneline"
git stash
Permette di salvare velocemente il proprio lavoro
Lo puoi ri-applicare su qualunque branch
pull
” VS “fetch
&merge
”pull esegue in contemporanea fetch e merge
eseguiti separatamente permettono di capire cosa è successo in remoto
indispensabile se si usa rebase o push --force
git tag
Permette di etichettare qualunque punto del log
Non viene condiviso se non esplicitato
Riferimento per usare altri comandi
git reset
Riporta la HEAD allo stato specificato
Usato per togliere dall’index modifiche aggiunte
Usato per cancellare commit non condivisi
git clean
Pulisce velocemente la working directory
git clean –f –n -d
git rebase
Da usare con molta attenzione
Rende più leggibile la storia
Sconsigliato in commit già condivisi
Aiuta i mantainer perchè i conflitti vengono risolti prima
Capita usando le GUI
Indica la working directory staccata da un branch
Aiuta a capire che si potrebbe perdere il lavoro
git commit -a -m "HeHeHe" --author "Chuck Norris <chuck@is.god>"
Ogni commit ha un committer (account usato) e un author
In contesti dove la sicurezza è necessaria potrebbe essere necessario usare firme GPG