45

Git: flujos de trabajo y herramientas para trabajo colaborativo

Embed Size (px)

Citation preview

Page 1: Git: flujos de trabajo y herramientas para trabajo colaborativo
Page 2: Git: flujos de trabajo y herramientas para trabajo colaborativo

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

Git: flujos de trabajo y herramientas para

trabajo colaborativo@aprendegit@aalbagarcia

Page 4: Git: flujos de trabajo y herramientas para trabajo colaborativo

Dando el salto

Page 5: Git: flujos de trabajo y herramientas para trabajo colaborativo

http://www.imdb.com/title/tt0298130/

Page 6: Git: flujos de trabajo y herramientas para trabajo colaborativo

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

¿Cómo compartimos código?

Page 8: Git: flujos de trabajo y herramientas para trabajo colaborativo

¿Dónde alojamos nuestros repositorios?

Page 9: Git: flujos de trabajo y herramientas para trabajo colaborativo

Reglas del juego más habituales para

proyectos open source

Page 10: Git: flujos de trabajo y herramientas para trabajo colaborativo

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

Qué es un pull request

Page 12: Git: flujos de trabajo y herramientas para trabajo colaborativo

Qué es un pull request

Page 13: Git: flujos de trabajo y herramientas para trabajo colaborativo

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

etiqueta

http://www.moonmagazine.info/bond-su-nombre-es-bond-james-bond/

Page 17: Git: flujos de trabajo y herramientas para trabajo colaborativo

etiqueta:squashing

http://www.moonmagazine.info/bond-su-nombre-es-bond-james-bond/

Page 18: Git: flujos de trabajo y herramientas para trabajo colaborativo

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

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

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

Ya tenemos reglas del

juego

¿Y ahora qué?

Page 22: Git: flujos de trabajo y herramientas para trabajo colaborativo

¿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

Comunicación

Testing

Arquitectura y diseño

Page 24: Git: flujos de trabajo y herramientas para trabajo colaborativo

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

Integración contínuaMuy integrado en github

Interesante lista en la wiki pedia…

Page 26: Git: flujos de trabajo y herramientas para trabajo colaborativo

¿Cómo conectamos el repo con el sistema CI?

Page 27: Git: flujos de trabajo y herramientas para trabajo colaborativo

git hooks

Page 28: Git: flujos de trabajo y herramientas para trabajo colaborativo

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

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

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

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

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

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

¡Ya lo tenemos (casi) todo!

Page 35: Git: flujos de trabajo y herramientas para trabajo colaborativo

Otras herramientas

Page 36: Git: flujos de trabajo y herramientas para trabajo colaborativo

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

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

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

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

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 42: Git: flujos de trabajo y herramientas para trabajo colaborativo

yo no tengo nada contra gerrit pero…

https://www.mediawiki.org/wiki/Git/Gerrit_evaluation

Page 44: Git: flujos de trabajo y herramientas para trabajo colaborativo

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

¡Gracias!@aalbagarcia@aprendegit

Grupo de usuarios de git en meetuphttp://www.meetup.com/Spanish-Git-Meetup/