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
mergingtiene que realizarse por el métodoSquash. - 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:
hotfixdevelopgh-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:

La rama develop tendrá activada las siguientes restricciones:
Restrict deletionsRequire linear historyRequire a pull request before mergingRequired approvals: 3Allowed merge methods: Squash-Only
Block force pushes
La rama main tendrá activada todas las anteriores restricciones más las vistas a continuación:
Restrict creationsRestrict 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:

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:

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.

