Git Worflows
Centralized workflow
Centralized workflow
El repositorio se aloja en el servidor
- Es un clon de el workflow utilizado en SVN/CVS
- Una única rama en el servidor central
- La historia es lineal
Master
Repositorio central (Trunk)
Master
Repositorio central (Trunk)
Master
Repositorio local (clone)
Master
Repositorio central (Trunk)
Master
Repositorio local
Master
Repositorio central (Trunk)
Master
Repositorio local
Master
Repositorio central (Trunk)
Master
Repositorio local
Repositorio central (Trunk)
Master
Repositorio local
Master
Feature branch
Feature branch
Por cada funcionalidad(feature) creamos una nueva rama
- Aislamiento/separación del código de desarrollo
- Compartir código con miembros del equipo
- Discutir sobre la implementación (PR)
git checkout -b rama-guillermo masterGuillermo comienza una funcionalidad
Master
rama-guillermo
git status
git add <archivo>
git commitGuillermo escribe algo de código
rama-guillermo
Master
git push -u origin rama-guillermoGuillermo acaba su jornada laboral y decide respaldar su código en el servidor
rama-guillermo
Master
git push Cuando Guillermo acaba de trabajar en su rama (y todos los tests unitarios pasan) entonces decide hacer un pull request

rama-guillermo
Master
Cuando Guillermo acaba de trabajar en su rama (y todos los tests unitarios pasan) entonces decide hacer un pull request

Cuando Guillermo acaba de trabajar en su rama (y todos los tests unitarios pasan) entonces decide hacer un pull request

Después de resolver las diferencias y aprobar la PR, se decide aceptarlo
Master
Como alternativas, si la rama no ha sido compartida o nadie la ha tocado (cuidadin!) se puede hacer un rebase para conseguir una historia lineal
Master
Para los más pulcros, el rebase se puede hacer de forma interactive y comprimir todos los commits en uno (squash)
Problemas
- Para alguno equipos o empresas es demasiado flexible (No permite la existencia de roles)
- Alineamiento con la infraestructura/entornos
- Mantenimiento y separación de procesos
Git Flow
Git Flow
Extiende el modelo 'Feature branch' enfoncándose en la gestión del despliegue (releases)
- Gestión de grandes proyectos con una estrictra metódologia
- Introduce las ramas de desarrollo y despligue
- Permite controlar mejor los cambios
- Alineamiento con infraestructura/entornos
Comenzamos con dos ramas, la rama de producción (rama histórica de despliegue) y la rama de desarrollo (rama de integración)
Develop
Master
tag #2
tag #1
Cada nueva funcionalidad se desarrolla en un rama aparte siempre tomando de base desarrollo (develop)
Feature #3
develop
Cuando llega el momento de un release (fecha/roadmap) se crea un rama nueva para gestionarlo partiendo de desarrollo (develop)
Release #3
develop
Cuando el release se da por acabado se hace merge con master y se etiqueta ese commit con la versión
Release #3
master
tag #3
tag #1
tag #2
También se hace un otro merge con desarrollo (develop) para actualizar posibles cambios (bugs/docs)
develop
Release #3
Además de estas ramas existe la rama 'hotfix', también temporal pero con el objetivo de arreglar un error (bug) en producción (master)
Hotfix #1
master
tag #3
tag #1
tag #2
Se crea a partir de master, una vez terminado se hace un merge de vuelta a master y develop.
Hotfix #1
master
tag #3
tag #1
tag #2
tag #3.1
Forking Flow
Forking Flow
Difiere en que cada desarrollador tiene su propio repositorio en el servidor
- Las contribuciones integradas sin la necesidad de tener que tener todo el mundo acceso al mismo repositorio
- Facilita el control de permisos/cambios
- Ideal en grandes proyectos generalmente open source
Todo comienza haciendo un fork del repositorio origen

git clone https://github.com/pipo02mix/reveal.gitLuego hacemos un clone de nuestro repositorio y trabajamos sobre el
Master
Trabajamos con el repositorio como queramos, aunque suele ser buena práctica hacer todos los cambios en un solo commit.
Forked/Master
Master
Para notificar la mejora al propiertario del repositorio original se hace un pull request

Generalmente se inicia una discusión, donde se habla del propio código, estándares de código, tests,...

Una vez solventado los posibles problemas, el propietario suele hacer un merge del código

Gracias
https://guides.github.com/introduction/flow/
http://scottchacon.com/2011/08/31/github-flow.html
https://www.toptal.com/git/git-workflows-for-pros-a-good-git-guide
http://nvie.com/posts/a-successful-git-branching-model/
https://www.youtube.com/watch?v=gLWSJXBbJuE
https://about.gitlab.com/2014/09/29/gitlab-flow/
https://git-scm.com/book/en/v2/Git-Branching-Branching-Workflows
deck
By Fernando Ripoll
deck
- 164