$30 off During Our Annual Pro Sale. View Details »

Introduccion a GitFlow

CETA-Ciemat
September 25, 2014

Introduccion a GitFlow

Charla introductoria al workflow GitFlow.

CETA-Ciemat

September 25, 2014
Tweet

More Decks by CETA-Ciemat

Other Decks in Programming

Transcript

  1. {
    INTRODUCCION A
    GITFLOW
    Jose Antonio Adame Fernández
    CETA-CIEMAT 2014

    View Slide

  2. INDICE
    - INTRODUCCION A GIT
    - TIPOS DE WORKFLOW
    - GITFLOW WORKFLOW
    - RAMAS DE FUNCIONALIDAD
    - CICLO DE PUBLICACION
    - RAMAS DE MANTENIMIENTO
    - EJEMPLO

    View Slide

  3. INTRODUCCION A GIT
    - Software de control de versiones diseñado por Linus Torvalds.
    - Gestión eficiente de proyectos grandes
    - Distribuido : Repositorios locales y remotos.
    - Control de integridad.
    - Facilita la integración de workflows no lineales.
    - Comandos básicos de Git:
    - git fetch:
    Descarga los cambios realizados en el repositorio remoto.
    - git merge :
    Fusiona en la rama en la que te encuentras trabajando, los cambios realizados en
    la rama “nombre_rama”.
    - git pull:
    Unifica los comandos fetch y merge en un único comando.
    - git commit -am “”:
    Confirma los cambios realizados. El “mensaje” generalmente se usa para
    asociar al commit una breve descripción de los cambios realizados.
    - git push origin :
    Sube la rama “nombre_rama” al servidor remoto.
    - git status:
    Muestra el estado actual de la rama, como los cambios que hay sin commitear.

    View Slide

  4. TIPOS DE WORKFLOW:
    - Centralizado
    - Usa un repositorio central que sirve como punto de entrada único
    para todos lo cambios del proyecto

    View Slide

  5. - Feature Branch
    - Todo el desarrollo de funcionalidades debe darse en una rama
    especializada en vez de en la rama master

    View Slide

  6. - Workflow Gitflow
    - En vez de una única rama principal, este flujo de trabajo utiliza dos
    ramas para registrar el historial del proyecto.

    View Slide

  7. - Workflow bifurcado
    - En vez de usar un repositorio único central , le da a todos los
    desarrolladores un repositorio del lado del servidor.

    View Slide

  8. - Pull Requests
    - Son un mecanismo para que el desarrollador pueda notificar
    a los miembros del equipo de que ha finalizado una funcionalidad y esta
    sea fusionada en el repositorio central

    View Slide

  9. GITFLOW WORKFLOW

    View Slide

  10. CARACTERISTICAS:
    - Estricto modelo de ramas.
    - Repositorio central.
    - Los miembros del equipo trabajan de forma local y envían
    las ramas al repositorio central.
    - Dos ramas:
    - Rama master: guarda el histórico oficial de publicaciones
    - Rama develop: sirve como rama de integración para las
    funcionalidades.

    View Slide

  11. RAMAS DE FUNCIONALIDAD
    Para cada nueva funcionalidad que se desee añadir al proyecto se creará
    una rama a partir de la rama develop.
    Cuando se termina de implementar esta funcionalidad se fusiona de nuevo
    con la rama develop.

    View Slide

  12. CICLO DE PUBLICACION
    Cada vez que se quiera lanzar una publicación de la aplicación se crea una rama
    para este propósito llamada release/versión.
    Acciones a realizar sobre esta rama:
    - Preparación y revisión del código para su publicación.
    - Actualización de la documentación.
    - Otras tareas destinadas a la publicación, como pueden ser errores críticos
    encontrados.
    Una vez que esta lista la publicación la rama release/versión se fusiona con la rama
    master y se etiqueta con un número de versión. Además se vuelve a fusionar
    con la rama develop que puede haber avanzado desde el inicio de la publicación.

    View Slide

  13. RAMAS DE MANTENIMIENTO
    - Ramas específicas para crear parches de las publicaciones en producción.
    - Se bifurcan desde master.
    - Cuando se termina el parche se deberían de fusionar con la rama master
    y la rama develop.

    View Slide

  14. EJEMPLO
    ESCENARIO DE TRABAJO
    - Ultima versión publicada 0.1
    - Dos desarrolladores: Cesar y Jose
    - Dos nuevas funcionalidades nuevas a desarrollar.

    View Slide

  15. CREACION RAMAS DE TRABAJO
    Si las ramas de desarrollo y master no estuviesen creadas:
    git branch origin develop
    git push origin develop
    Para que los otros miembros comiencen a trabajar en el proyecto deben
    de clonar el repositorio del mismo y empezar a trabajar con la rama develop.
    Git clone url-repositorio
    git checkout -b develop origin/develop
    git branch origin master
    git push origin master

    View Slide

  16. DESARROLLO DE NUEVAS FUNCIONALIDADES
    - Se creara una rama para cada nueva funcionalidad
    - Nomenclatura de la rama: feature/código-descripcion
    Las ramas de funcionalidad se crean a partir de la rama develop
    Cesar y Jose empiezan a trabajar en sus
    Nuevas funcionalidades:
    - Cesar crea su rama para su funcionalidad
    $ git checkout -b feature/aloe-300-fixmessage develop
    - Jose crea su rama para su nueva funcionalidad
    $ git checkout -b feature/aloe-331-fixhtml develop
    Feature/aloe-330-
    fixmessage
    Feature/aloe-331-
    fixhtml

    View Slide

  17. MERGE DE LAS RAMAS DE FUNCIONALIDAD
    Ambos desarrolladores terminan de implementar sus funcionalidades.
    Hay que realizar el merge con la rama develop.
    Cesar hace el merge de su rama:
    $ git checkout develop
    Switched to branch 'develop‘
    $ git pull
    $ git merge --no-ff feature-fixmessage
    Updating ea1b82a..05e9557
    (Summary of changes)
    $ git branch -d feature-fixmessage
    Deleted branch feature-fixmessage (was 05e9557).
    $ git push origin develop
    Jose hace el merge de su rama:
    $ git checkout develop
    Switched to branch 'develop‘
    $ git pull
    $ git merge --no-ff feature-fixhtml
    Updating ea1b82a..05e9557
    (Summary of changes)
    $ git branch -d feature-fixhtml
    Deleted branch feature-fixhtml (was 05e9557).
    $ git push origin develop

    View Slide

  18. PREPARACION DE UNA RELEASE
    - Petición de publicación nueva versión de la aplicación.
    - Mientras parte del equipo puede dedicarse a desarrollar nuevas funcionalidades,
    otra parte puede dedicarse a preparar la release.
    - Se crea una nueva rama cuya nomenclatura será release/versión.
    (versión = numero de versión que se va a publicar).
    git checkout -b release/0.2 develop
    Tareas a realizar sobre esta rama:
    - Modificar la documentación
    - Establecer versiones
    - Preparativos y pruebas de cara a la publicación.
    - Corrección de errores críticos encontrados.
    Cualquier funcionalidad que no este en el rama develop a la hora de
    crear esta rama se pospone hasta la siguiente publicación
    develop
    release/0.2

    View Slide

  19. MERGE CON LA RAMA MASTER
    Se realiza la fusión con la rama master una vez dado el visto bueno a la
    release para su publicación.
    Cesar ejecutaría:
    $ git checkout master
    Switched to branch 'master'
    $ git merge --no-ff release-0.2
    Merge made by recursive.
    (Summary of changes)
    $ git tag -a 0.2
    $ git push origin master
    $ git checkout develop
    Switched to branch 'develop'
    $ git merge --no-ff release-0.2
    Merge made by recursive.
    (Summary of changes)
    $ git push origin develop
    $ git branch -d release-0.2
    master
    develop

    View Slide

  20. RAMAS DE MANTENIMIENTO
    Si quisiéramos incorporar algún tipo de hotfix a alguna de las versiones publicadas
    Tendremos que crear una rama de mantenimiento desde la rama MASTER.
    Esta rama de mantenimiento se fusiona con la rama master y se etiqueta.
    También se fusiona con la rama develop.
    $ git checkout -b hotfix/aloe-200-lesioninvalid master
    # Soluciona el bug
    $ git checkout master
    $ git merge hotfix/aloe-200-lesioninvalid
    $ git push
    $ git checkout develop
    $ git pull
    $ git merge hotfix/aloe-200-lesioninvalid
    $ git push
    $ git branch –D hotfix/aloe-200-lesioninvalid
    master
    hotfix/código-descripción

    View Slide

  21. HERRAMIENTAS
    Existen algunas herramientas que nos pueden facilitar la tarea a la hora
    de integrar Gitflow en nuestro entorno de trabajo.
    - Git-flow : Conjunto de extensiones que nos ahorran trabajo a la hora
    de ejecutar los comandos anteriormente vistos.
    - Iniciar el repositorio:
    $ git flow init [-d]
    - Gestión de ramas de funcionalidad:
    $ git flow feature
    $ git flow feature start []
    $ git flow feature finish
    - Gestión de releases
    $ git flow release
    $ git flow release start []
    $ git flow release finish
    - Gestion de hotfixes
    $ git flow hotfix
    $ git flow hotfix start []
    $ git flow hotfix finish

    View Slide

  22. BENEFICIOS DEL USO DE GITFLOW
    - Agilidad a la hora de desarrollar proyectos
    - Identificación clara de cada una de las funcionalidades desarrolladas.
    - Favorece el trabajo y la colaboración entre las personas del equipo.
    - Correcto control de la línea de trabajo en la rama develop y de las
    versiones publicadas en la rama master.

    View Slide

  23. GITFLOW E INTEGRACION CONTINUA
    La integración continua puede mejor mucho la metodología Gitflow
    configurando tareas automáticas en un servidor con Jenkins.
    - Merges automáticos con la rama develop.
    - Compilación del código y notificaciones de errores en cada actualización
    de ramas remotas.
    - Impide que se suba “código basura” a la rama develop.
    - Despliegues automáticos de la aplicación.
    Buenas practicas:
    - Actualizaciones frecuentes de las ramas remotas permitiendo
    detección de conflictos de forma prematura.
    - Inclusión de métricas para verificar la calidad el código.
    - Ejecución de los tests en cada actualización de las ramas remotas.

    View Slide

  24. View Slide

  25. !MUCHAS GRACIAS!
    ¿DUDAS?

    View Slide

  26. REFERENCIAS
    - ATLASSIAN ( https://www.atlassian.com/es/git/workflows#!workflow-
    gitflow )
    - GIT (http://git-scm.com)
    - Try GitHub (https://try.github.io/levels/1/challenges/1)
    - Git-Flow (https://github.com/nvie/gitflow)

    View Slide