Git Flow

Git Flow es un modelo de ramas basado en Git, diseñado para ayudar a los equipos a gestionar y publicar software de manera más eficiente.

Git Flow fue propuesto por Vincent Driessen en 2010, y mediante un conjunto estándar de nomenclatura de ramas y flujos de trabajo, hace que los procesos de desarrollo, prueba y publicación sean más ordenados y eficientes.

Git Flow se compone principalmente de los siguientes tipos de ramas:master、develop、feature、release、hotfix。

Instalación de Git Flow

Linux

Debian/Ubuntu:

sudo apt-get install git-flow

Fedora:

sudo dnf install gitflow
sudo apt-get install git-flow

macOS

En macOS, puedes usar Homebrew para instalar Git Flow:
brew install git-flow

Instalación desde el código fuente

Si el gestor de paquetes de tu distribución no incluye Git Flow, también puedes instalarlo desde el código fuente:

git clone https://github.com/nvie/gitflow.git
cd gitflow
sudo make install

Una vez completada la instalación, puedes verificar si Git Flow se instaló correctamente con el siguiente comando:

git flow version

Windows

En Windows, puedes instalar Git Flow de las siguientes maneras:

  • Usar Git for Windows: Git for Windows incluye Git Flow. PuedesGit for Windowsinstalar Git y luego usar Git Bash para utilizar Git Flow.

  • Usar Scoop: Si usas la herramienta de gestión de paquetes Scoop, puedes instalar Git Flow con el siguiente comando:

    scoop install git-flow
  • Usar Chocolatey: Si usas la herramienta de gestión de paquetes Chocolatey, puedes instalar Git Flow con el siguiente comando:

    choco install gitflow

Modelo de ramas de Git Flow

masterRama:

  • Mantiene siempre un estado estable y listo para publicar.
  • Cada vez que se publica una nueva versión, desdedevelopla rama se fusiona enmasterla rama.

developRama:

  • Se utiliza para integrar todas las ramas de desarrollo.
  • Representa el último progreso del desarrollo.
  • Las ramas de características, las ramas de publicación y las ramas de corrección se ramifican desde aquí y finalmente se fusionan de vuelta aquí.

featureRama:

  • Se utiliza para desarrollar nuevas funcionalidades.
  • desdedevelopLa rama se crea, y una vez finalizado el desarrollo, se fusiona de vuelta adevelopla rama.
  • Convención de nomenclatura:feature/feature-name。

releaseRama:

  • Se utiliza para preparar la publicación de una nueva versión.
  • desdedevelopSe crea desde la rama, se realizan las últimas pruebas y correcciones, y luego se fusiona de vuelta adevelopymasterla rama, y se etiqueta con la versión.
  • Convención de nomenclatura:release/release-name。

hotfixRama:

  • Se utiliza para corregir problemas urgentes.
  • desdemasterSe crea desde la rama, y una vez completada la corrección, se fusiona de vuelta amasterydevelopla rama, y se etiqueta con la versión.
  • Convención de nomenclatura:hotfix/hotfix-name。

Principios de operación de las ramas

  • Cada commit en la rama Master debe tener una etiqueta (tag), y la rama Develop se crea a partir de Master.
  • Una vez completada la rama Feature, se fusiona de vuelta a la rama Develop y normalmente se elimina dicha rama.
  • La rama Release se crea a partir de Develop, se utiliza para pruebas y corrección de errores; tras la publicación, se fusiona de vuelta a Master y Develop, y se etiqueta con el número de versión.
  • La rama Hotfix se crea a partir de Master; una vez completada, se fusiona de vuelta a Master y Develop, y se etiqueta con un tag.1。

Ejemplos de comandos de Git Flow

  • Iniciar una rama Feature:git flow feature start MYFEATURE
  • Completar una rama Feature:git flow feature finish MYFEATURE
  • Iniciar una rama Release:git flow release start RELEASE [BASE]
  • Completar una rama Release: fusionar en Master y Develop, etiquetar con un tag, eliminar la rama Release.
  • Iniciar una rama Hotfix:git flow hotfix start HOTFIX [BASE]
  • Completar una rama Hotfix: fusionar en Master y Develop, etiquetar con un tag, eliminar la rama Hotfix.

Flujo de trabajo de Git Flow

1. Inicializar Git Flow

Primero, inicializa Git Flow en el proyecto. Puedes usar un complemento de Git Flow (por ejemplo,git-flow) para simplificar la operación.

git flow init

Al inicializar, debes configurar las reglas de nomenclatura de ramas y la rama predeterminada.

2. Crear una rama de funcionalidad

Cuando se comienza a desarrollar una nueva funcionalidad, desdedevelopla rama se crea una rama de funcionalidad.

git flow feature start feature-name

Una vez completado el desarrollo, se fusiona la rama de funcionalidad de vuelta adevelopla rama, y se elimina la rama de funcionalidad.

git flow feature finish feature-name

3. Crear una rama de publicación

Cuando se está preparando la publicación de una nueva versión, desdedevelopla rama se crea una rama de publicación.

git flow release start release-name

Se realizan las últimas pruebas y correcciones en la rama de publicación; una vez lista para publicar, se fusiona la rama de publicación de vuelta adevelopymasterla rama, y se etiqueta con la versión.

git flow release finish release-name

4. Crear una rama de corrección

Cuando se detecta un problema que requiere una corrección urgente, desdemasterla rama se crea una rama de corrección.

git flow hotfix start hotfix-name

Una vez completada la corrección, se fusiona la rama de corrección de vuelta amasterydevelopla rama, y se etiqueta con la versión.

git flow hotfix finish hotfix-name

Ejemplo práctico

A continuación se muestra un ejemplo completo de uso real de Git Flow.

Inicializar Git Flow:

git flow init

Crear y completar una rama de funcionalidad:

git flow feature start new-feature # 开发新功能
git flow feature finish new-feature

Crear y completar una rama de publicación:

git flow release start v1.0.0 # 测试和修复
git flow release finish v1.0.0

Crear y completar una rama de corrección:

git flow hotfix start hotfix-1.0.1. # 修复紧急问题
git flow hotfix finish hotfix-1.0.1

Ventajas y desventajas

Ventajas

  • Modelo de ramas claro: Las reglas claras de nomenclatura y uso de ramas hacen que el proceso de desarrollo sea ordenado.
  • Aislamiento de desarrollo y publicación: La separación de los procesos de desarrollo y publicación reduce el impacto de la incertidumbre del desarrollo en la publicación.
  • Gestión de versiones: Cada publicación y corrección se etiqueta con la versión, lo que facilita el seguimiento y la gestión.

Desventajas

  • Complejidad: Para equipos pequeños o proyectos simples, el modelo de ramas de Git Flow puede resultar demasiado complejo.
  • Fusiones frecuentes: En equipos grandes, las fusiones frecuentes de ramas pueden aumentar los conflictos de fusión.

Git Flow es un modelo estructurado de gestión de ramas que, mediante la definición de ramas y flujos de trabajo claros, ayuda a los equipos a gestionar mejor el proceso de desarrollo y publicación de software. Aunque añade cierta complejidad, para proyectos grandes y colaboración en equipo, Git Flow ofrece un sólido soporte y capacidad de gestión.

Otras extensiones