Las ramas y los tags
Los tags (etiquetas)
Un tag es un alias (un nombre) definido por un desarrollador, cuya función es apuntar a un commit. Permite identificar fácilmente un commit. Los tags se utilizan para nombrar en determinados momentos el estado del repositorio. Los tags permiten evitar el uso de hashs SHA-1, que no son explícitas y difíciles de recordar.
Los tags se utilizan en concreto para marcar los números de versión sobre los commits.
1. Numeración de las versiones
Hay varias formas de numerar las versiones de software. No existe un método perfecto para elegir los números de versión. Hay que ser coherente con el sistema elegido.
El sistema SemVer (Semantic Versioning) es un sistema cuya filosofía es dar un número de versión que tenga sentido en el ciclo de vida del software. Este sistema es utilizado en proyectos de gran envergadura como Python o Django y está perfectamente adaptado a los proyectos de pequeño tamaño.
El número de versión se construye a partir de tres números separados por puntos: x.y.z.
Significado de los tres números:
-
La x marcará una versión mayor. Una versión mayor es una versión que entraña cambios importantes en el funcionamiento de la aplicación o que induce una incompatibilidad con una versión anterior.
-
La y marcará una versión menor. Una versión menor es una versión que añade funcionalidades manteniendo la compatibilidad con el sistema anterior.
-
La z señalará un parche. Un parche corresponde a correcciones de errores («bugs») sin añadir funcionalidad.
Así, podemos imaginar un extracto de la lista de cambios (changelog) de un software de conversión de vídeo:
-
1.8.5: corrección...
Las ramas (Branch)
El sistema de ramas es una de las funcionalidades más interesantes de Git. Las ramas son un concepto que se encuentra en casi todos los demás sistemas de versionado.
Una rama corresponde en realidad a una versión paralela del curso de desarrollo. Una rama puede servir para desarrollar nuevas funcionalidades o corregir posibles errores sin integrar estos cambios en la versión principal del software. Las ramas permiten segmentar diferentes versiones en curso de desarrollo.
Ya ha utilizado una rama desde el comienzo de este libro, sin necesariamente haber prestado atención. Por defecto, cuando trabajamos con un repositorio de Git, se crea una rama master. Es en esta rama donde hay que realizar todas las operaciones.
En realidad, y al igual que los tags, las ramas son alias. Es decir, que un tag o una rama define un nombre en un commit. La diferencia entre ambos es que el commit relacionado con el tag es estático y para una rama la referencia es dinámica.
A continuación se muestra un ejemplo de sistema de ramas en forma de gráfico. Este ejemplo se refiere a una empresa que edita un software de contabilidad con registro de pedidos de clientes.
Gráfico generado empleando gitgraph.js disponible en GitHub : https://github.com/nicoespeon/gitgraph.js
En este ejemplo compuesto por cinco commits, el primero representa la rama de desarrollo. Todas las nuevas funcionalidades se incorporan en esta rama.
El segundo commit (hash 7ffc9a4) corresponde al primer commit después de la creación de una rama. De forma más sencilla, esta es la ruta que permite llegar a este commit:
-
El desarrollador ha creado una rama (por ejemplo, llamada cuadro_de_mando_pedidos) a partir del commit 892f8d4.
-
El desarrollador programó luego la parte de interfaz web de la nueva funcionalidad y guardó sus modificaciones en un commit. Es después de este commit que la rama existe realmente en el histórico. En ese momento, el alias cuadro_de_mando_pedidos apunta al commit 7ffc9a4.
Para el tercer commit, el desarrollador tuvo que corregir rápidamente un error en el registro de pedidos. Hizo la modificación en la rama de desarrollo, ya que esta modificación debía ser puesta en producción con rapidez para corregir los problemas de los clientes.
El cuarto commit corresponde al desarrollo de una parte de la nueva funcionalidad;...