¿Qué es un merge request?
Un merge request (llamado en otros sistemas pull request) es una petición para fusionar los cambios de la rama de un repositorio de Git en otra. Esta opción es utilizada en los sistemas de control de versiones de código para poder simplificar el trabajo de equipo entre programadores.
¿Cuál es el propósito de un merge request?
Cuando un programador crea un merge request (pull request), crea también una solicitud para que otro miembro de su equipo realice la aprobación de los cambios antes de que estos se funcionen con otra rama del proyecto (pudiendo ser la principal u otra de mayor relevancia). Cuando este proceso se lleva acabo, se garantiza la revisión a detalle del trabajo entre los integrantes del equipo de trabajo de un proyecto. También se genera una forma unificada de discutir los cambios que se van a llevar acabo, mediante el uso de comentarios y de consejos para la mejora de la calidad del código.
¿Qué permite prevenir el uso de un merge request?
En lugar de realizar los cambios directamente en master, un merge request permite:
- Ver los cambios que se van a integrar.
- Permitir a la pipeline ejecutarse sin tener que escribir en la rama principal.
- Permitir cambios adicionales a ser ejecutados y ver el estatus específico de la pipeline para esta rama en específico.
- Proporcionar a otros desarrolladores la posibilidad de recibir retroalimentación relacionada al código que han escrito para completar su asignación antes de que este sea integrado en la rama principal.
¿Cómo proteger la rama main/master en GitLab?
Para prevenir que se escriba directamente en la rama main de GitLab, vamos a la opción Settings > Repository > Protected Branches, en este apartado para la rama main cambiamos el valor de Allowed to push (permiso para escribir) a No one (ninguno). Esto previene que se empujen cambios directamente en main y que todos tengan que ir a través de un merge request.
También es importante realizar la configuración necesaria de las merge requests dentro de Settings > General > Merge Requests, en este apartado dos configuraciones son importantes.
- Pipelines must succeed (Las pipelines a integrar deben desplegar correctamente).
- All discussions must be resolved (Todas las retroalimentaciones a nivel del código deben ser resueltas).
¿Cómo creo un merge request?
Para crear un merge request en GitLab requerimos tener una rama creada a partir de main.
git checkout main
git checkout -b feature/001_feature_name
Realizamos los cambios necesarios sobre nuestra rama y después empujamos dichos cambios.
git add archivo_que_ha_sido_modificado
git push
Dentro de GitLab vamos a la opción Repository > Branches > feature/001_feature_name > Merge Request, esto nos abrirá el formulario para crear un nuevo merge request.
Una opción importante de esta sección es Delete source branch when merge request is accepted (Borrar la branch cuando esta sea integrada), lo que implica que esta rama será eliminada del repositorio una vez que sea integrada en main.
Al crear el merge request aparecerá una pantalla con el progreso de la pipeline y un botón Merge habilitado cuando la pipeline se despliegue correctamente. Si damos clic a este botón se fusionará la rama actual con main, completando así el merge request y realizando el despliegue de esta integración a la pipeline principal que contiene los elementos staging y production.
Podemos controlar el flujo de despliegue mediante merge requests, estos permiten aislar el desarrollo de features, tasks y bugfixes de manera independiente y luego integrarlos a la rama main cuando han sido debidamente probados. El uso de ramas y merge requests permite evitar trabajar con la rama main directamente y llevar una integración y despliegue continuo.
¿Cómo reviso y comento en un merge request en GitLab?
- Verifica los cambios sugeridos en la opción Changes (Cambios). Puedes comparar los cambios del código entre la rama original y aquella a fusionar.
- Realiza un comentario de ser necesario, haz clic en la línea de código a comentar y escribe el comentario.
- Si el comentario que deseas hacer es general y no relacionado con una línea, ve a la sección Discussion (Discusión) y utiliza el arroba @ para mencionar al colaborador que deseas notificar.
- Al finalizar, aprueba o rechaza el merge request en la pestaña Review.
- Para aprobar el merge request, utiliza el botón Approve (Aprobar).
- Para rechazar el merge request, utiliza el botón Reject (Rechazar) indicando en los comentarios la razón.
- Al ser aprobado el merge puedes completar la fusión utilizando el botón Merge (fusionar) que completará el proceso.