Versionamiento Semántico y Control de Versiones en Git

Clase 3 de 22Curso de Despliegue de Aplicaciones Python en la Nube

Resumen

¿Qué es el control de versiones y por qué es importante?

Para cualquier desarrollo de software efectivo, el control de versiones es una herramienta indispensable. Permite gestionar los cambios en los archivos de un proyecto, asegurando que las nuevas actualizaciones no rompan funcionalidad existente. Python, por ejemplo, hace uso del versionamiento semántico, que nos ayuda a entender qué cambios se han realizado en el repositorio sin una revisión exhaustiva.

¿Cómo funciona el versionamiento semántico?

El versionamiento semántico utiliza un sistema numérico para identificar versiones: mayor, menor y patch. Por ejemplo, la versión 1.0.0 indica:

  • Versión mayor (Major): La primera cifra, que se incrementa cuando hay cambios que rompen la compatibilidad con versiones anteriores.

    • Ejemplo: actualizar de 1.0.0 a 2.0.0 tras un cambio significativo.
  • Versión menor (Minor): La segunda cifra, incrementada al añadir nuevas funcionalidades que no afectan la compatibilidad existente.

    • Ejemplo: incrementar de 1.0.0 a 1.1.0 tras introducir una nueva funcionalidad.
  • Patch: La tercera cifra, que se modifica por lo general para corregir errores en producción sin afectar funcionalidades.

    • Ejemplo: subir de 1.0.0 a 1.0.1 para un arreglo menor.

¿Cómo se utiliza el versionamiento semántico en Git?

En Git, el comando git tag es fundamental para etiquetar versiones. Esto permite que nuestro sistema de despliegue identifique qué versión de la aplicación debe lanzarse, ya sea en producción o en un entorno de pruebas.

Ejemplo práctico:

Para crear una etiqueta de versión en Git utiliza:

git tag -a v1.0.0 -m "Lanzamiento de la versión 1.0.0"
git push origin v1.0.0

¿Qué son las ramas y cómo se utilizan en Git Flow?

Las ramas o "branches" permiten que el desarrollo y prueba de nuevas funcionalidades no interrumpan el código estable actual. Git Flow es una metodología que organiza el trabajo en varias ramas:

  • Main/Master: Contiene las versiones etiquetadas y el código que está en producción.
  • Develop: Se utiliza para el desarrollo continuado; debe mantenerse estable para que otros desarrolladores la usen como base.
  • Feature: Ramas temporales donde se desarrolla una nueva funcionalidad. Parten de develop y, una vez completadas, se integran de nuevo.
  • Hotfix: Se crean a partir de main cuando un error crítico necesita ser corregido de inmediato. Los cambios se integran luego de vuelta a main y develop.

Flujo de trabajo:

  1. Crear una rama Feature:

    git checkout develop
    git checkout -b feature/login
    
  2. Corregir un error crítico con Hotfix:

    git checkout main
    git checkout -b hotfix/correct-bug
    # Corrige el error, haz commit y push
    git checkout main
    git merge hotfix/correct-bug
    git push origin main
    

Recomendaciones para el uso efectivo del control de versiones

  1. Etiqueta todas las versiones lanzadas: Asegura un historial claro de los cambios realizados.
  2. Utiliza el versionamiento semántico: Facilita el entendimiento de los cambios para cualquier miembro del equipo.
  3. Implementa Git Flow: Organiza el desarrollo, permitiendo introducir cambios de forma controlada y efectiva.
  4. Realiza revisiones de código y pruebas antes de fusionar ramas: Minimiza los errores y asegura la calidad del código antes de integrarlo en main.

El control de versiones es esencial para un desarrollo ágil y organizado, garantizando la calidad y estabilidad del software en todas sus etapas. ¡Continúa explorando su potencial!