1. CFGS Desenvolupament d'aplicacions Web
M8 - Desplegament d'aplicacions web
UF4 Control de versions i
documentació
Git
Xavier Sala Pujolar
Institut Cendrassos
2. ●
Alguns problemes dels sistemes centralitzats
són:
–
Cal estar 'online' per crear branques o
veure les diferències
La gent que treballa
amb portàtils tendeix
a estar temps sense
connexió
–
Els pedaços es poden desactualitzar
ràpidament
Desenvolupament d'Aplicacions Web
3. Control de versions distribuïts
●
La idea fonamental d'aquests sistemes és:
Tothom té una còpia del
repositori
Es poden enviar i
rebre canvis de
qualsevol repositori
Distribuïts
Desenvolupament d'Aplicacions Web
4. 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
5. Versions
●
GIT no guarda els canvis sinó que fa un
“spapshot” de tot
Versió 1
Això no és el
més habitual
en els VCS
Versió 2
Versió 3
Versió 4
Els fitxers
sense canvis es
guarden com
enllaços
Desenvolupament d'Aplicacions Web
6. 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
7. 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
8. Senzill
●
Git funciona d'una forma semblant que els
sistemes més populars:
$ git
add
superprograma.java
A través dels
paràmetres diem què
volem fer
Es fa servir el mateix
executable per tot
Desenvolupament d'Aplicacions Web
9. Incorpora ajuda...
●
Es pot obtenir ajuda fent servir help...
Help
$ git help commit
Desenvolupament d'Aplicacions Web
10. 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
Es pot fer sense global
per tenir usuaris
diferents per projecte
S'envia sempre en tots
els commits que es
facin
Desenvolupament d'Aplicacions Web
11. 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
12. Crear un repositori
●
Tot comença quan un client importa un projecte
al repositori
REPOSITORI
Crea un directori .git en
la carpeta on estem
$ git init
Desenvolupament d'Aplicacions Web
13. Clone
●
Una forma alternativa de crear un repositori és
copiar-ne algun d'existent
REPOSITORI
REPOSITORI
SERVER
$ git clone
git://server/titit.git
Desenvolupament d'Aplicacions Web
14. Estats d'un fitxer
●
Els fitxers d'un usuari poden estar en 4 estats
checkout
add
rm
REPOSITORI
No
modificat
Modificat
add
No controlat ...
A punt
d'enviar al
repositori
commit
WORKSPACE
Desenvolupament d'Aplicacions Web
15. status
●
El paràmetre status mostra en quin estat es
troben els fitxers del directori
$ git status
Branca
# On branch master
# Changes to be committed:
#
# new file: foobar.txt
#
Preparats per
enviar
# Changes not staged for commit:
#
# modified: foo.txt
#
modificats però
que no
s'enviaran
# Untracked files:
#
# bar.txt
No control·lats
Desenvolupament d'Aplicacions Web
16. diff
●
Podem veure què hem canviat amb diff
$ git diff
No
modificat
Modificat
$ git diff --staged
Desenvolupament d'Aplicacions Web
17. Log
●
Podem veure els comentaris entre les diferents
versions amb log i history
$ git log
-p
Té moltes opcions ...
--graph
--pretty
--stat
$ git log
Desenvolupament d'Aplicacions Web
18. Ignorar fitxers
●
Es poden tenir fitxers en el directori i que GIT
no els tingui en compte definint-los a
.gitignore
Es poden fer servir
wildcards per definir
grups de fitxers
Makefile
*.class
Temp/
Tot el de dins del
directori
Desenvolupament d'Aplicacions Web
19. Commit
●
GIT genera identificadors únics en cada commit
a partir de:
L'autor, la data i el missatge
commit b650e3b831aba05fa62064e7ca02b5ee1b
Author: 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
Desenvolupament d'Aplicacions Web
20. Descartar els canvis
●
Es poden recuperar fitxers que estiguin en tres
estats diferents
Versió concreta
REPOSITORI
Treure d'staged
No
modificat
git checkout a355 file
Desfer els canvis
Modificat
git checkout -- file
STAGING AREA
git reset HEAD file
Desenvolupament d'Aplicacions Web
21. Reset
●
Una forma de desfer un commit és eliminar-lo
completament amb reset
git reset HEAD~2
RESET
Fer un reset en treball
en equip té molts
perills
Desenvolupament d'Aplicacions Web
22. Revert
●
Revert fa un nou commit que desfà els canvis
fets posteriorment
git revert a2345f402e34
REVERT
Desenvolupament d'Aplicacions Web
23. Modificar una actualització
●
GIT permet afegir coses al darrer commit fent
servir --ammend
REPOSITORI
git commit
Versió a23f45
Falta un fitxer!
git commit --amend
Desenvolupament d'Aplicacions Web
24. Etiquetar
●
●
Es poden etiquetar determinats moments
“importants” del projecte.
V1.01
Amb etiquetes anotades:
v1
$ git tag -a v1.0 -m “Primera versió”
●
O etiquetes lleugeres
$ git commit -m “Canvis en el codi”
$ git tag v1.01
Desenvolupament d'Aplicacions Web
26. Remots
●
El repositori local es pot lligar amb repositoris
remots
Freak
$ git remote
Origin
Origin
Desenvolupament d'Aplicacions Web
27. Remots
●
Es poden tenir tants “remots” com calgui...
Freak
$ git remote add freak git://g.com/a
Origin
Desenvolupament d'Aplicacions Web
28. Treballar amb els remots
●
Es pot enviar i rebre contingut dels repositoris
remots
push
Freak
pull
fetch
(no uneix)
$ git pull Origin master
Origin
Desenvolupament d'Aplicacions Web
30. Branching
●
En qualsevol projecte sempre hi ha moments en
que es vol diferir de la línia principal sense
interferir-hi...
El treball amb
branques és ràpid
master
GIT fomenta la
creació de
branches
Desenvolupament d'Aplicacions Web
31. Crear una branca
●
Una branca és un punter a un determinat
commit
HEAD
PROVA
$ git branch prova
MASTER
HEAD és un
punter a la
branca amb la
que treballem
actualment
Desenvolupament d'Aplicacions Web
32. Crear una branca
●
Si es fan commits en la branca original el
punter de la branca no es mou
HEAD
MASTER
PROVA
$ git commit -m “x”
Desenvolupament d'Aplicacions Web
33. Crear una branca
●
En qualsevol moment es pot passar a editar la
branca
MASTER
PROVA
HEAD
$ git checkout prova
Desenvolupament d'Aplicacions Web
34. Crear una branca
●
Les modificacions posteriors es faran en la
branca i no en el master
$ git commit -m “modificat”
HEAD
MASTER
PROVA
Desenvolupament d'Aplicacions Web
35. Crear una branca
●
Es pot passar d'una branca a una altra
fàcilment...
$ git checkout master
MASTER
HEAD
PROVA
Només mou el
punter HEAD
Desenvolupament d'Aplicacions Web
36. Branques
●
Es poden veure fàcilment les branques d'un
projecte i on està el HEAD...
HOTFIX
HEAD
MASTER
PROVA
$ git branch
Hotfix
* Master
Prova
Prova2
PROVA2
Desenvolupament d'Aplicacions Web
37. merge
●
Es poden barrejar branques entre elles amb
merge
HOTFIX
HEAD
MASTER
PROVA
$ git checkout master
$ git merge hotfix
PROVA2
Desenvolupament d'Aplicacions Web
38. merge
●
Es poden barrejar branques entre elles amb
merge
HOTFIX
HEAD
MASTER
PROVA
$ git checkout master
$ git merge hotfix
PROVA2
$ git branch -d hotfix
Desenvolupament d'Aplicacions Web
39. merge
●
Es pot eliminar una branca si ja no fa falta...
HOTFIX
HEAD
MASTER
PROVA
$ git branch -d hotfix
PROVA2
Desenvolupament d'Aplicacions Web
40. merge
●
La barreja de branques que hagin divergit es
crea un nou commit amb les diferències
HEAD
MASTER
PROVA
$ git merge prova
PROVA2
Desenvolupament d'Aplicacions Web
41. Conflictes
●
Es poden produir conflictes al barrejar branques
que han divergit
$ git merge prova
Auto-merging a.java
CONFLICT (content): Merge conflict in a.java
Automatic merge failed; fix conflicts and
then commit the result.
Desenvolupament d'Aplicacions Web
42. Resolució de conflictes
●
Els conflictes es poden resoldre fent servir una
eina gràfica de diferències
$ git mergetool
This 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 vimdiff
No 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
43. 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
44. Eina de resolució
●
La resolució de conflictes sempre es farà fent
servir l'eina que hem configurat
$ git mergetool
Merging:
README.md
Normal merge conflict for 'README.md':
{local}: modified file
{remote}: modified file
Hit return to start merge resolution tool (p4merge):
Desenvolupament d'Aplicacions Web
46. Treball local
●
Les ramificacions i fusions es fan en el propi
repositori.
Pyto
Origin
test
hotfix
bugfix
Les branques no es
S'hi fa referència
comsincronitzen
a Pyto/hotfix
automàticament
Desenvolupament d'Aplicacions Web
47. Treball local
●
Es fa referència a les branques amb el nom del
repositori i la branca
Pyto
Origin
test
hotfix
bugfix
Pyto/hotfix
Origin/bugfix
Desenvolupament d'Aplicacions Web
48. Treball local
●
S'han de pujar explícitament les branques als
servidors remots
Pyto
Origin
test
hotfix
hotfix
bugfix
$ git push Origin hotfix
Desenvolupament d'Aplicacions Web
49. Treball local
●
Per recuperar-ne una còpia editable s'ha de fer
servir -b per crear una branca local
Pyto
Origin
test
hotfix
hotfix
bugfix
$ git checkout -b hotfix origin/hotfix
Desenvolupament d'Aplicacions Web
50. Hooks
●
Els hooks ofereixen la possibilitat d'executar
programes quan passi alguna cosa important
commit
Hook
Post
update
Desenvolupament d'Aplicacions Web
51. Hooks
●
Els scripts es guarden en el directori hooks del
repositori
$ ls .git/hooks
Applypatch-msg post-commit post-update
pre-commit update commit-msg
post-receive pre-applypatch pre-rebase
●
Es poden fer scripts en diferents llenguatges:
bash, Perl, Python, Ruby... i se'ls hi pot fer
qualsevol cosa
Desenvolupament d'Aplicacions Web
53. GIT Book
●
Hi ha moltes més opcions que podeu veure en
el llibre lliure sobre GIT
Versió en anglès
http://git-scm.com/book
Versió en francès
http://git-scm.com/book/fr
Versió en català (parcial)
http://git-scm.com/book/ca
Versió en castellà (parcial)
http://git-scm.com/book/es
Desenvolupament d'Aplicacions Web