Git

53
Xavier Sala Pujolar Institut Cendrassos CFGS Desenvolupament d'aplicacions Web M8 - Desplegament d'aplicacions web Git UF4 Control de versions i documentació

description

Introducció al sistema de control de versions de programari Git

Transcript of Git

Page 1: Git

Xavier Sala PujolarInstitut Cendrassos

CFGS Desenvolupament d'aplicacions Web M8 - Desplegament d'aplicacions web

Git

UF4 Control de versions i documentació

Page 2: Git

Desenvolupament d'Aplicacions Web

● Alguns problemes dels sistemes centralitzats són:

– Cal estar 'online' per crear branques o veure les diferències

– Els pedaços es poden desactualitzar ràpidament

La gent que treballa amb portàtils tendeix a estar temps sense

connexió

Page 3: Git

Desenvolupament d'Aplicacions Web

Control de versions distribuïts● La idea fonamental d'aquests sistemes és:

Tothom té una còpia del repositori

Distribuïts

Es poden enviar i rebre canvis de

qualsevol repositori

Page 4: Git

Desenvolupament d'Aplicacions Web

Es pot simular un punt central● No hi ha un repositori central però es pot

“simular” fàcilment

En realitat no són centrals perquè

podem descarregar de qualsevol dels

altres...

Page 5: Git

Desenvolupament d'Aplicacions Web

Versions● GIT no guarda els canvis sinó que fa un

“spapshot” de tot

Això no és el més habitual en els VCS

Versió 1

Versió 2

Versió 3

Versió 4

Els fitxers sense canvis es guarden com

enllaços

Page 6: Git

Desenvolupament d'Aplicacions Web

Operacions locals● Al tenir un repositori la majoria de les

operacions són locals

Menys ús de la xarxa i per tant més velocitat

Page 7: Git

Desenvolupament d'Aplicacions Web

Integritat● Tot el que passa genera una signatura SHA-1

que servirà per comprovar-ne la integritat

commit ca82a6dff817ec66f44342007202690a93763949

commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7

commit a11bef06a3f659402fe7563abf99ad00de2209e6

Page 8: Git

Desenvolupament d'Aplicacions Web

Senzill● Git funciona d'una forma semblant que els

sistemes més populars:

$ git add superprograma.java

Es fa servir el mateix executable per tot

A través dels paràmetres diem què

volem fer

Page 9: Git

Desenvolupament d'Aplicacions Web

Incorpora ajuda...● Es pot obtenir ajuda fent servir help...

$ git help commit

Help

Page 10: Git

Desenvolupament d'Aplicacions Web

Personalització● La primera cosa que cal fer en GIT és definir la

identitat de l'usuari

$ git config --global user.name "Frederic"$ git config --global user.email [email protected]

S'envia sempre en tots els commits que es

facin

Es pot fer sense global per tenir usuaris

diferents per projecte

Page 11: Git

Desenvolupament d'Aplicacions Web

Config● El paràmetre 'config' es fa servir per

personalitzar el funcionament de GIT

$ git config --global core.editor joe

L'editor que es farà servir quan faci falta que

escrivim un missatge

$ git config --list

Page 12: Git

Desenvolupament d'Aplicacions Web

Crear un repositori● Tot comença quan un client importa un projecte

al repositori

REPOSITORI

$ git init

Crea un directori .git en la carpeta on estem

Page 13: Git

Desenvolupament d'Aplicacions Web

Clone● Una forma alternativa de crear un repositori és

copiar-ne algun d'existent

REPOSITORI

$ git clone git://server/titit.git

REPOSITORI

SERVER

Page 14: Git

Desenvolupament d'Aplicacions Web

Estats d'un fitxer● Els fitxers d'un usuari poden estar en 4 estats

No modificat

Modificat

A punt d'enviar al repositori

WORKSPACE

add

commit

checkout

No controlat ...

add

REPOSITORIrm

Page 15: Git

Desenvolupament d'Aplicacions Web

status● El paràmetre status mostra en quin estat es

troben els fitxers del directori

$ git status

# On branch master

# Changes to be committed:## new file: foobar.txt#

# Changes not staged for commit:## modified: foo.txt#

# Untracked files:## bar.txt

Branca

Preparats per enviar

modificats però que no

s'enviaran

No control·lats

Page 16: Git

Desenvolupament d'Aplicacions Web

diff● Podem veure què hem canviat amb diff

$ git diff

No modificat

Modificat

$ git diff --staged

Page 17: Git

Desenvolupament d'Aplicacions Web

Log● Podem veure els comentaris entre les diferents

versions amb log i history

$ git log

-p --stat

--pretty

--graph

Té moltes opcions ... $ git log

Page 18: Git

Desenvolupament d'Aplicacions Web

Ignorar fitxers● Es poden tenir fitxers en el directori i que GIT

no els tingui en compte definint-los a .gitignore

Makefile

*.class

Temp/

Es poden fer servir wildcards per definir

grups de fitxers

Tot el de dins del directori

Page 19: Git

Desenvolupament d'Aplicacions Web

Commit● GIT genera identificadors únics en cada commit

a partir de:

commit b650e3b831aba05fa62064e7ca02b5ee1bAuthor: xavier <[email protected]>Date: Wed Oct 10 08:45:12 2013 -0100

Modificada la funció de suma

Ho empaqueta tot amb fent un checksum

L'autor, la data i el missatge

Page 20: Git

Desenvolupament d'Aplicacions Web

Descartar els canvis● Es poden recuperar fitxers que estiguin en tres

estats diferentsREPOSITORI

git checkout -- fileSTAGING AREA

Modificat

No modificat

git reset HEAD file

git checkout a355 file

Treure d'staged

Versió concreta

Desfer els canvis

Page 21: Git

Desenvolupament d'Aplicacions Web

Reset● Una forma de desfer un commit és eliminar-lo

completament amb reset

Fer un reset en treball en equip té molts

perills

git reset HEAD~2

RESET

Page 22: Git

Desenvolupament d'Aplicacions Web

Revert● Revert fa un nou commit que desfà els canvis

fets posteriorment

git revert a2345f402e34

REVERT

Page 23: Git

Desenvolupament d'Aplicacions Web

Modificar una actualització● GIT permet afegir coses al darrer commit fent

servir --ammend

git commit --amend

REPOSITORIgit commit

Versió a23f45

Falta un fitxer!

Page 24: Git

Desenvolupament d'Aplicacions Web

Etiquetar● Es poden etiquetar determinats moments

“importants” del projecte. ● Amb etiquetes anotades:

● O etiquetes lleugeres

$ git tag -a v1.0 -m “Primera versió”

v1

$ git commit -m “Canvis en el codi”$ git tag v1.01

V1.01

Page 25: Git

Desenvolupament d'Aplicacions Web

Page 26: Git

Desenvolupament d'Aplicacions Web

Remots● El repositori local es pot lligar amb repositoris

remots

$ git remoteOrigin

Origin

Freak

Page 27: Git

Desenvolupament d'Aplicacions Web

Remots● Es poden tenir tants “remots” com calgui...

$ git remote add freak git://g.com/a

Origin

Freak

Page 28: Git

Desenvolupament d'Aplicacions Web

Treballar amb els remots● Es pot enviar i rebre contingut dels repositoris

remots

$ git pull Origin master

Origin

Freakpush

pull

fetch(no uneix)

Page 29: Git

Desenvolupament d'Aplicacions Web

Page 30: Git

Desenvolupament d'Aplicacions Web

Branching● En qualsevol projecte sempre hi ha moments en

que es vol diferir de la línia principal sense interferir-hi...

master

GIT fomenta la creació de branches

El treball amb branques és ràpid

Page 31: Git

Desenvolupament d'Aplicacions Web

Crear una branca● Una branca és un punter a un determinat

commit

$ git branch prova

HEAD

PROVA

MASTER

HEAD és un punter a la

branca amb la que treballem actualment

Page 32: Git

Desenvolupament d'Aplicacions Web

Crear una branca● Si es fan commits en la branca original el

punter de la branca no es mou

$ git commit -m “x”

HEAD

PROVA

MASTER

Page 33: Git

Desenvolupament d'Aplicacions Web

Crear una branca● En qualsevol moment es pot passar a editar la

branca

$ git checkout prova

HEADPROVA

MASTER

Page 34: Git

Desenvolupament d'Aplicacions Web

Crear una branca● Les modificacions posteriors es faran en la

branca i no en el master

$ git commit -m “modificat”

HEAD PROVA

MASTER

Page 35: Git

Desenvolupament d'Aplicacions Web

Crear una branca● Es pot passar d'una branca a una altra

fàcilment...

$ git checkout master

HEAD

PROVA

MASTER

Només mou el punter HEAD

Page 36: Git

Desenvolupament d'Aplicacions Web

Branques● Es poden veure fàcilment les branques d'un

projecte i on està el HEAD...

HEAD

PROVA

MASTER

PROVA2

HOTFIX

$ git branch Hotfix* Master Prova Prova2

Page 37: Git

Desenvolupament d'Aplicacions Web

merge● Es poden barrejar branques entre elles amb

merge

HEAD

PROVA

MASTER

PROVA2

HOTFIX

$ git checkout master$ git merge hotfix

Page 38: Git

Desenvolupament d'Aplicacions Web

merge● Es poden barrejar branques entre elles amb

merge

HEAD

PROVA

MASTER

PROVA2

HOTFIX

$ git checkout master$ git merge hotfix

$ git branch -d hotfix

Page 39: Git

Desenvolupament d'Aplicacions Web

merge● Es pot eliminar una branca si ja no fa falta...

PROVA

PROVA2

HOTFIX

$ git branch -d hotfix

HEAD

MASTER

Page 40: Git

Desenvolupament d'Aplicacions Web

merge● La barreja de branques que hagin divergit es

crea un nou commit amb les diferències

HEAD

PROVA

MASTER

PROVA2$ git merge prova

Page 41: Git

Desenvolupament d'Aplicacions Web

Conflictes● Es poden produir conflictes al barrejar branques

que han divergit

$ git merge provaAuto-merging a.javaCONFLICT (content): Merge conflict in a.javaAutomatic merge failed; fix conflicts and then commit the result.

Page 42: Git

Desenvolupament d'Aplicacions Web

Resolució de conflictes● Els conflictes es poden resoldre fent servir una

eina gràfica de diferències

$ git mergetoolThis message is displayed because 'merge.tool' is not configured.See 'git mergetool --tool-help' or 'git help config' for more details.'git mergetool' will now attempt to use one of the following tools:tortoisemerge emerge vimdiffNo known merge tool is available.

Es poden fer servir diverses eines com opendiff kdiff3 tkdiff xxdiff tortoisemerge gvimdiff diffuse ecmerge p4merge araxis

vimdiff emerge

Page 43: Git

Desenvolupament d'Aplicacions Web

Resolució de conflictes● Es defineix quina eina es farà servir...

$ git config --global merge.tool p4merge

$ git config --global mergetool.p4merge.path "C:/Program Files/Perforce/p4merge.exe"

Es defineix l'eina i com s'ha de

cridar...

Page 44: Git

Desenvolupament d'Aplicacions Web

Eina de resolució

$ git mergetoolMerging:README.md

Normal merge conflict for 'README.md': {local}: modified file {remote}: modified fileHit return to start merge resolution tool (p4merge):

● La resolució de conflictes sempre es farà fent servir l'eina que hem configurat

Page 45: Git

Desenvolupament d'Aplicacions Web

Eina de resolució

Page 46: Git

Desenvolupament d'Aplicacions Web

Treball local● Les ramificacions i fusions es fan en el propi

repositori.

OriginPyto

hotfix

bugfix

test

S'hi fa referència com a Pyto/hotfixLes branques no es

sincronitzen automàticament

Page 47: Git

Desenvolupament d'Aplicacions Web

Treball local● Es fa referència a les branques amb el nom del

repositori i la branca

OriginPyto

hotfix

bugfix

test

Pyto/hotfixOrigin/bugfix

Page 48: Git

Desenvolupament d'Aplicacions Web

Treball local● S'han de pujar explícitament les branques als

servidors remots

OriginPyto

hotfix

bugfix

test

hotfix

$ git push Origin hotfix

Page 49: Git

Desenvolupament d'Aplicacions Web

Treball local● Per recuperar-ne una còpia editable s'ha de fer

servir -b per crear una branca local

OriginPyto

hotfix

bugfix

test

$ git checkout -b hotfix origin/hotfix

hotfix

Page 50: Git

Desenvolupament d'Aplicacions Web

Hooks● Els hooks ofereixen la possibilitat d'executar

programes quan passi alguna cosa important

commit

HookPost

update

Page 51: Git

Desenvolupament d'Aplicacions Web

Hooks● Els scripts es guarden en el directori hooks del

repositori

● Es poden fer scripts en diferents llenguatges: bash, Perl, Python, Ruby... i se'ls hi pot fer qualsevol cosa

$ ls .git/hooksApplypatch-msg post-commit post-update pre-commit update commit-msg post-receive pre-applypatch pre-rebase

Page 52: Git

Desenvolupament d'Aplicacions Web

Hooks● Es habitual actualitzar el programari d'una web

al actualitzar el repositori

Page 53: Git

Desenvolupament d'Aplicacions Web

GIT Book● Hi ha moltes més opcions que podeu veure en

el llibre lliure sobre GIT

http://git-scm.com/book

Versió en anglès

http://git-scm.com/book/frVersió en francès

Versió en català (parcial)http://git-scm.com/book/ca

Versió en castellà (parcial)http://git-scm.com/book/es