82
Introduzione a GIT Il sistema di Source Control distribuito PHP User Group Friuli, 27/06/2012

Introduzione a Git

Embed Size (px)

DESCRIPTION

Presentazione su Git tenuta all'incontro del PHP Users Group Friuli il 27/06/2012

Citation preview

Page 1: Introduzione a Git

Introduzione a GIT Il sistema di Source Control distribuito

PHP User Group Friuli, 27/06/2012

Page 2: Introduzione a Git

STEFANO VALLE

Page 3: Introduzione a Git

http://www.mvassociati.it/

Page 4: Introduzione a Git

http://friuli.grusp.org/

Page 5: Introduzione a Git

Chi usa GIT?

5

Page 6: Introduzione a Git

COME SIAMO ARRIVATI A GIT?

Page 7: Introduzione a Git

7

Page 8: Introduzione a Git

8

CVS >> SVN

Page 9: Introduzione a Git
Page 10: Introduzione a Git

10

SVN >> GIT

Page 11: Introduzione a Git

Perché è diverso?

11

Page 12: Introduzione a Git

E’ MOLTO VELOCE

Page 13: Introduzione a Git

E’ Distribuito

Pro Git - http://git-scm.com/book

Page 14: Introduzione a Git

PERMETTE DI LAVORARE OFFLINE

Page 15: Introduzione a Git

Incoraggia sviluppo non lineare

Pro Git - http://git-scm.com/book

Page 16: Introduzione a Git

Come funzionano gli altri?

16

Pro Git - http://git-scm.com/book

Page 17: Introduzione a Git

Come funziona GIT?

17

Pro Git - http://git-scm.com/book

Page 18: Introduzione a Git

LE BASI

Page 19: Introduzione a Git

Installare Git • Debian/Ubuntu

apt-get install git-core

• RedHat/Fedora/CentOS yum install git

• Disponibile per altre distribuzioni e SO:

http://git-scm.com/downloads

19

Page 20: Introduzione a Git

Configurare Git • Identità:

git config --global user.name "John Doe"

git config --global user.email [email protected]

• Editor:

git config --global core.editor emacs

• Verifica parametri: git config --list

20

Page 21: Introduzione a Git

«helper» per la console

21

Page 22: Introduzione a Git

Disponibili anche GUI

22

Page 23: Introduzione a Git

PARTIAMO!

Page 24: Introduzione a Git

init

• Inizializza un nuovo repository all’interno della cartella corrente

• Crea la sottocartella .git che conterrà tutti i file ad uso interno di git

24

Page 25: Introduzione a Git

clone

• Clona un repository git esistente

25

Page 26: Introduzione a Git

add

• Aggiunge un nuovo file a git, che da quel momento ne terrà traccia

• Aggiunge un file modificato all’area di staging (che vediamo fra poco)

26

Page 27: Introduzione a Git

commit

• Memorizza lo snapshot delle modifiche fatte

• Obbligatorio inserire un messaggio • Identificato da hash SHA-1

27

Page 28: Introduzione a Git

Struttura di un commit

28

Page 29: Introduzione a Git

Ciclo di vita di un file

29

Non gestito Non

modificato Modificato In stage

aggiunta del file

modifica del file

staging del file

rimozione del file

commit

Page 30: Introduzione a Git

status

• Mostra lo stato in cui si trovano i file del repository

30

Page 31: Introduzione a Git

log

• Mostra la storia dei commit • Per ciascuno elenca autore e messaggio

31

Page 32: Introduzione a Git

DEMO 1

Page 33: Introduzione a Git

branch

• La killer feature di GIT! • Consente di continuare lo sviluppo su una

nuova feature senza impattare sul lavoro corrente

33

Page 34: Introduzione a Git

Un po’ di internals

34

Pro Git - http://git-scm.com/book

Page 35: Introduzione a Git

git branch testing

35

Pro Git - http://git-scm.com/book

Page 36: Introduzione a Git

Su quale branch stiamo lavorando?

36

Pro Git - http://git-scm.com/book

Page 37: Introduzione a Git

checkout

• Consente di passare da un branch all’altro • (o anche da un commit all’altro)

37

Page 38: Introduzione a Git

git checkout testing

38

Pro Git - http://git-scm.com/book

Page 39: Introduzione a Git

DEMO 2 - BRANCHING

Page 40: Introduzione a Git

merge

• Incorpora sul branch principale le modifiche fatte su un altro branch

• Assieme a branch, è un altro comando che git incentiva ad usare spesso

40

Page 41: Introduzione a Git

merge

41

fast-forward

Pro Git - http://git-scm.com/book

Page 42: Introduzione a Git

merge

42

Non fast-forward

Pro Git - http://git-scm.com/book

Page 43: Introduzione a Git

DEMO 2 – OPERAZIONI DI MERGE

Page 44: Introduzione a Git

L’IMPREVISTO: I CONFLITTI

Page 45: Introduzione a Git

rebase

• Altro modo per integrare le modifiche di un branch

• Prende linearmente tutte le modifiche fatte su un branch e le applica ad un altro

45

Page 46: Introduzione a Git

rebase

46

Pro Git - http://git-scm.com/book

Page 47: Introduzione a Git

Merge Prende gli ultimi commit e li «mette assieme», creando un nuovo commit di merge

Rebase Applica le modifiche di un branch linearmente su un nuovo branch

47

Pro Git - http://git-scm.com/book

Page 48: Introduzione a Git

Git distribuito

48

repository condiviso

sviluppatore 1 sviluppatore 2 sviluppatore 3

Page 49: Introduzione a Git

remote

• Consente di gestire repository remoti • Sincronizzandoli con il proprio repo locale

49

Page 50: Introduzione a Git

fetch

• Scarica branch e dati da un repository remoto

50

Page 51: Introduzione a Git

pull

• Scarica dati da un repository remoto e tenta di fare il merge con il branch corrente

• pull = fetch + merge

51

Page 52: Introduzione a Git

push

• Invia branch e dati ad un repository remoto

• Consente di aggiornare il repository remoto con le modifiche fatte localmente

52

Page 53: Introduzione a Git

DEMO 3 - REBASE

Page 54: Introduzione a Git

I REPOSITORY PUBBLICI

Page 55: Introduzione a Git

Github

55

Page 56: Introduzione a Git

Bitbucket

56

Page 57: Introduzione a Git

DEMO 4 – GIT WORKFLOW

Page 58: Introduzione a Git

Premessa • Usate git per qualsiasi progetto • Anche se sviluppate da soli • Anche se lavorate solo in locale

58

Page 59: Introduzione a Git

Branches

59

Page 60: Introduzione a Git

Long-running branches • master

– Allineato con versione on-line

• develop – Allineato con versione in sviluppo

60

Page 61: Introduzione a Git

Topic branches • Branch in cui sviluppare feature • Feature terminata (e testata)? merge su

develop • Al termine, il branch viene cancellato

61

Page 62: Introduzione a Git

Hotfix branches • Per bug fix / interventi veloci • Fix terminato, merge su develop • Cancellato al termine del merge • Ha una vita molto breve

62

Page 63: Introduzione a Git

COMANDI UTILI

Page 64: Introduzione a Git

diff

• Mostra le differenze introdotte dalle modifiche non committate

64

Page 65: Introduzione a Git

tag

• Consente di contrassegnare un commit • Spesso usato per identificare le versioni

del progetto

65

Page 66: Introduzione a Git

stash

• Salva temporaneamente il contenuto della working directory, ripulendola

• Consente di cambiare branch in qualsiasi momento

66

Page 67: Introduzione a Git

reset

• Il comando più ambiguo! • Consente di:

– Togliere file dallo staging – Eliminare definitivamente file dallo staging – Riavvolgere storia commit

67

Page 68: Introduzione a Git

revert

• Consente di annullare uno o più commit • Crea un nuovo commit che annulla

l’effetto dei commit da eliminare

68

Page 69: Introduzione a Git

submodule

• Consente di includere un repository git all’interno del proprio progetto git

• Utile per caricare librerie esterne

69

Page 70: Introduzione a Git

BEST PRACTICES

Page 71: Introduzione a Git

Commit • Fare commit spesso • Un commit deve inglobare un insieme

atomico di modifiche • NON lavorare N giorni in attesa di aver

finito il task! • Al massimo fare tutti i commit alla fine,

sfruttando lo staging

71

Page 72: Introduzione a Git

Testo del commit • Sommario da max 50 caratteri • Seguito (eventualmente) da descrizione

più dettagliata • Forma imperativa (es. «Add products

section», ...)

72

Page 73: Introduzione a Git

COMMIT E PUSH PRIMA DEL COLLEGA!

Page 74: Introduzione a Git

LAVORARE TUTTI SUL MASTER, HUH?

Page 75: Introduzione a Git

TESTARE IL CODICE PRIMA DI COMMITTARLO

Page 76: Introduzione a Git

Decidere un workflow

76

Page 77: Introduzione a Git

LAVORARE CON GIT E’ PIACEVOLE

Page 78: Introduzione a Git

Per approfondire:

• Pro git: http://git-scm.com/book

• http://gitref.org/ • http://gitready.com/

78

Page 79: Introduzione a Git

DUBBI? DOMANDE?

Page 80: Introduzione a Git

http://www.hubme.in/

Page 81: Introduzione a Git

Grazie per l’attenzione

@stefanovalle [email protected] Stefano Valle

Page 82: Introduzione a Git

Referenze Immagini • http://www.flickr.com/photos/boston_public_library/6323438849/ • http://www.flickr.com/photos/a03575/3632344397/

• http://www.flickr.com/photos/chiperoni/3456589962/ • http://www.flickr.com/photos/53370644@N06/4976492450 • http://www.flickr.com/photos/lululemonathletica/4911299076/ • http://www.flickr.com/photos/psi_mon/3473153641/

• http://www.flickr.com/photos/masstravel/7454482646/ • http://www.flickr.com/photos/53370644@N06/4976497160/ • http://www.flickr.com/photos/53370644@N06/4975888229/

• http://www.flickr.com/photos/53370644@N06/4976490816/

• http://www.flickr.com/photos/visualgrammar/2997271008/ • http://www.flickr.com/photos/ejcdelahoya/2504629292/ • http://www.flickr.com/photos/altuwa/3582839737 • http://www.flickr.com/photos/marine_corps/5132830788/

• http://www.flickr.com/photos/72213316@N00/5028110521/ • http://www.flickr.com/photos/stevengrayphotography/6893446706/