Git

417 views
342 views

Published on

Introducció al sistema de control de versions de programari Git

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
417
On SlideShare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
7
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Git

  1. 1. CFGS Desenvolupament d'aplicacions Web M8 - Desplegament d'aplicacions web UF4 Control de versions i documentació Git Xavier Sala Pujolar Institut Cendrassos
  2. 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. 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. 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. 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. 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. 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. 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. 9. Incorpora ajuda... ● Es pot obtenir ajuda fent servir help... Help $ git help commit Desenvolupament d'Aplicacions Web
  10. 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. 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. 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. 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. 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. 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. 16. diff ● Podem veure què hem canviat amb diff $ git diff No modificat Modificat $ git diff --staged Desenvolupament d'Aplicacions Web
  17. 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. 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. 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. 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. 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. 22. Revert ● Revert fa un nou commit que desfà els canvis fets posteriorment git revert a2345f402e34 REVERT Desenvolupament d'Aplicacions Web
  23. 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. 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
  25. 25. Desenvolupament d'Aplicacions Web
  26. 26. Remots ● El repositori local es pot lligar amb repositoris remots Freak $ git remote Origin Origin Desenvolupament d'Aplicacions Web
  27. 27. Remots ● Es poden tenir tants “remots” com calgui... Freak $ git remote add freak git://g.com/a Origin Desenvolupament d'Aplicacions Web
  28. 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
  29. 29. Desenvolupament d'Aplicacions Web
  30. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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
  45. 45. Eina de resolució Desenvolupament d'Aplicacions Web
  46. 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. 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. 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. 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. 50. Hooks ● Els hooks ofereixen la possibilitat d'executar programes quan passi alguna cosa important commit Hook Post update Desenvolupament d'Aplicacions Web
  51. 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
  52. 52. Hooks ● Es habitual actualitzar el programari d'una web al actualitzar el repositori Desenvolupament d'Aplicacions Web
  53. 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

×