Qu’est-ce que Gerrit ?
Gerrit est un outil de collaboration de code en équipe, gratuit, open-source et basé sur le web. Il s’intègre étroitement avec Git et agit comme un gardien strict pour votre base de code. Contrairement au modèle plus courant de pull-request où les développeurs fusionnent des branches de fonctionnalités, Gerrit centre son flux de travail sur les commits individuels (changements). Chaque commit doit être revu, vérifié et approuvé avant de pouvoir être fusionné dans l’historique officiel du projet, garantissant une branche principale linéaire et propre. Il est largement utilisé par des projets à grande échelle comme l’Android Open Source Project (AOSP).
Fonctionnalités Clés
- Revue de Code Basée sur le Web : Fournit une interface claire pour examiner le code, ajouter des commentaires en ligne et voter sur les changements.
- Contrôle d’Accès Strict : Offre des permissions granulaires au niveau du projet et de la branche, contrôlant qui peut soumettre, réviser et fusionner les changements.
- Gestion de Dépôt Git : Peut fonctionner comme un serveur Git principal, gérant tous les accès au dépôt via SSH et HTTP.
- Vérification Automatisée : S’intègre de manière transparente avec les systèmes de CI/CD comme Jenkins ou GitLab CI pour construire et tester automatiquement chaque changement proposé, fournissant un score “+1 Vérifié” ou “-1 Échec”.
- Flux de Travail Basé sur les Changements : Chaque commit est une unité de revue distincte avec un Change-ID unique. Cela facilite le suivi des itérations et la consultation de l’historique d’un changement spécifique.
- Architecture de Plugins Extensible : Prend en charge une large gamme de plugins pour ajouter de nouvelles fonctionnalités, intégrations et améliorations de l’interface utilisateur.
Cas d’Utilisation
- Projets d’Entreprise à Grande Échelle : Idéal pour les organisations qui exigent un processus de soumission de code strict, auditable et de haute qualité.
- Projets Open Source avec un Historique Linéaire : Utilisé par des projets comme Android, Go et Eclipse qui privilégient un historique de commits propre et non ramifié.
- Industries Réglementées : Convient aux environnements où chaque changement doit être documenté et approuvé avant son intégration.
- Vérification Pré-Commit : Parfait pour les flux de travail où rien ne doit entrer dans la branche principale sans passer les tests automatisés et la revue humaine.
Pour Commencer
Le flux de travail de Gerrit diffère d’une pull request Git standard. Au lieu de pousser une branche et d’ouvrir une PR, vous poussez un commit vers une référence “magique” spéciale.
-
Clonez le dépôt : Vous devez cloner le dépôt depuis Gerrit, ce qui installera un hook
commit-msgpour ajouter automatiquement un Change-ID unique à vos commits.# Remplacez par votre serveur Gerrit, projet et utilisateur git clone ssh://user@gerrit-server:29418/project.git cd project -
Faites et commitez votre changement : Créez votre modification de code et commitez-la comme d’habitude. Le hook ajoutera une ligne
Change-Id:à votre message de commit.echo "Ma nouvelle fonctionnalité" >> new_feature.txt git add new_feature.txt git commit -m "Ajouter ma nouvelle fonctionnalité géniale" -
Poussez pour la revue : Au lieu d’un
git pushnormal, vous poussez votre commit vers la destinationrefs/for/<branch>. Cela indique à Gerrit de créer une nouvelle revue de code.# Pousser le commit actuel vers la branche 'main' pour revue git push origin HEAD:refs/for/main
Gerrit répondra avec une URL vers la revue nouvellement créée, où vous et votre équipe pourrez discuter, tester et approuver le changement.
Tarification
Gerrit est entièrement gratuit et open-source, distribué sous la licence Apache 2.0. Vous êtes responsable du coût de l’hébergement et de la maintenance de votre propre instance.
Gerrit vs. Pull Requests
Une distinction clé est l’accent mis par Gerrit sur les commits par rapport au modèle de pull request qui se concentre sur les branches.
- Gerrit : Une revue est une série de patch sets appliqués à un seul commit. Le but est de perfectionner un commit avant sa fusion. Cela aboutit à un historique propre et linéaire.
- Pull/Merge Requests : Une revue est basée sur une branche contenant potentiellement de nombreux commits. La discussion a lieu au niveau de la branche, et toute la branche est fusionnée, créant souvent un “commit de fusion”.
Cela rend la courbe d’apprentissage de Gerrit plus abrupte, mais il offre un contrôle inégalé sur l’historique des commits.