Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Mejorando en Git
@SergiGP
Software Craftsmanship BCN
@SergiGP
Developer en Akamon
PHP & Javascript & …
aprendiz
sergigp.com
Personalización
$ vim ~/.gitconfig
$ git st
$ git ci -m ‘refactor’
$ git co master
*~
.DS_Store
.idea
Personalización
$ git ls
documentación ejemplos avanzados
Cherry Pick
$ git co feature-0002
$ git cherry-pick 0bb6886
$ git log --oneline
Mover cambios entre branches
Cherry Pick
$ git co feature-0002
$ git cherry-pick 0bb6886
$ git log --oneline
Mover cambios entre branches
Se puede hace...
Tagging
Marcar commits como importantes.
$ git tag -a v1.4 -m 'my version 1.4’ 9fceb02
$ git push origin v1.4
$ git push o...
Merge vs Rebase
Workflow con feature branches.
¿Como reintegramos las features
e n m a s t e r c u a n d o e s t á n
termin...
Merge vs Rebase
$ git co master
$ git merge feature-0001
$ git log --oneline
Merge vs Rebase
$ git co feature-0001
$ git rebase master
$ git co master
$ git rebase feature-0001
$ git log --oneline
Merge vs Rebase
$ git co HEAD~2 (nos vamos dos commits atrás)
rebasemerge
Merge vs Rebase
Merge Rebase
Historial confuso Historial más limpio
Funcionalidad
en un solo commit *
Funcionalidad
en var...
Submodules
• Repositorios dentro de repositorios
• Librerías externas en nuestro proyecto que
queremos mantener actualizad...
Submodules
• Repositorios dentro de repositorios
• Librerías externas en nuestro proyecto que
queremos mantener actualizad...
Submodules
$ git submodule add https://github.com/angular/angular.js.git js/angular
$ git clone https://github.com/myrepo
...
Hooks
• Realizar algunas acciones cuando pasa “algo” en
nuestro repositorio
• Eventos:
• applypatch-msg
• pre-applypatch
•...
Hooks (II)
Existen plantillas con ejemplos en todos los repositorios en .git/
hooks.
$ cd .git/hooks && cp pre-commit.samp...
Bisect
Manager
Developer
Bisect
- ¡Está petando producción!
Manager
Developer
Bisect
- ¡Está petando producción!
Manager
Developer
Bisect (II)
Bisect (II)
$ git bisect start
$ git bisect bad
Bisect (II)
$ git bisect start
$ git bisect bad
$ git co HEAD~8
Bisect (II)
$ git bisect start
$ git bisect bad
$ git co HEAD~8
Bisect (II)
$ git bisect start
$ git bisect bad
$ git bisect good
$ git co HEAD~8
Bisect (III)
Bisect (III)
$ git bisect bad
Bisect (III)
$ git bisect bad
Bisect (III)
$ git bisect bad
$ git bisect good
Bisect (IV)
Bisect (IV)
$ git show C4
$ git blame ficherosospechoso
Bisect (IV)
$ git show C4
$ git blame ficherosospechoso
Bisect (IV)
$ git show C4
$ git blame ficherosospechoso
$ git bisect reset
Bisect (V)
Step 1
Step 2
Step 3
Step 4
Bisect (VI)
$ git bisect [comando]
• visualize
• log [ > nombrefichero ]
• replay nombrefichero
• skip
Bisect
$ git bisect run [ script / tests / compilar… ]
$ git bisect run phpunit --exclude-group=functional
$ git bisect ru...
Gestionando remotos
pablo sergi jordi jesús eloi
A long time ago in a galaxy far, far away ….
Gestionando remotos
pablo sergi jordi jesús eloi
origin
Gestionando remotos
pablo sergi jordi jesús eloi
git push origin
feature-001
origin
Gestionando remotos
pablo sergi jordi jesús eloi
git push origin
feature-001
git pull origin
feature-001
origin
Gestionando remotos
pablo sergi jordi jesús eloi
git push origin
feature-001
git pull origin
feature-001
git ci -m
‘mejora...
Gestionando remotos
pablo sergi jordi jesús eloi
git push origin
feature-001
git pull origin
feature-001
git ci -m
‘mejora...
Gestionando remotos
pablo sergi jordi jesús eloi
git push origin
feature-001
git pull origin
feature-001
git ci -m
‘mejora...
Gestionando remotos
pablo sergi jordi jesús eloi
git push origin
feature-001
git pull origin
feature-001
git ci -m
‘mejora...
Gestionando remotos
pablo
sergi
jordi
jesús
eloi
akamon
Gestionando remotos
pablo
sergi
jordi
jesús
eloi
akamon
git push origin
feature-001
Gestionando remotos
pablo
sergi
jordi
jesús
eloi
akamon
git push origin
feature-001
Gestionando remotos
pablo
sergi
jordi
jesús
eloi
akamon
git push origin
feature-001
git pull pablo
feature-001
Gestionando remotos
pablo
sergi
jordi
jesús
eloi
akamon
git push origin
feature-001
git pull pablo
feature-001
Gestionando remotos
pablo
sergi
jordi
jesús
eloi
akamon
git push origin
feature-001
git pull pablo
feature-001
git ci -m
‘...
Gestionando remotos
pablo
sergi
jordi
jesús
eloi
akamon
git push origin
feature-001
git pull pablo
feature-001
git ci -m
‘...
Gestionando remotos
pablo
sergi
jordi
jesús
eloi
akamon
git push origin
feature-001
git pull pablo
feature-001
git ci -m
‘...
Gestionando remotos
pablo
sergi
jordi
jesús
eloi
akamon
git push origin
feature-001
git pull pablo
feature-001
git ci -m
‘...
Gestionando remotos
pablo
sergi
jordi
jesús
eloi
akamon
git push origin
feature-001
git pull pablo
feature-001
git ci -m
‘...
Gestionando remotos
pablo
sergi
jordi
jesús
eloi
akamon
git push origin
feature-001
git pull pablo
feature-001
git ci -m
‘...
Gestionando remotos
pablo
sergi
jordi
jesús
eloi
akamon
git push origin
feature-001
git pull pablo
feature-001
git ci -m
‘...
Gestionando remotos
pablo
sergi
jordi
jesús
eloi
akamon
git push origin
feature-001
git pull pablo
feature-001
git ci -m
‘...
Gestionando remotos
pablo
sergi
jordi
jesús
eloi
akamon
git push origin
feature-001
git pull pablo
feature-001
git ci -m
‘...
Gestionando remotos
pablo
sergi
jordi
jesús
eloi
akamon
git push origin
feature-001
git pull pablo
feature-001
git ci -m
‘...
Gestionando remotos
pablo
sergi
jordi
jesús
eloi
akamon
git push origin
feature-001
git pull pablo
feature-001
git ci -m
‘...
Gestionando remotos
pablo
sergi
jordi
jesús
eloi
akamon
git push origin
feature-001
git pull pablo
feature-001
git ci -m
‘...
Gestionando remotos
pablo
sergi
jordi
jesús
eloi
akamon
git push origin
feature-001
git pull pablo
feature-001
git ci -m
‘...
Gestionando remotos
pablo
sergi
jordi
jesús
eloi
akamon
git push origin
feature-001
git pull pablo
feature-001
git ci -m
‘...
Pull Requests
En un repositorio que no es tuyo (ni tienes permisos):
• Necesitas una funcionalidad que no existe
• Encuent...
Pull Requests
• Haces un fork (copia) de un repositorio
• Modificas tu copia y propones tus cambios
• El propietario los ac...
Pull Requests
• Haces un fork (copia) de un repositorio
• Modificas tu copia y propones tus cambios
• El propietario los ac...
Pull Requests
• Haces un fork (copia) de un repositorio
• Modificas tu copia y propones tus cambios
• El propietario los ac...
Pull Requests
• Haces un fork (copia) de un repositorio
• Modificas tu copia y propones tus cambios
• El propietario los ac...
Pull Requests
• Haces un fork (copia) de un repositorio
• Modificas tu copia y propones tus cambios
• El propietario los ac...
Pull Requests
• Haces un fork (copia) de un repositorio
• Modificas tu copia y propones tus cambios
• El propietario los ac...
Pull Requests
• Haces un fork (copia) de un repositorio
• Modificas tu copia y propones tus cambios
• El propietario los ac...
Pull Requests
• Haces un fork (copia) de un repositorio
• Modificas tu copia y propones tus cambios
• El propietario los ac...
Pull Requests
Pull Requests
Epic PRs
Reflog
Con log, checkout, branch y reset podemos “volver”
a cualquier commit.
Con reflog, checkout, branch y reset podemos
“...
Reflog
$ git reflog
Que son referencias en git?
HEADs, stash, tags, bisect …
$ ls -l .git/refs
$ git reflog show feature-0002
Fsck
• Si reflog no funciona… que no cunda el panico
• fsck comprueba la integridad de la BD de git.
Luego podemos recupera...
Filter branch
Git está diseñado para no perder nunca cambios
realizados… ¿Pero que pasa si queremos perderlos?
!
Filter branch
Git está diseñado para no perder nunca cambios
realizados… ¿Pero que pasa si queremos perderlos?
!
eliminar ...
Otros usos
• Documentación: Markdown + Github = WIN
• Blogging: Github Pages
• Git con imagenes: Github images diffing
Otros usos
• Documentación: Markdown + Github = WIN
• Blogging: Github Pages
• Git con imagenes: Github images diffing
Herramientas
• Hub: Wrapper de git para mejorar integración con Github
• Clientes:
• Tower
• SourceTree
• Github client
• ...
¿Preguntas?
Moltes gràcies :)
Mejorando en Git
Upcoming SlideShare
Loading in …5
×

Mejorando en Git

1,058 views

Published on

Charla en Software Craftmanship Barcelona sobre gtilidades y trucos en git. No es una introducción y se dan por sabidos los conceptos básicos como commit, push, pull...

Published in: Engineering
  • Be the first to comment

Mejorando en Git

  1. 1. Mejorando en Git @SergiGP Software Craftsmanship BCN
  2. 2. @SergiGP Developer en Akamon PHP & Javascript & … aprendiz sergigp.com
  3. 3. Personalización $ vim ~/.gitconfig $ git st $ git ci -m ‘refactor’ $ git co master *~ .DS_Store .idea
  4. 4. Personalización $ git ls documentación ejemplos avanzados
  5. 5. Cherry Pick $ git co feature-0002 $ git cherry-pick 0bb6886 $ git log --oneline Mover cambios entre branches
  6. 6. Cherry Pick $ git co feature-0002 $ git cherry-pick 0bb6886 $ git log --oneline Mover cambios entre branches Se puede hacer cherry pick de rango de commits (1.7.2+) $ git cherry-pick 0bb6886^..ab768ba Si 0bb6886 no es anterior a ab768ba git falla silenciosamente
  7. 7. Tagging Marcar commits como importantes. $ git tag -a v1.4 -m 'my version 1.4’ 9fceb02 $ git push origin v1.4 $ git push origin --tags Los tags se pushean explicitamente Pushear todos los tags $ git tag Listar todos los tags
  8. 8. Merge vs Rebase Workflow con feature branches. ¿Como reintegramos las features e n m a s t e r c u a n d o e s t á n terminadas?
  9. 9. Merge vs Rebase $ git co master $ git merge feature-0001 $ git log --oneline
  10. 10. Merge vs Rebase $ git co feature-0001 $ git rebase master $ git co master $ git rebase feature-0001 $ git log --oneline
  11. 11. Merge vs Rebase $ git co HEAD~2 (nos vamos dos commits atrás) rebasemerge
  12. 12. Merge vs Rebase Merge Rebase Historial confuso Historial más limpio Funcionalidad en un solo commit * Funcionalidad en varios commits Resolver mismos conflictos varias veces ( git rerere) A veces requiere force push
  13. 13. Submodules • Repositorios dentro de repositorios • Librerías externas en nuestro proyecto que queremos mantener actualizadas • Mantener en repos para diferentes partes del proyecto
  14. 14. Submodules • Repositorios dentro de repositorios • Librerías externas en nuestro proyecto que queremos mantener actualizadas • Mantener en repos para diferentes partes del proyecto COMPLEJIDAD ACCIDENTAL
  15. 15. Submodules $ git submodule add https://github.com/angular/angular.js.git js/angular $ git clone https://github.com/myrepo $ git submodule init $ git submodule update Otro miembro del equipo: (o pull…)
  16. 16. Hooks • Realizar algunas acciones cuando pasa “algo” en nuestro repositorio • Eventos: • applypatch-msg • pre-applypatch • post-applypath • pre-commit • prepare-commit-msg • post-commit • pre-rebase • post-checkout • post-merge • pre-recieve • update • post-recieve • post-update • pre-auto-gc • post-rewrite
  17. 17. Hooks (II) Existen plantillas con ejemplos en todos los repositorios en .git/ hooks. $ cd .git/hooks && cp pre-commit.sample pre-commit ! $ vim pre-commit howto y más detalle
  18. 18. Bisect Manager Developer
  19. 19. Bisect - ¡Está petando producción! Manager Developer
  20. 20. Bisect - ¡Está petando producción! Manager Developer
  21. 21. Bisect (II)
  22. 22. Bisect (II) $ git bisect start $ git bisect bad
  23. 23. Bisect (II) $ git bisect start $ git bisect bad $ git co HEAD~8
  24. 24. Bisect (II) $ git bisect start $ git bisect bad $ git co HEAD~8
  25. 25. Bisect (II) $ git bisect start $ git bisect bad $ git bisect good $ git co HEAD~8
  26. 26. Bisect (III)
  27. 27. Bisect (III) $ git bisect bad
  28. 28. Bisect (III) $ git bisect bad
  29. 29. Bisect (III) $ git bisect bad $ git bisect good
  30. 30. Bisect (IV)
  31. 31. Bisect (IV) $ git show C4 $ git blame ficherosospechoso
  32. 32. Bisect (IV) $ git show C4 $ git blame ficherosospechoso
  33. 33. Bisect (IV) $ git show C4 $ git blame ficherosospechoso $ git bisect reset
  34. 34. Bisect (V) Step 1 Step 2 Step 3 Step 4
  35. 35. Bisect (VI) $ git bisect [comando] • visualize • log [ > nombrefichero ] • replay nombrefichero • skip
  36. 36. Bisect $ git bisect run [ script / tests / compilar… ] $ git bisect run phpunit --exclude-group=functional $ git bisect run make howto y ejemplos
  37. 37. Gestionando remotos pablo sergi jordi jesús eloi A long time ago in a galaxy far, far away ….
  38. 38. Gestionando remotos pablo sergi jordi jesús eloi origin
  39. 39. Gestionando remotos pablo sergi jordi jesús eloi git push origin feature-001 origin
  40. 40. Gestionando remotos pablo sergi jordi jesús eloi git push origin feature-001 git pull origin feature-001 origin
  41. 41. Gestionando remotos pablo sergi jordi jesús eloi git push origin feature-001 git pull origin feature-001 git ci -m ‘mejoras rabbitmq’ origin
  42. 42. Gestionando remotos pablo sergi jordi jesús eloi git push origin feature-001 git pull origin feature-001 git ci -m ‘mejoras rabbitmq’ Eloi sube tus cambios plis origin
  43. 43. Gestionando remotos pablo sergi jordi jesús eloi git push origin feature-001 git pull origin feature-001 git ci -m ‘mejoras rabbitmq’ Eloi sube tus cambios plis NO! espera! que pusheo yo antes origin
  44. 44. Gestionando remotos pablo sergi jordi jesús eloi git push origin feature-001 git pull origin feature-001 git ci -m ‘mejoras rabbitmq’ Eloi sube tus cambios plis NO! espera! que pusheo yo antes … origin
  45. 45. Gestionando remotos pablo sergi jordi jesús eloi akamon
  46. 46. Gestionando remotos pablo sergi jordi jesús eloi akamon git push origin feature-001
  47. 47. Gestionando remotos pablo sergi jordi jesús eloi akamon git push origin feature-001
  48. 48. Gestionando remotos pablo sergi jordi jesús eloi akamon git push origin feature-001 git pull pablo feature-001
  49. 49. Gestionando remotos pablo sergi jordi jesús eloi akamon git push origin feature-001 git pull pablo feature-001
  50. 50. Gestionando remotos pablo sergi jordi jesús eloi akamon git push origin feature-001 git pull pablo feature-001 git ci -m ‘mejoras rabbitmq’
  51. 51. Gestionando remotos pablo sergi jordi jesús eloi akamon git push origin feature-001 git pull pablo feature-001 git ci -m ‘mejoras rabbitmq’ git push pablo feature-001
  52. 52. Gestionando remotos pablo sergi jordi jesús eloi akamon git push origin feature-001 git pull pablo feature-001 git ci -m ‘mejoras rabbitmq’ git push pablo feature-001
  53. 53. Gestionando remotos pablo sergi jordi jesús eloi akamon git push origin feature-001 git pull pablo feature-001 git ci -m ‘mejoras rabbitmq’ git push pablo feature-001 git pull pablo feature-001
  54. 54. Gestionando remotos pablo sergi jordi jesús eloi akamon git push origin feature-001 git pull pablo feature-001 git ci -m ‘mejoras rabbitmq’ git push pablo feature-001 git pull pablo feature-001
  55. 55. Gestionando remotos pablo sergi jordi jesús eloi akamon git push origin feature-001 git pull pablo feature-001 git ci -m ‘mejoras rabbitmq’ git push pablo feature-001 git pull pablo feature-001 git push origin feature-001
  56. 56. Gestionando remotos pablo sergi jordi jesús eloi akamon git push origin feature-001 git pull pablo feature-001 git ci -m ‘mejoras rabbitmq’ git push pablo feature-001 git pull pablo feature-001 git push origin feature-001
  57. 57. Gestionando remotos pablo sergi jordi jesús eloi akamon git push origin feature-001 git pull pablo feature-001 git ci -m ‘mejoras rabbitmq’ git push pablo feature-001 git pull pablo feature-001 git push origin feature-001 git co integration
  58. 58. Gestionando remotos pablo sergi jordi jesús eloi akamon git push origin feature-001 git pull pablo feature-001 git ci -m ‘mejoras rabbitmq’ git push pablo feature-001 git pull pablo feature-001 git push origin feature-001 git co integration git pull jesus/ feature-001
  59. 59. Gestionando remotos pablo sergi jordi jesús eloi akamon git push origin feature-001 git pull pablo feature-001 git ci -m ‘mejoras rabbitmq’ git push pablo feature-001 git pull pablo feature-001 git push origin feature-001 git co integration git pull jesus/ feature-001
  60. 60. Gestionando remotos pablo sergi jordi jesús eloi akamon git push origin feature-001 git pull pablo feature-001 git ci -m ‘mejoras rabbitmq’ git push pablo feature-001 git pull pablo feature-001 git push origin feature-001 git co integration git pull jesus/ feature-001 git push akamon integration
  61. 61. Gestionando remotos pablo sergi jordi jesús eloi akamon git push origin feature-001 git pull pablo feature-001 git ci -m ‘mejoras rabbitmq’ git push pablo feature-001 git pull pablo feature-001 git push origin feature-001 git co integration git pull jesus/ feature-001 git push akamon integration
  62. 62. Gestionando remotos pablo sergi jordi jesús eloi akamon git push origin feature-001 git pull pablo feature-001 git ci -m ‘mejoras rabbitmq’ git push pablo feature-001 git pull pablo feature-001 git push origin feature-001 git co integration git pull jesus/ feature-001 git push akamon integration git pull akamon integration
  63. 63. Gestionando remotos pablo sergi jordi jesús eloi akamon git push origin feature-001 git pull pablo feature-001 git ci -m ‘mejoras rabbitmq’ git push pablo feature-001 git pull pablo feature-001 git push origin feature-001 git co integration git pull jesus/ feature-001 git push akamon integration git pull akamon integration
  64. 64. Pull Requests En un repositorio que no es tuyo (ni tienes permisos): • Necesitas una funcionalidad que no existe • Encuentras un bug… • Ves una posible mejora … • Si el repo es tuyo (o tienes permisos) para generar debate Pull Request == Propongo incluir algo en un repo
  65. 65. Pull Requests • Haces un fork (copia) de un repositorio • Modificas tu copia y propones tus cambios • El propietario los acepta o no … dhh/rails sergigp/rails
  66. 66. Pull Requests • Haces un fork (copia) de un repositorio • Modificas tu copia y propones tus cambios • El propietario los acepta o no … dhh/rails sergigp/rails Hi, I’m DHH and TDD is DEAD
  67. 67. Pull Requests • Haces un fork (copia) de un repositorio • Modificas tu copia y propones tus cambios • El propietario los acepta o no … dhh/rails sergigp/rails fork dhh/rails Hi, I’m DHH and TDD is DEAD
  68. 68. Pull Requests • Haces un fork (copia) de un repositorio • Modificas tu copia y propones tus cambios • El propietario los acepta o no … dhh/rails sergigp/rails fork dhh/rails Hi, I’m DHH and TDD is DEAD git ci -m ‘remove active record’
  69. 69. Pull Requests • Haces un fork (copia) de un repositorio • Modificas tu copia y propones tus cambios • El propietario los acepta o no … dhh/rails sergigp/rails fork dhh/rails Hi, I’m DHH and TDD is DEAD git ci -m ‘remove active record’ Pull Request!
  70. 70. Pull Requests • Haces un fork (copia) de un repositorio • Modificas tu copia y propones tus cambios • El propietario los acepta o no … dhh/rails sergigp/rails fork dhh/rails Hi, I’m DHH and TDD is DEAD git ci -m ‘remove active record’ Pull Request! Pull Request
  71. 71. Pull Requests • Haces un fork (copia) de un repositorio • Modificas tu copia y propones tus cambios • El propietario los acepta o no … dhh/rails sergigp/rails fork dhh/rails Hi, I’m DHH and TDD is DEAD git ci -m ‘remove active record’ Pull Request! Pull Request
  72. 72. Pull Requests • Haces un fork (copia) de un repositorio • Modificas tu copia y propones tus cambios • El propietario los acepta o no … dhh/rails sergigp/rails fork dhh/rails Hi, I’m DHH and TDD is DEAD git ci -m ‘remove active record’ Pull Request! Pull Request F*CK YOU
  73. 73. Pull Requests
  74. 74. Pull Requests Epic PRs
  75. 75. Reflog Con log, checkout, branch y reset podemos “volver” a cualquier commit. Con reflog, checkout, branch y reset podemos “volver” a cualquier estado. log es un listado de commits! ! reflog es un listado de HEADs referencias
  76. 76. Reflog $ git reflog Que son referencias en git? HEADs, stash, tags, bisect … $ ls -l .git/refs $ git reflog show feature-0002
  77. 77. Fsck • Si reflog no funciona… que no cunda el panico • fsck comprueba la integridad de la BD de git. Luego podemos recuperar objetos y referencias perdidas con alguna copia de seguridad • Flags --full y --unreachable
  78. 78. Filter branch Git está diseñado para no perder nunca cambios realizados… ¿Pero que pasa si queremos perderlos? !
  79. 79. Filter branch Git está diseñado para no perder nunca cambios realizados… ¿Pero que pasa si queremos perderlos? ! eliminar passwords de producción commiteados y pusheados $ git filter-branch —tree-filter “sed ’s/mipassword//g’ > parameters.temp; mv parameters.temp parameters.yml”
  80. 80. Otros usos • Documentación: Markdown + Github = WIN • Blogging: Github Pages • Git con imagenes: Github images diffing
  81. 81. Otros usos • Documentación: Markdown + Github = WIN • Blogging: Github Pages • Git con imagenes: Github images diffing
  82. 82. Herramientas • Hub: Wrapper de git para mejorar integración con Github • Clientes: • Tower • SourceTree • Github client • gitk • GitX • IntelliJ (PHPStorm, PyCharm…)
  83. 83. ¿Preguntas? Moltes gràcies :)

×