Git

Post on 20-Jan-2015

219 views 9 download

description

Introducció al sistema de control de versions de programari Git

Transcript of Git

Xavier Sala PujolarInstitut Cendrassos

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

Git

UF4 Control de versions i documentació

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ó

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

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...

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

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

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

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

Desenvolupament d'Aplicacions Web

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

$ git help commit

Help

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 frede@aqui.com

S'envia sempre en tots els commits que es

facin

Es pot fer sense global per tenir usuaris

diferents per projecte

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

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

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

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

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

Desenvolupament d'Aplicacions Web

diff● Podem veure què hem canviat amb diff

$ git diff

No modificat

Modificat

$ git diff --staged

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

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

Desenvolupament d'Aplicacions Web

Commit● GIT genera identificadors únics en cada commit

a partir de:

commit b650e3b831aba05fa62064e7ca02b5ee1bAuthor: xavier <fsalaDos@xtec.cat>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

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

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

Desenvolupament d'Aplicacions Web

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

fets posteriorment

git revert a2345f402e34

REVERT

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!

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

Desenvolupament d'Aplicacions Web

Desenvolupament d'Aplicacions Web

Remots● El repositori local es pot lligar amb repositoris

remots

$ git remoteOrigin

Origin

Freak

Desenvolupament d'Aplicacions Web

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

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

Origin

Freak

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)

Desenvolupament d'Aplicacions Web

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

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

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

Desenvolupament d'Aplicacions Web

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

branca

$ git checkout prova

HEADPROVA

MASTER

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

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

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

Desenvolupament d'Aplicacions Web

merge● Es poden barrejar branques entre elles amb

merge

HEAD

PROVA

MASTER

PROVA2

HOTFIX

$ git checkout master$ git merge hotfix

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

Desenvolupament d'Aplicacions Web

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

PROVA

PROVA2

HOTFIX

$ git branch -d hotfix

HEAD

MASTER

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

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.

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

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...

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

Desenvolupament d'Aplicacions Web

Eina de resolució

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

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

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

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

Desenvolupament d'Aplicacions Web

Hooks● Els hooks ofereixen la possibilitat d'executar

programes quan passi alguna cosa important

commit

HookPost

update

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

Desenvolupament d'Aplicacions Web

Hooks● Es habitual actualitzar el programari d'una web

al actualitzar el repositori

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