En el modelo de git-flow, su "última versión publicada" en realidad se asigna a master
, mientras que su "versión de vista previa" se asigna a una release
rama de git-flow . Se bifurca develop
y finalmente se fusiona master
cuando ocurre el lanzamiento real. Entonces esta se convertirá en su "última versión" y normalmente solo corregirá los errores de esa versión, utilizando hotfix
ramas de git-flow . De esta manera, su master
siempre representa el estado más estable de su última versión publicada.
Si desea corregir errores para versiones anteriores o realizar cualquier otro desarrollo allí, bifurcará una support
rama de la confirmación adecuada master
(tendrá todas las versiones creadas allí). support
Las ramas aún son experimentales (de acuerdo con los documentos ) y no están bien documentadas. Pero como puede ver en la ayuda de la línea de comandos:
usage: git flow support [list] [-v]
git flow support start [-F] <version> <base>
estas ramas recién se inician y no están destinadas a fusionarse con master
ni develop
. Por lo general, esto está bien, ya que las correcciones de las versiones "antiguas" o las funciones solicitadas por los clientes para que se implementen en las versiones "antiguas" no pueden o no deben volver a utilizarse master
. Si todavía piensa que quiere portar una solución a su línea de desarrollo principal (representada por master
y develop
), simplemente comience hotfix
, seleccione sus cambios y finalice hotfix
.
git flow support
no está marcado como experimental.Parece principalmente un modelo mental con demasiado énfasis en las ramas. Estoy de acuerdo, puedes etiquetar las confirmaciones que liberas en lugar de fusionarlas de nuevo con el maestro.
Sin embargo, la imagen es bonita. La fusión de todo en el maestro da una indicación clara de las versiones en orden temporal en lugar de tener etiquetas de versión esparcidas por todo el gráfico.
Sin embargo, creo que este modelo no funciona para corregir errores en versiones anteriores. Echa a perder el orden ordenado.
Para responder a su pregunta: creo que este es un conjunto de reglas que lo convierten en un modelo mental simple en algunos casos. No todas las reglas tienen sentido desde un punto de vista puramente técnico, pero eso no las hace malas. Los modelos mentales son buenos para los humanos.
fuente
support
Las ramas están diseñadas para corregir errores en versiones anteriores, aunque todavía están etiquetadas como "experimentales".Personalmente, creo que el git-flow mencionado es demasiado complicado.
Si está utilizando GitHub, pruebe el
GitHub flow
(como lo describe Scott Chacon).Es especialmente útil para la colaboración en múltiples funciones, revisión de código y puede combinarlo con su solución de Integración Continua usando el
Commit Status API
.ACTUALIZACIÓN : Hay un nuevo sitio web oficial de The GitHub Flow ™
ACTUALIZACIÓN 2 : Hay una nueva guía oficial (y simplificada) de GitHub para The GitHub Flow ™: https://guides.github.com/introduction/flow/
fuente
master
una anomalía de la cronología del trabajo.support
ramas. Pero tiene razón, de hecho es una anomalía en la que dichos lanzamientos no se fusionanmaster
, lo que, según tengo entendido, debería contener todos los lanzamientos de producción.En mi caso, tengo dos versiones del mismo software que los conceptos básicos son los mismos pero cada versión tiene algunas características diferentes.
Así que creo dos
worktree
, es decir, creo dos ramas relevantes de larga duración junto al maestro.Luego tengo:
Hay un repositorio, pero tengo 3 carpetas separadas una al lado de la otra para cada rama anterior. Y realice los cambios habituales en master. luego fusionarlo con las otras dos versiones.
Los cambios específicos de cada versión también irán en la carpeta correspondiente, y los trabajos en cada proyecto están aislados y el IDE no se confundirá.
Espero que ayude.
fuente
Totalmente de acuerdo con @Mot.
Es bueno escuchar las mismas preguntas.
Nuestro equipo también fue buscado por un modelo de ramificación más universal que uno exitoso . Es decir, como @Mot se mencionó anteriormente, la idea principal es evitar la introducción de repositorios adicionales para admitir ramas de lanzamiento * en un repositorio * .git separado, como lo hace, por ejemplo, kernel.org para lanzamientos estables. Pero kernel.org lo hace para minimizar los tamaños descargados, supongo.
Para mí, parece que es más limpio tener master como línea principal para desarrollar .
También hay algunos conflictos en la versión: * fusionar el modelo para dominar y etiquetarlo después con la idea de
porque el acabado (fusión y etiquetado) no es una transacción atómica:
y si git hook comienza a compilar con soporte de control de versiones automático:
entonces es posible construir una versión errónea para:
Sé que el control de versiones en Successfull one introduce algún proceso de versión mejorada, pero no es automático.
Entonces, en resumen, las diferencias clave que presentamos en el modelo de rama para las versiones, * la combinación y el etiquetado son: - etiquetar la versión en la creación de su rama - mantener la rama de la versión para permitir su mantenimiento en el futuro
fuente
La rama maestra SIEMPRE debe representar la base de su código de producción, por lo tanto, siempre fusiona el código con el maestro justo después de una versión de producción.
El etiquetado se usa para "memorizar" el código exacto que entró en una versión de producción para que pueda volver más tarde y analizar el código si algo salió mal.
Con esto, en teoría, no debería importar si etiqueta su código en la rama de lanzamiento o en la rama maestra después de fusionarse nuevamente con la maestra. Personalmente, prefiero etiquetar el código en la rama de lanzamiento, ya que este es exactamente el código que se incluyó en la compilación / lanzamiento (asumiendo que algo puede salir mal con la fusión).
El problema con el concepto de rama de desarrollo es que es de un solo subproceso. Brendan en este hilo mencionó una estrategia que podría usarse con un concepto de rama de desarrollo.
fuente