¿Qué es Gerrit?
Gerrit es una herramienta de colaboración de código en equipo, gratuita, de código abierto y basada en la web. Se integra estrechamente con Git y actúa como un estricto guardián para tu base de código. A diferencia del modelo más común de pull-request, donde los desarrolladores fusionan ramas de características, Gerrit centra su flujo de trabajo en commits individuales (cambios). Cada commit debe ser revisado, verificado y aprobado antes de que pueda ser fusionado en el historial oficial del proyecto, asegurando una rama principal lineal y limpia. Es muy utilizado por proyectos a gran escala como el Android Open Source Project (AOSP).
Características Clave
- Revisión de Código Basada en Web: Proporciona una interfaz limpia para revisar código, agregar comentarios en línea y votar sobre los cambios.
- Control de Acceso Estricto: Ofrece permisos detallados a nivel de proyecto y rama, controlando quién puede enviar, revisar y fusionar cambios.
- Gestión de Repositorios Git: Puede funcionar como un servidor Git principal, gestionando todo el acceso al repositorio a través de SSH y HTTP.
- Verificación Automatizada: Se integra perfectamente con sistemas de CI/CD como Jenkins o GitLab CI para compilar y probar automáticamente cada cambio propuesto, proporcionando una puntuación de “+1 Verificado” o “-1 Fallido”.
- Flujo de Trabajo Basado en Cambios: Cada commit es una unidad revisable distinta con un Change-ID único. Esto facilita el seguimiento de iteraciones y la visualización del historial de un cambio específico.
- Arquitectura de Plugins Extensible: Admite una amplia gama de plugins para agregar nuevas características, integraciones y mejoras en la interfaz de usuario.
Casos de Uso
- Proyectos Empresariales a Gran Escala: Ideal para organizaciones que requieren un proceso de envío de código estricto, auditable y de alta calidad.
- Proyectos de Código Abierto con Historial Lineal: Utilizado por proyectos como Android, Go y Eclipse que priorizan un historial de commits limpio y no ramificado.
- Industrias Reguladas: Adecuado para entornos donde cada cambio debe ser documentado y aprobado antes de su integración.
- Verificación Pre-Commit: Perfecto para flujos de trabajo donde nada debe entrar en la rama principal sin pasar pruebas automatizadas y revisión humana.
Primeros Pasos
El flujo de trabajo de Gerrit difiere de una pull request estándar de Git. En lugar de empujar una rama y abrir una PR, empujas un commit a una referencia “mágica” especial.
-
Clona el repositorio: Necesitas clonar el repositorio desde Gerrit, lo que instalará un hook
commit-msgpara agregar automáticamente un Change-ID único a tus commits.# Reemplaza con tu servidor Gerrit, proyecto y usuario git clone ssh://user@gerrit-server:29418/project.git cd project -
Haz y confirma tu cambio: Crea tu cambio de código y confírmalo como lo harías normalmente. El hook agregará una línea
Change-Id:a tu mensaje de commit.echo "Mi nueva funcionalidad" >> new_feature.txt git add new_feature.txt git commit -m "Añadir mi nueva e increíble funcionalidad" -
Empuja para revisión: En lugar de un
git pushnormal, empujas tu commit al destinorefs/for/<branch>. Esto le dice a Gerrit que cree una nueva revisión de código.# Empujar el commit actual a la rama 'main' para revisión git push origin HEAD:refs/for/main
Gerrit responderá con una URL a la revisión recién creada, donde tú y tu equipo podréis discutir, probar y aprobar el cambio.
Precios
Gerrit es completamente gratuito y de código abierto, distribuido bajo la Licencia Apache 2.0. Eres responsable del costo de alojar y mantener tu propia instancia.
Gerrit vs. Pull Requests
Una distinción clave es el enfoque de Gerrit en los commits frente al modelo de pull request que se centra en las ramas.
- Gerrit: Una revisión es una serie de conjuntos de parches aplicados a un solo commit. El objetivo es perfeccionar un commit antes de que se fusione. Esto da como resultado un historial limpio y lineal.
- Pull/Merge Requests: Una revisión se basa en una rama de potencialmente muchos commits. La discusión ocurre a nivel de rama, y toda la rama se fusiona, a menudo creando un “commit de fusión”.
Esto hace que la curva de aprendizaje de Gerrit sea más pronunciada, pero proporciona un control sin igual sobre el historial de commits.