¿Cuáles son los pros y los contras de git-flow vs github-flow? [cerrado]

125

Recientemente hemos comenzado a usar GitLab.

Actualmente utilizando un flujo de trabajo "centralizado".

Estamos considerando pasar al flujo de github, pero quiero asegurarme.

¿Cuáles son los pros y los contras de git-flow vs github-flow ?

Paul McKenzie
fuente

Respuestas:

133

Como se discutió en el episodio 17 de GitMinutes, por Nicholas Zakas en su artículo sobre " Flujos de trabajo de GitHub dentro de una empresa ":

Git-flow es un proceso para gestionar cambios en Git creado por Vincent Driessen y acompañado de algunas extensiones de Git para gestionar ese flujo.
La idea general detrás de git-flow es tener varias ramas separadas que siempre existen, cada uno con un propósito diferente: master, develop, feature, release, y hotfix.
El proceso de desarrollo de características o errores fluye de una rama a otra antes de que finalmente se lance.

Algunos de los encuestados indicaron que usan git-flowen general.
Algunos comenzaron git-flowy se alejaron de él.

La razón principal para alejarse es que el git-flowproceso es difícil de manejar en un modelo de implementación continua (o casi continua).
La sensación general es que git-flowfunciona bien para productos en un modelo de lanzamiento más tradicional, donde los lanzamientos se realizan una vez cada pocas semanas, pero que este proceso se rompe considerablemente cuando se lanza una vez al día o más .

En breve:

Comience con un modelo lo más simple posible (como suele ser el flujo de GitHub) y avance hacia un modelo más complejo si es necesario.


Puede ver una ilustración interesante de un flujo de trabajo simple , basado en GitHub-Flow en:
" Un modelo de ramificación git simple ", cuyos elementos principales son:

  1. master siempre debe ser desplegable.
  2. todos los cambios realizados a través de ramas de características (solicitud de extracción + fusión)
  3. rebase para evitar / resolver conflictos; unirse conmaster

https://a248.e.akamai.net/camo.github.com/9783623eba280ba5ace8b9e63842be52af2f0546/687474703a2f2f7374617469632e62656e65742e61692f736b697463682f666c6f772d39933333333333333333333333333333333333331333333333333333333333333333333333333333333333333333333 por 13 por ciento por segundo por debajo de la mitad de la pantalla de la pantalla de la pantalla de la pantalla de inicio de sesión de la página web de https://a248.e.akamai.net/camo.github.com/9783624


Para un flujo de trabajo real más completo y robusto, vea gitworkflow (una palabra) .

VonC
fuente
88

No hay flujo de trabajo de bala de plata donde todos deberían seguir, ya que todos los modelos son subóptimos. Dicho esto, puede seleccionar el modelo adecuado para su software en función de los siguientes puntos;

Varias versiones en producción: use Git-flow

Si su código tiene múltiples versiones en producción (es decir, productos de software típicos como sistemas operativos, paquetes de Office, aplicaciones personalizadas, etc.), puede usar git-flow. La razón principal es que necesita admitir continuamente versiones anteriores en producción mientras desarrolla la próxima versión.

Versión única en software simple de producción: use Github-flow

Si su código solo tiene una versión en producción en todo momento (es decir, sitios web, servicios web, etc.), puede usar github-flow. La razón principal es que no necesita cosas complejas para el desarrollador. Una vez que el desarrollador finaliza una función o finaliza una corrección de errores, se promociona inmediatamente a la versión de producción.

Versión única en producción pero software muy complejo: use Gitlab-flow

Con un software grande como Facebook y Gmail, es posible que deba introducir ramas de implementación entre su rama y la rama maestra donde podrían ejecutarse las herramientas de CI / CD>, antes de que entre en producción. La idea es introducir más protección a la versión de producción, ya que es utilizada por millones de personas.

Gayan Pathirage
fuente
77
Simplemente agregue "Gitdmz-flow" / "Git DMZ Flow" a la lista: gist.github.com/djspiewak/9f2f91085607a4859a66
Robert Fey
1
Las empresas a las que se hace referencia utilizan un sistema basado en troncales. paulhammant.com/2014/01/08/…
PatrickWalker
1
El flujo de Git DMZ es más similar a Gitflow y la rama de DMZ es como la rama de desarrollo. Por lo tanto, no siento nada especial al respecto.
Gayan Pathirage
2
Según tengo entendido, Git-Flow no funciona bien con la versión de producción múltiple. La estrategia de revisión supone que solo tiene una versión de producción y realiza la revisión en la rama de lanzamiento correspondiente (y luego la fusiona para desarrollar la rama). Parece no atender cómo puede solucionar un error que existe en la rama de producción múltiple.
Adrian Shum
55
@GayanPathirage En realidad no lo es. 1. Etiquetas "clásicas" de GitFlow en master. La rama de revisión es solo para que usted pueda corregir la última versión de producción (del maestro). 2. "rama de lanzamiento" significa algo más en Gitflow, que en realidad es la rama de vista previa previa al lanzamiento (ramificación desde la rama de desarrollo y destinada a fusionarse con master cuando realmente se lanza). 3. A lo que se refiere es a algo llamado "rama de soporte" en GitFlow (esa es una razón por la que no me gusta GitFlow: terminología no convencional). Sin embargo, todavía es un flujo experimental (por lo que no lo ves en la mayoría de las introducciones de Gitflow)
Adrian Shum
38

He estado usando el modelo git-flow durante más de un año y está bien.

Pero realmente depende de cómo se desarrollará y desplegará su aplicación.

Funciona bien cuando tiene una aplicación que tiene un flujo lento de desarrollo / implementación.

Pero, por ejemplo, al igual que GitHub, tenemos una aplicación que tiene un flujo de desarrollo / implementación rápido, implementamos todos los días, y a veces varias veces al día, en este caso, git-flow tiende a ralentizar todo en mi opinión, y uso GitHub fluir.

La otra cosa a tener en cuenta es que git-flow no es git estándar, por lo que podría, y cuando digo que sí, quiero decir, encontrará desarrolladores que no lo saben, y luego está la curva de aprendizaje, más oportunidad de estropear las cosas. Además, como se mencionó anteriormente, alguien desarrolló un conjunto de scripts para facilitar el uso de git-flow, por lo que no tiene que recordar todos los comandos, lo ayudará con los comandos, pero recordar el flujo real es su trabajo , Me he encontrado más de una vez cuando un desarrollador no sabía si se trataba de una revisión o característica, o incluso peor cuando no pueden recordar el flujo y rellenar las cosas.

Hay al menos una GUI que admite git-flow para Mac y Windows SourceTree .

En estos días, me estoy inclinando más hacia el flujo de GitHub, debido a su simplicidad y facilidad de administración. Además, debido a "desplegar despliegue temprano a menudo" ...

Espero que esto ayude

Diego Antunes
fuente
+1. Estoy de acuerdo contigo.
VonC
2
El flujo de GitHub está dentro de Git-Flow. Piense que si necesita una integración continua y una implementación continua, simplemente puede ejecutar tanto como sea posible con la sucursal de desarrollo. Cada característica se ramifica desde la rama de desarrollo. Es posible que no necesite la rama maestra o las ramas de lanzamiento a menos que tenga modelos de implementación complejos. (por ejemplo, su versión 1.1 está en vivo en algún cliente, su 1.2 está en vivo en otro cliente y actualmente desarrolla 1.3 para su nuevo cliente) Los 3 clientes solicitarán correcciones de errores y cambios en sus respectivas versiones.
Gayan Pathirage
Hola Diego y gracias por tu respuesta. ¿Qué pasa con el mantenimiento de múltiples versiones? ¿Lo haces fácilmente con Git Flow? ¡Escuché que es difícil ya que necesitas ramas de apoyo! ¿Crees que el modelo es adecuado para hacerlo?
Luis Gouveia
1
Hola Luis, creo que puedes hacer que el modelo funcione, pero nuevamente siento que puedes lograr lo mismo con un flujo de trabajo estándar de git.
Diego Antunes
1
@LuisGouveia en realidad, desde su pregunta y mi respuesta anterior, me encontré con un proyecto que git-flow funcionará perfectamente, y tengo la propiedad del proyecto. La idea es usar git flow release...en combinación con acciones de github para implementar la aplicación. En mi respuesta original, mencioné que lanzamos varias veces en un día, esto causó problemas al usar git-flow. La razón por la que creo que git-flow funcionará bien en este proyecto es porque tenemos un ciclo de lanzamiento predefinido, que es uno de los principales puntos de venta para usar git-flow.
Diego Antunes el