Introduzione a Git

Post on 07-Dec-2014

1,384 views 1 download

description

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

transcript

Introduzione a GIT Il sistema di Source Control distribuito

PHP User Group Friuli, 27/06/2012

STEFANO VALLE

http://www.mvassociati.it/

http://friuli.grusp.org/

Chi usa GIT?

5

COME SIAMO ARRIVATI A GIT?

7

8

CVS >> SVN

10

SVN >> GIT

Perché è diverso?

11

E’ MOLTO VELOCE

E’ Distribuito

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

PERMETTE DI LAVORARE OFFLINE

Incoraggia sviluppo non lineare

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

Come funzionano gli altri?

16

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

Come funziona GIT?

17

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

LE BASI

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

Configurare Git • Identità:

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

git config --global user.email johndoe@example.com

• Editor:

git config --global core.editor emacs

• Verifica parametri: git config --list

20

«helper» per la console

21

Disponibili anche GUI

22

PARTIAMO!

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

clone

• Clona un repository git esistente

25

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

commit

• Memorizza lo snapshot delle modifiche fatte

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

27

Struttura di un commit

28

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

status

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

30

log

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

31

DEMO 1

branch

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

nuova feature senza impattare sul lavoro corrente

33

Un po’ di internals

34

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

git branch testing

35

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

Su quale branch stiamo lavorando?

36

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

checkout

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

37

git checkout testing

38

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

DEMO 2 - BRANCHING

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

merge

41

fast-forward

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

merge

42

Non fast-forward

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

DEMO 2 – OPERAZIONI DI MERGE

L’IMPREVISTO: I CONFLITTI

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

rebase

46

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

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

Git distribuito

48

repository condiviso

sviluppatore 1 sviluppatore 2 sviluppatore 3

remote

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

49

fetch

• Scarica branch e dati da un repository remoto

50

pull

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

• pull = fetch + merge

51

push

• Invia branch e dati ad un repository remoto

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

52

DEMO 3 - REBASE

I REPOSITORY PUBBLICI

Github

55

Bitbucket

56

DEMO 4 – GIT WORKFLOW

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

58

Branches

59

Long-running branches • master

– Allineato con versione on-line

• develop – Allineato con versione in sviluppo

60

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

develop • Al termine, il branch viene cancellato

61

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

62

COMANDI UTILI

diff

• Mostra le differenze introdotte dalle modifiche non committate

64

tag

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

del progetto

65

stash

• Salva temporaneamente il contenuto della working directory, ripulendola

• Consente di cambiare branch in qualsiasi momento

66

reset

• Il comando più ambiguo! • Consente di:

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

67

revert

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

l’effetto dei commit da eliminare

68

submodule

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

• Utile per caricare librerie esterne

69

BEST PRACTICES

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

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

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

section», ...)

72

COMMIT E PUSH PRIMA DEL COLLEGA!

LAVORARE TUTTI SUL MASTER, HUH?

TESTARE IL CODICE PRIMA DI COMMITTARLO

Decidere un workflow

76

LAVORARE CON GIT E’ PIACEVOLE

Per approfondire:

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

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

78

DUBBI? DOMANDE?

http://www.hubme.in/

Grazie per l’attenzione

@stefanovalle s.valle@mvassociati.it Stefano Valle

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/