Sobes.tech
Middle

¿En qué se diferencian los enfoques de Desarrollo Basado en Ramas Principales y Ramas de Funciones?

sobes.tech AI

Respuesta de la IA

Criterio Desarrollo Basado en Trunk (TBD) Ramificación de Funciones (FB)
Rama principal Una rama principal (trunk/main/master) Varias ramas de larga duración (develop, release, master)
Frecuencia de fusiones Muy frecuente (al menos una vez al día) Rara (después de completar una función)
Tamaño de las ramas de funciones Muy cortas (de minutos a horas) De larga duración (días a semanas)
Integración Integración continua (CI) es clave La integración ocurre con menos frecuencia, puede ser más compleja
Riesgo de conflictos Menos conflictos grandes, pero más pequeños y frecuentes Más conflictos grandes al fusionar ramas grandes
Tiempo de lanzamiento a producción Rápido y frecuente (entrega continua) Más lento y menos frecuente
Requisitos de pruebas Alto nivel de automatización de pruebas Las pruebas pueden realizarse más tarde en el ciclo
Tamaño del equipo Mejor para equipos pequeños y medianos, pero escalable con disciplina Adecuado para equipos grandes

Desarrollo Basado en Trunk:

  • Enfoque en integración frecuente de cambios pequeños directamente en la rama principal.
  • Requiere disciplina estricta, pruebas automatizadas y banderas de características para gestionar lanzamientos de funciones incompletas.
  • Reduce riesgos asociados con fusiones grandes.

Ramificación de Funciones:

  • Cada función se desarrolla en una rama separada.
  • La fusión solo ocurre después de completar la función.
  • Puede llevar a "ahogamiento" de cambios y conflictos complejos al fusionar si las ramas viven mucho tiempo.

Ejemplo de código para TBD (simplificado):

// El desarrollo se realiza directamente en main/trunk
public class FeatureA {
    public void doStuff() {
        // Código de la función A
    }
}

// Otro desarrollador hace commit en main/trunk casi al mismo tiempo
public class FeatureB {
    public void doOtherStuff() {
        // Código de la función B
    }
}

Ejemplo de código para FB (simplificado):

// El desarrollador 1 trabaja en la rama feature/A
// git checkout -b feature/A develop
public class FeatureA {
    public void doStuff() {
        // Código de la función A
    }
}

// El desarrollador 2 trabaja en la rama feature/B
// git checkout -b feature/B develop
public class FeatureB {
    public void doOtherStuff() {
        // Código de la función B
    }
}

// Después de completar la función A, la rama se fusiona en develop
// git checkout develop
// git merge feature/A

// Después de completar la función B, la rama se fusiona en develop
// git checkout develop
// git merge feature/B // Podrían surgir conflictos con el código de feature/A