Saltar a contenido

Restricciones

Como hemos mencionado en la anterior sección, cada rama tiene un uso especifico y dos de ellas solo se debe permitir modificar bajo circunstancias muy especificas.

Un problema con esto es que debido a error humano, es posible que el repositorio pierda su consistencia si un miembro del equipo empuja sus cambios accidentalmente a una de estas ramas, por suerte, GitHub proporciona configuraciones para prevenir este tipo de situaciones:

Restricciones de main y develop

Nuestros objetivos principales para proteger estas ramas son los siguientes:

  • Prevenir el empuje directo de commits o cualquier otra modificación.
  • Solo se deberían permitir cambios a través de Pull Requests. Estas necesitan la aprobación del equipo entero antes de ser fusionadas. Además, el merging tiene que realizarse por el método Squash.
  • Se requiere un historial lineal, no se permite hacer uso de merge commit.

En el caso de main, no se pueden crear ramas cuyos nombres no sigan la siguiente nomenclatura:

  • hotfix
  • develop
  • gh-pages

Para develop, los nombres tienen que empezar por feat/, después de / se escribe el nombre de la característica siendo creada, por ejemplo, feat/mkdocs.

Implementando las restricciones

En la configuración de nuestro repositorio, crearemos en la sección de Rules dos nuevas rulesets, las cuales utilizarán el mismo nombre que las ramas protegidas:

Lista de reglas del repositorio.

Lista de reglas del repositorio.

La rama develop tendrá activada las siguientes restricciones:

  • Restrict deletions
  • Require linear history
  • Require a pull request before merging
    • Required approvals: 3
    • Allowed merge methods: Squash-Only
  • Block force pushes

La rama main tendrá activada todas las anteriores restricciones más las vistas a continuación:

  • Restrict creations
  • Restrict updates

La última característica, Restrict branch names es de donde se diferenciarán también las dos ramas, para la rama principal, o main, queremos solo que se puedan crear tres ramas con un nombre exacto, por lo que utilizaremos un patrón RegEx que solo permita esos tres nombres:

Restricciones de la rama "main".

Restricciones de la rama "main".

En el caso de develop, queremos que solo se puedan crear ramas que empiezen por feat/, con lo que podemos utilizar la opción "Must start with a matching pattern" para crear nuestra regla:

Restricciones de la rama "develop".

Restricciones de la rama "develop".

Con todo esto, hemos completado nuestra configuración de las restricciones para nuestras ramas, ahora solo hace falta definir a qué rama apuntan y activarlas.

Configuración de la restricción de "main".

Configuración de la restricción de "main".

Configuración de la restricción de "develop".

Configuración de la restricción de "develop".