git
DESCRIPTION
Introducció al sistema de control de versions de programari GitTRANSCRIPT
![Page 1: Git](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/1.jpg)
Xavier Sala PujolarInstitut Cendrassos
CFGS Desenvolupament d'aplicacions Web M8 - Desplegament d'aplicacions web
Git
UF4 Control de versions i documentació
![Page 2: Git](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/2.jpg)
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](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/3.jpg)
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](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/4.jpg)
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](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/5.jpg)
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](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/6.jpg)
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](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/7.jpg)
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](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/8.jpg)
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](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/9.jpg)
Desenvolupament d'Aplicacions Web
Incorpora ajuda...● Es pot obtenir ajuda fent servir help...
$ git help commit
Help
![Page 10: Git](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/10.jpg)
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](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/11.jpg)
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](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/12.jpg)
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](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/13.jpg)
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](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/14.jpg)
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](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/15.jpg)
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](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/16.jpg)
Desenvolupament d'Aplicacions Web
diff● Podem veure què hem canviat amb diff
$ git diff
No modificat
Modificat
$ git diff --staged
![Page 17: Git](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/17.jpg)
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](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/18.jpg)
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](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/19.jpg)
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](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/20.jpg)
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](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/21.jpg)
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](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/22.jpg)
Desenvolupament d'Aplicacions Web
Revert● Revert fa un nou commit que desfà els canvis
fets posteriorment
git revert a2345f402e34
REVERT
![Page 23: Git](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/23.jpg)
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](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/24.jpg)
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](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/25.jpg)
Desenvolupament d'Aplicacions Web
![Page 26: Git](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/26.jpg)
Desenvolupament d'Aplicacions Web
Remots● El repositori local es pot lligar amb repositoris
remots
$ git remoteOrigin
Origin
Freak
![Page 27: Git](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/27.jpg)
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](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/28.jpg)
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](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/29.jpg)
Desenvolupament d'Aplicacions Web
![Page 30: Git](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/30.jpg)
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](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/31.jpg)
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](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/32.jpg)
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](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/33.jpg)
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](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/34.jpg)
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](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/35.jpg)
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](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/36.jpg)
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](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/37.jpg)
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](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/38.jpg)
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](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/39.jpg)
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](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/40.jpg)
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](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/41.jpg)
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](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/42.jpg)
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](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/43.jpg)
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](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/44.jpg)
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](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/45.jpg)
Desenvolupament d'Aplicacions Web
Eina de resolució
![Page 46: Git](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/46.jpg)
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](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/47.jpg)
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](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/48.jpg)
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](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/49.jpg)
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](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/50.jpg)
Desenvolupament d'Aplicacions Web
Hooks● Els hooks ofereixen la possibilitat d'executar
programes quan passi alguna cosa important
commit
HookPost
update
![Page 51: Git](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/51.jpg)
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](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/52.jpg)
Desenvolupament d'Aplicacions Web
Hooks● Es habitual actualitzar el programari d'una web
al actualitzar el repositori
![Page 53: Git](https://reader031.vdocumento.com/reader031/viewer/2022020110/54bd89664a7959d4438b462d/html5/thumbnails/53.jpg)
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