Maneje la ramificación de git para prueba y producción
git-flow (2)
Creo que la forma correcta aquí es:
- producción (...)
- maestro (la rama de desarrollo)
- característica123
- característica234
- característica345
- función [número]
Si puede, proporcione una característica [número] .example.com dominio a los clientes. Para que pueda mostrar todas las características antes de la fusión en la rama maestra. Si se rechaza una característica, nunca debe fusionarse en master. Si se acepta la función, debe fusionarse.
Una buena alternativa es también un dominio "provisional" donde implementar el código cuando sea necesario.
Supongamos que su cliente necesita ver feature42, ... simplemente implemente feature42 en
customer.example.com
dominio
customer.example.com
.
¿Dónde desarrollar una nueva característica?
feature[number] branch
¿Dónde mostrar nueva función?
feature[number].example.com
¿Dónde ver el próximo código de sprint (maestro) en el trabajo?
next.example.com
o
master.example.com
¿Dónde ver el código de producción?
www.example.com
Al trabajar con git (flow) y tener un entorno de etapa / prueba donde el cliente está haciendo sus revisiones de las cosas desarrolladas, ¿cuál es la mejor manera de manejar las características que no están aprobadas junto con las que sí lo están?
Considere el escenario en el que varios desarrolladores trabajan con diferentes características en un sprint o en un flujo de trabajo continuo. Las características deben ser revisadas por el cliente y para que las características puedan revisarse en el entorno de la etapa, deben fusionarse en la rama de desarrollo e implementarse.
Si, digamos, se han desarrollado dos características, consideradas realizadas por el equipo de desarrollo y llevadas a desarrollo. El cliente los revisa y aprueba UNO de ellos. Pero ahora el cliente quiere lanzar la característica aprobada a producción. La rama de desarrollo ahora está "contaminada" por un código de característica no aprobado que no se puede enviar a producción.
¿Cuál es la mejor manera de manejar tal escenario? Por supuesto, en realidad es más complejo. ¿La selección de cerezas es una solución o debería reconsiderarse el proceso general y el manejo de las sucursales?
Ese problema (rama de desarrollo contaminada por ramas de características "no aprobadas pero ya integradas") es
exactamente
lo que describe a
Raman Gupta
en "
Cómo crean los creadores de Git
".
(
rocketraman/gitworkflow
GitHub para este flujo de trabajo:
rocketraman/gitworkflow
)
En su caso (gitflow), necesitaría revertir la confirmación de fusión de las características no aprobadas antes de fusionar dev para liberar.
Pero el "gitworkflow" usa ramas efímeras, por oposición de gitflow:
GitFlow aboga por tener dos ramas eternas:
master
ydevelop
Ambos flujos de trabajo (gitflow o gitworkflow) usan ramas "feature" o "topic":
Las ramas temáticas son donde se está realizando todo el trabajo actual: una rama por problema, error o característica, y puede haber muchas ramas temáticas en desarrollo a la vez.
Un tema termina fusionado en la rama "
next
" en gitworkflow.
Sin embargo, una diferencia clave es que la
next
rama nunca se fusiona con
master
(en oposición a la rama eterna "
develop
" que está destinada a fusionarse con
master
/
release
en gitflow)
Ahora que el
topic
ha graduado alnext
, puede ser parte de una versión beta o una versión de aceptación. Por lo tanto, cada tema del próximo ahora puede someterse a una segunda ronda de estabilización, que es exactamente el propósito de un entorno de prueba de lanzamiento / aceptación beta.Sin embargo, tenga en cuenta que con gitworkflow, todavía no nos hemos comprometido (¡sin juego de palabras!) A tener este
topic
como parte de nuestro próximo lanzamiento a producción; todavía no se ha fusionado paramaster
.
Esto es similar en concepto a la rama derelease
de GitFlow, pero mucho más flexible y potente, ya quemaster
no tiene dependencias de lanext
, ni se fusiona enmaster
(a diferencia de las ramas de GitFlow correspondientes que sedevelop
yrelease
) .
Si el siguiente no se fusiona con master, ¿cómo gradúa una característica para la producción?
Una vez que un tema se juzga lo suficientemente estable como para lanzarlo, el tema se gradúa nuevamente y se fusiona para
master
(o quizásmaint
), nuevamente con--no-ff
para preservar la historia completa de la rama del tema.
¿Por qué es esto mejor?
Tenga en cuenta que en gitworkflow, el trabajo de desarrollo inestable y estable nunca se mezcla en la misma rama.
En contraste, con GitFlow tengo dos opciones:
- Puedo probar mi tema de forma aislada en su propia rama, o
- Puedo fusionarlo para desarrollarlo para probarlo.
Ninguna de las opciones es atractiva.
- El primero no ofrece una prueba real de la estabilidad de un tema cuando se implementa junto con otro trabajo en curso, y
- este último compromete el tema a desarrollar tal vez antes de que sea estable.
Sentido:
En resumen, en GitFlow siempre existe una tensión irresoluble entre el deseo de mantener el trabajo de desarrollo limpio y aislado en una rama temática, y la integración de ramas temáticas con otro trabajo al fusionarlas para desarrollarlas para hacerlas visibles y verificables y para verificar conflictos.
Gitworkflow permite alcanzar ambos objetivos sin sacrificar uno por el otro.