Git
-
Upload
xavier-sala -
Category
Documents
-
view
219 -
download
9
description
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 [email protected]
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 <[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
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