GIT

Lo stupido gestore di contenuti

Introduzione & alcuni concetti avanzati

Giulio Caccin

Sviluppatore dal 2003

.NET / Java

Utilizzo Git dal 2012

Appassionato di diritti umani

Perché Git?

Software libero (senza restrizioni di utilizzo)

E' uno standard de facto nel settore

Strutturato per favorire la collaborazione


Un po' di storia

le esigenze di Linus Torvald

  • Veloce (in locale e in rete)
  • Distribuito
  • Flessibile
  • Sicuro
  • Avere i codici sorgenti

Grafo aciclico diretto

Struttura di nodi

Percorrendo il grafo non si può mai tornare alla partenza

Nessun nodo può essere isolato

Un commit (non) è per sempre

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

I “tre” stati

three states

Centralized Workflow

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
					

Feature Branch Workflow

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
					

Gitflow Workflow

Master taggato per versioni rilasciate

Develop per build non stabili

Feature branch


		    #---# branch
		   /     \
		--#---#---#---#--- develop
		 /         \
		#-----------#--- master
					

Forking Workflow

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

GitHub Flow

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

Perché la linea di comando?

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

Git e Windows

Ma la linea di comando offre alcune sorprese...

git-gui

Multipiattaforma

Pensato per gestire commit, branch e merge

Permette di fare stage selettivo di linea

gitk

Multipiattaforma

Pensato per gestire lo storico

Visualizza il grafico dei commit

Permette di fare il blame

[bonus] gitk --follow nome-file

README.md

Consigliato da GitHub

Presenta il repository

Usa CommonMarkdown

I comandi più usati

  • git add
  • git diff
  • git branch
  • git push
  • git status
  • git commit
  • git checkout
  • git pull
  • git log

Altri comandi

  • git clone
  • git [command] --help / git help [command]
  • git show [object]
  • git config

Into the Porcelain

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

DETACHED HEAD

Capita usando le GUI

Indica la working directory staccata da un branch

Aiuta a capire che si potrebbe perdere il lavoro

Breve storia sulla sicurezza


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

“Domande?”

@giuliocaccin

Link Utili

Dove ho rubato