git: flujos de trabajo y herramientas para trabajo colaborativo
TRANSCRIPT
![Page 1: Git: flujos de trabajo y herramientas para trabajo colaborativo](https://reader036.vdocuments.mx/reader036/viewer/2022062822/58827dc71a28ab24788b5df3/html5/thumbnails/1.jpg)
![Page 2: Git: flujos de trabajo y herramientas para trabajo colaborativo](https://reader036.vdocuments.mx/reader036/viewer/2022062822/58827dc71a28ab24788b5df3/html5/thumbnails/2.jpg)
AnunciosGrupo de usuarios de git
• Nuevo meetup 17 de noviembre ¿algún voluntario?
• Cambios en la política de reservas• ¿Alguien quiere dar una charla de gitlab?
![Page 3: Git: flujos de trabajo y herramientas para trabajo colaborativo](https://reader036.vdocuments.mx/reader036/viewer/2022062822/58827dc71a28ab24788b5df3/html5/thumbnails/3.jpg)
Git: flujos de trabajo y herramientas para
trabajo colaborativo@aprendegit@aalbagarcia
![Page 4: Git: flujos de trabajo y herramientas para trabajo colaborativo](https://reader036.vdocuments.mx/reader036/viewer/2022062822/58827dc71a28ab24788b5df3/html5/thumbnails/4.jpg)
Dando el salto
![Page 6: Git: flujos de trabajo y herramientas para trabajo colaborativo](https://reader036.vdocuments.mx/reader036/viewer/2022062822/58827dc71a28ab24788b5df3/html5/thumbnails/6.jpg)
Cosas a tener en cuenta(que no son objetivo de la
charla)• Calidad del código• Documentación• TDD / BDD / Testing en general• Metodologías ágiles: SCRUM, XP, etc• Gestión de proyectos
![Page 7: Git: flujos de trabajo y herramientas para trabajo colaborativo](https://reader036.vdocuments.mx/reader036/viewer/2022062822/58827dc71a28ab24788b5df3/html5/thumbnails/7.jpg)
¿Cómo compartimos código?
![Page 8: Git: flujos de trabajo y herramientas para trabajo colaborativo](https://reader036.vdocuments.mx/reader036/viewer/2022062822/58827dc71a28ab24788b5df3/html5/thumbnails/8.jpg)
¿Dónde alojamos nuestros repositorios?
![Page 9: Git: flujos de trabajo y herramientas para trabajo colaborativo](https://reader036.vdocuments.mx/reader036/viewer/2022062822/58827dc71a28ab24788b5df3/html5/thumbnails/9.jpg)
Reglas del juego más habituales para
proyectos open source
![Page 10: Git: flujos de trabajo y herramientas para trabajo colaborativo](https://reader036.vdocuments.mx/reader036/viewer/2022062822/58827dc71a28ab24788b5df3/html5/thumbnails/10.jpg)
Definiendo unas reglas del juego
• Sólo el propietario del repositorio puede escribir (hacer push)
• El resto del mundo tiene que hacer un pull-request para enviar código
• Con el paso del tiempo, se pueden añadir usuarios con permiso de escritura que pueden hacer commits directamente sin pull-request(se gana agilidad)
![Page 11: Git: flujos de trabajo y herramientas para trabajo colaborativo](https://reader036.vdocuments.mx/reader036/viewer/2022062822/58827dc71a28ab24788b5df3/html5/thumbnails/11.jpg)
Qué es un pull request
![Page 13: Git: flujos de trabajo y herramientas para trabajo colaborativo](https://reader036.vdocuments.mx/reader036/viewer/2022062822/58827dc71a28ab24788b5df3/html5/thumbnails/13.jpg)
etiqueta
• Cada proyecto tiene su forma de aceptar contribuciones… entérate en cada caso y ¡sigue las instrucciones!
• Decide en tu proyecto cómo lo vas a hacer
http://www.moonmagazine.info/bond-su-nombre-es-bond-james-bond/
![Page 14: Git: flujos de trabajo y herramientas para trabajo colaborativo](https://reader036.vdocuments.mx/reader036/viewer/2022062822/58827dc71a28ab24788b5df3/html5/thumbnails/14.jpg)
etiqueta
http://www.moonmagazine.info/bond-su-nombre-es-bond-james-bond/
![Page 15: Git: flujos de trabajo y herramientas para trabajo colaborativo](https://reader036.vdocuments.mx/reader036/viewer/2022062822/58827dc71a28ab24788b5df3/html5/thumbnails/15.jpg)
etiqueta
http://www.moonmagazine.info/bond-su-nombre-es-bond-james-bond/
![Page 16: Git: flujos de trabajo y herramientas para trabajo colaborativo](https://reader036.vdocuments.mx/reader036/viewer/2022062822/58827dc71a28ab24788b5df3/html5/thumbnails/16.jpg)
etiqueta
http://www.moonmagazine.info/bond-su-nombre-es-bond-james-bond/
![Page 17: Git: flujos de trabajo y herramientas para trabajo colaborativo](https://reader036.vdocuments.mx/reader036/viewer/2022062822/58827dc71a28ab24788b5df3/html5/thumbnails/17.jpg)
etiqueta:squashing
http://www.moonmagazine.info/bond-su-nombre-es-bond-james-bond/
![Page 18: Git: flujos de trabajo y herramientas para trabajo colaborativo](https://reader036.vdocuments.mx/reader036/viewer/2022062822/58827dc71a28ab24788b5df3/html5/thumbnails/18.jpg)
Definiendo unas reglas del juego
• Definir un flujo de trabajo• Repositorio maestro, todo el mundo tiene
permiso de escritura• Repositorio maestro con forks• Mezcla de los dos anteriores
• git-flow: http://aprendegit.com/que-es-git-flow/
![Page 19: Git: flujos de trabajo y herramientas para trabajo colaborativo](https://reader036.vdocuments.mx/reader036/viewer/2022062822/58827dc71a28ab24788b5df3/html5/thumbnails/19.jpg)
Definiendo unas reglas del juego
https://git-scm.com/book/es/v1/Git-en-entornos-distribuidos-Flujos-de-trabajo-distribuidos
![Page 20: Git: flujos de trabajo y herramientas para trabajo colaborativo](https://reader036.vdocuments.mx/reader036/viewer/2022062822/58827dc71a28ab24788b5df3/html5/thumbnails/20.jpg)
Definiendo unas reglas del juego
• ¿Ventaja de usar git? Su flexibilidad
Si algo no te funciona lo cambias
![Page 21: Git: flujos de trabajo y herramientas para trabajo colaborativo](https://reader036.vdocuments.mx/reader036/viewer/2022062822/58827dc71a28ab24788b5df3/html5/thumbnails/21.jpg)
Ya tenemos reglas del
juego
¿Y ahora qué?
![Page 22: Git: flujos de trabajo y herramientas para trabajo colaborativo](https://reader036.vdocuments.mx/reader036/viewer/2022062822/58827dc71a28ab24788b5df3/html5/thumbnails/22.jpg)
¿Cómo hacemos para
que el pull-request X no
se cargue nada?
¿Cómo hacemos para que
futanito no se cargue lo que yo he hecho?
![Page 23: Git: flujos de trabajo y herramientas para trabajo colaborativo](https://reader036.vdocuments.mx/reader036/viewer/2022062822/58827dc71a28ab24788b5df3/html5/thumbnails/23.jpg)
Comunicación
Testing
Arquitectura y diseño
![Page 24: Git: flujos de trabajo y herramientas para trabajo colaborativo](https://reader036.vdocuments.mx/reader036/viewer/2022062822/58827dc71a28ab24788b5df3/html5/thumbnails/24.jpg)
Integración contínuaConcepto más viejo de
lo que parece (origen en 1991 Grady Booch) Objetivo: eliminar el
“integration hell”¿Cómo? integrando el
trabajo de todo el mundo lo antes
posible… …incorporando/mezclando ramas y ejecutando los tests
AUTOMÁTICAMENTE
![Page 25: Git: flujos de trabajo y herramientas para trabajo colaborativo](https://reader036.vdocuments.mx/reader036/viewer/2022062822/58827dc71a28ab24788b5df3/html5/thumbnails/25.jpg)
Integración contínuaMuy integrado en github
Interesante lista en la wiki pedia…
![Page 26: Git: flujos de trabajo y herramientas para trabajo colaborativo](https://reader036.vdocuments.mx/reader036/viewer/2022062822/58827dc71a28ab24788b5df3/html5/thumbnails/26.jpg)
¿Cómo conectamos el repo con el sistema CI?
![Page 27: Git: flujos de trabajo y herramientas para trabajo colaborativo](https://reader036.vdocuments.mx/reader036/viewer/2022062822/58827dc71a28ab24788b5df3/html5/thumbnails/27.jpg)
git hooks
![Page 28: Git: flujos de trabajo y herramientas para trabajo colaborativo](https://reader036.vdocuments.mx/reader036/viewer/2022062822/58827dc71a28ab24788b5df3/html5/thumbnails/28.jpg)
Hooks• pre-commit: se usa para inspeccionar el snapshot de código, ejecutar
tests, analizadores de código estático…• Si devuelve !=0 no se sigue el flujo
• prepare-commit-msg: permite editar el mensaje por defecto. Útil para commits con mensajes automáticos como merge-commits, squashed commits, amends• argumentos: ruta a fichero con el mensaje, tipo de commit, SHA-1
• commit-msg: Permite validar el mensaje de commit del usuario• Si devuelve !=0 no se sigue el flujo• argumentos: ruta a fichero con el mensaje
• post-commit: se suele utilizar para notificar
![Page 29: Git: flujos de trabajo y herramientas para trabajo colaborativo](https://reader036.vdocuments.mx/reader036/viewer/2022062822/58827dc71a28ab24788b5df3/html5/thumbnails/29.jpg)
commit-workflow hooks
pre-commit
#git commit
if $? != 0
prepare-commit-msg
crear mensaje por defecto
Editar el mensaje de commit
commit-msg
if $? != 0
commit
post-commit
![Page 30: Git: flujos de trabajo y herramientas para trabajo colaborativo](https://reader036.vdocuments.mx/reader036/viewer/2022062822/58827dc71a28ab24788b5df3/html5/thumbnails/30.jpg)
Otros hooks• pre-rebase: antes de empezar el rebase. Se puede utilizar, por ejemplo
para detener el rebase si se está haciendo rebase de commits que ya han sido empujados (pushed)• Si devuelve !=0 no se hace el rebase
• post-checkout: justo después de hacer un checkout. Mover, borrar o descargar ficheros binarios,auto-generar documentación…
• post-merge: después de que se haya realizado un merge• pre-push: después de que se reciba la lista de referencias pero antes de
que se reciban los objetos.• argumentos: nombre y localización del remoto. Lista de ficheros por
STDIN• post-rewrite: se ejecuta por comandos ammend o rebase.
• argumentos: comando. Lista de ficheros por STDIN
![Page 31: Git: flujos de trabajo y herramientas para trabajo colaborativo](https://reader036.vdocuments.mx/reader036/viewer/2022062822/58827dc71a28ab24788b5df3/html5/thumbnails/31.jpg)
Hooks en servidor• pre-receive: se ejecuta antes de recibir nada por parte del cliente. Se
puede usar para hacer control de accesos, impedir recibir referencias que no sean fast-forward, etc• Si devuelve !=0 no se sigue el flujo• Argumentos: lista de referencias que se quieren enviar
• update: muy parecido. Se ejecuta una vez por cada rama que se está recibiendo• Argumentos: referencia (rama), el SHA-1 de inicio y el SHA-1 de destino• Si devuelve !=0 esa rama no se acepta y se sigue con la siguiente
• post-receive: se ejecuta después de que se ha recibido todos los objetos. Se puede usar para notificiaciones, pasear los mensajes y abrir o cerrar tickets.• Argumentos: lista de referencias que se han recibido
![Page 32: Git: flujos de trabajo y herramientas para trabajo colaborativo](https://reader036.vdocuments.mx/reader036/viewer/2022062822/58827dc71a28ab24788b5df3/html5/thumbnails/32.jpg)
Hooks
• Referencias:• https://git-scm.com/book/en/v2/Customizi
ng-Git-Git-Hooks• http://githooks.com/
![Page 33: Git: flujos de trabajo y herramientas para trabajo colaborativo](https://reader036.vdocuments.mx/reader036/viewer/2022062822/58827dc71a28ab24788b5df3/html5/thumbnails/33.jpg)
github, bitbicket, etc,etc,etc…
• En esos servicios no podemos poner scripts a nivel de servidor…
• …podemos utilizar sus webhooks para enterarnos de las cosas que pasan
https://developer.github.com/webhooks/
https://confluence.atlassian.com/bitbucket/manage-webhooks-735643732.html
![Page 34: Git: flujos de trabajo y herramientas para trabajo colaborativo](https://reader036.vdocuments.mx/reader036/viewer/2022062822/58827dc71a28ab24788b5df3/html5/thumbnails/34.jpg)
¡Ya lo tenemos (casi) todo!
![Page 35: Git: flujos de trabajo y herramientas para trabajo colaborativo](https://reader036.vdocuments.mx/reader036/viewer/2022062822/58827dc71a28ab24788b5df3/html5/thumbnails/35.jpg)
Otras herramientas
![Page 36: Git: flujos de trabajo y herramientas para trabajo colaborativo](https://reader036.vdocuments.mx/reader036/viewer/2022062822/58827dc71a28ab24788b5df3/html5/thumbnails/36.jpg)
Semantic versioning
• Reglas para poner un número de versión al software (build, una librería, etc)
• Más información: http://semver.org/
![Page 37: Git: flujos de trabajo y herramientas para trabajo colaborativo](https://reader036.vdocuments.mx/reader036/viewer/2022062822/58827dc71a28ab24788b5df3/html5/thumbnails/37.jpg)
Semantic versioning• Reglas básicas:
• Versionar el software con una secuencia de tres números X.Y.Z• X aumenta cuando se rompe la compatibilidad hacia
atrás• Y aumenta cuando se añade funcionalidad que es
compatible hacia atrás• Z aumenta cuando hay “fixes” que son compatibles
• La versión 0.Y.Z se utiliza para el desarrollo inicial• La primera versión estable es la 1.0.0
![Page 38: Git: flujos de trabajo y herramientas para trabajo colaborativo](https://reader036.vdocuments.mx/reader036/viewer/2022062822/58827dc71a28ab24788b5df3/html5/thumbnails/38.jpg)
Semantic versioning• Facilita la gestión de dependencias:
¿Es seguro actualizar el paquete X de la versión 1.1.0 a la 1.2.0?
• Permite tener un conjunto de reglas comunes para que todo el equipo numere sus librerías
![Page 39: Git: flujos de trabajo y herramientas para trabajo colaborativo](https://reader036.vdocuments.mx/reader036/viewer/2022062822/58827dc71a28ab24788b5df3/html5/thumbnails/39.jpg)
Revisiones de código
Disponen de herramientas para hacer code review:• Comentar código• Comunicación con
equipo• Revisión de los pull-
request
![Page 40: Git: flujos de trabajo y herramientas para trabajo colaborativo](https://reader036.vdocuments.mx/reader036/viewer/2022062822/58827dc71a28ab24788b5df3/html5/thumbnails/40.jpg)
Revisiones de código• Introducir este tipo de herramientas abre muchas
conversaciones:• ¿Qué tiene que tener y/o cómo tiene que ser el código
para ser considerado aceptable?• ¿Qué herramientas vamos a utilizar para facilitarnos
que todos escribamos el código de la misma manera?… mismo sangrado, misma estructura de ficheros, etc
• ¿Cómo vamos a nombrar las cosas (módulos, paquetes, funciones, métodos, clases, objetos…)?
• ¿Cómo vamos a documentar el código?
![Page 41: Git: flujos de trabajo y herramientas para trabajo colaborativo](https://reader036.vdocuments.mx/reader036/viewer/2022062822/58827dc71a28ab24788b5df3/html5/thumbnails/41.jpg)
Revisiones de código
¿Qué alternativas tenemos?
gerrit
getbarkeeper.org
![Page 42: Git: flujos de trabajo y herramientas para trabajo colaborativo](https://reader036.vdocuments.mx/reader036/viewer/2022062822/58827dc71a28ab24788b5df3/html5/thumbnails/42.jpg)
yo no tengo nada contra gerrit pero…
https://www.mediawiki.org/wiki/Git/Gerrit_evaluation
![Page 43: Git: flujos de trabajo y herramientas para trabajo colaborativo](https://reader036.vdocuments.mx/reader036/viewer/2022062822/58827dc71a28ab24788b5df3/html5/thumbnails/43.jpg)
Pensando en el usuario
![Page 44: Git: flujos de trabajo y herramientas para trabajo colaborativo](https://reader036.vdocuments.mx/reader036/viewer/2022062822/58827dc71a28ab24788b5df3/html5/thumbnails/44.jpg)
Checklist☑ Seleccionar un SCM
☑ Seleccionar un servicio para alojar repositorios
☑ Herramienta de gestión de proyectos: bugs, tareas, scum/kanban, etc, etc, etc
☑ Definir los flujos de trabajo (ir a la presentación del mes que viene)
☑ Documentar e implementar los flujos de trabajo
☑ Herramientas de comunicación: IRC, email, chats…
☑ Arquitectura / Diseño de tests para trabajo en equipo
☑ Sistema de integración continua
☑ Sistema de code review y otras herramientas de calidad (code style tools, etc)
☑ Integración de repositorio con CI y CD (hooks y webhooks)
☑ Distribución de librerías, paquetes y/o módulos
☑ Empezar a trabajar y si algo no funciona ¡Cambiarlo!
![Page 45: Git: flujos de trabajo y herramientas para trabajo colaborativo](https://reader036.vdocuments.mx/reader036/viewer/2022062822/58827dc71a28ab24788b5df3/html5/thumbnails/45.jpg)
¡Gracias!@aalbagarcia@aprendegit
Grupo de usuarios de git en meetuphttp://www.meetup.com/Spanish-Git-Meetup/