Открыть сервис

Gerrit

Gerrit — это распределённая система рецензирования кода (code review), основанная на Git. Она предоставляет веб-интерфейс для управления процессом внесения изменений в исходный код, позволяя разработчикам отправлять патчи (наборы изменений), которые перед включением в основную ветку проекта проходят проверку и обсуждение другими участниками команды. Gerrit тесно интегрирован с Git и выступает в роли центрального сервера, контролирующего поток изменений в репозиторий.

История

Система была разработана инженерами компании Google для внутренних нужд. Первоначально она называлась Rietveld, но в 2009 году была переписана с нуля на языке Java с использованием технологии Google Web Toolkit (GWT) и получила название Gerrit. Основной целью создания было обеспечение строгого контроля качества кода в крупных проектах, таких как Android и Chrome. В 2010 году Gerrit стал открытым проектом под лицензией Apache 2.0, что позволило использовать его в других компаниях и сообществах.

С момента открытия исходного кода проект активно развивается сообществом разработчиков. Ключевые версии включали внедрение поддержки плагинов, улучшение производительности для больших репозиториев и интеграцию с различными системами непрерывной интеграции. Наиболее заметным пользователем Gerrit остаётся проект Android (AOSP — Android Open Source Project), где система используется для управления всеми изменениями в платформе.

Архитектура и принцип работы

Gerrit работает по модели «push-to-review». В отличие от централизованных систем контроля версий, где разработчик напрямую отправляет изменения в общий репозиторий, Gerrit выступает промежуточным звеном. Процесс работы выглядит следующим образом:

  1. Отправка изменений: Разработчик создаёт локальную ветку, вносит изменения и фиксирует их (commit). Затем он отправляет (push) эту ветку в специальную ссылку (refs/for/<branch>) на сервере Gerrit, а не напрямую в целевую ветку.
  2. Создание рецензии: Сервер Gerrit принимает изменения, создаёт для них уникальную запись — «изменение» (change). Изменение получает номер и веб-страницу, где отображается diff (разница) между новым и старым кодом.
  3. Рецензирование: Другие разработчики (рецензенты) просматривают diff, оставляют комментарии к конкретным строкам кода, задают вопросы и предлагают исправления. Рецензент может выставить одну из оценок:
  • -2: Вето (изменение не может быть принято).
  • -1: Не одобряю, но не блокирую.
  • 0: Нет мнения.
  • +1: Одобряю, но не принимаю решение.
  • +2: Одобряю и рекомендую к принятию.
  1. Доработка: Если рецензент запросил изменения, разработчик вносит правки в свою локальную ветку, делает новый commit и снова отправляет его в ту же ссылку refs/for/. Gerrit автоматически обновляет существующее изменение, показывая новую версию патча (patch set).
  2. Принятие: После того как изменение получило оценку +2 от как минимум одного рецензента (настройки могут различаться) и прошло все автоматические проверки (например, сборка и тесты), уполномоченный разработчик (обычно мейнтейнер проекта) нажимает кнопку «Submit» (Отправить). Gerrit выполняет слияние (merge) изменений в целевую ветку репозитория.

Ключевые возможности

Рецензирование кода

Основная функция Gerrit — обеспечение прозрачного и структурированного процесса рецензирования. Каждое изменение отображается в виде набора изменений (diff) с подсветкой добавленных, удалённых и изменённых строк. Комментарии привязываются к конкретным строкам кода, что делает обсуждение предметным.

Управление правами доступа

Gerrit предоставляет гибкую систему прав доступа (ACL — Access Control List). Администратор проекта может настроить, кто может отправлять изменения, кто может рецензировать, а кто — принимать изменения. Права можно назначать на уровне проектов, веток или даже отдельных файлов. Это позволяет реализовать различные модели управления, например, требовать обязательное рецензирование для изменений в критических модулях.

Интеграция с системами непрерывной интеграции (CI)

Gerrit активно взаимодействует с CI-системами, такими как Jenkins, GitLab CI, Travis CI и другими. При отправке нового патча Gerrit может автоматически запускать сборку и тесты на CI-сервере. Результаты выполнения (успех/неудача) отображаются непосредственно в интерфейсе изменения. CI-система может выставлять свою оценку (например, Verified +1 или Verified -1), которая может быть обязательным условием для принятия изменения.

Поддержка нескольких репозиториев

Gerrit поддерживает работу с несколькими репозиториями в рамках одного сервера. Это удобно для крупных проектов, состоящих из множества связанных модулей. Изменения в разных репозиториях могут быть связаны между собой через специальные зависимости.

Плагины

Архитектура Gerrit основана на плагинах, что позволяет расширять его функциональность. Существуют плагины для интеграции с различными системами отслеживания ошибок (Jira, Bugzilla), для автоматического назначения рецензентов, для анализа кода (например, статический анализ) и для других задач.

Применение

Gerrit наиболее популярен в крупных проектах с открытым исходным кодом и в корпоративной среде, где требуется строгий контроль качества кода. Основные области применения:

  • Разработка операционных систем: Проект Android (AOSP) является одним из самых известных пользователей Gerrit. Вся разработка платформы проходит через эту систему.
  • Крупные программные продукты: Компании, разрабатывающие сложные программные комплексы (например, в сфере телекоммуникаций, финансов, авиастроения), используют Gerrit для обеспечения соответствия кода стандартам и требованиям безопасности.
  • Встраиваемые системы: Разработка прошивок и драйверов, где ошибки могут привести к дорогостоящим последствиям, часто требует обязательного рецензирования.
  • Научные и исследовательские проекты: В проектах, где важна воспроизводимость и прозрачность изменений, Gerrit обеспечивает полную историю рецензий.

Сравнение с другими системами

Gerrit часто сравнивают с другими инструментами рецензирования кода, такими как GitHub Pull Requests, GitLab Merge Requests и Bitbucket Pull Requests. Основные отличия:

  • Модель рецензирования: Gerrit изначально спроектирован для строгого, многоэтапного рецензирования с обязательными оценками. GitHub и GitLab предлагают более гибкий, но менее формализованный процесс.
  • Интеграция с Git: Gerrit работает на уровне Git-сервера, перехватывая push-запросы. GitHub и GitLab работают на уровне веб-интерфейса, создавая запросы на слияние (pull/merge request) на основе существующих веток.
  • Производительность: Для очень больших проектов с тысячами разработчиков и миллионами строк кода Gerrit часто показывает более высокую производительность и масштабируемость, чем GitHub или GitLab, благодаря своей архитектуре.
  • Сложность настройки: Gerrit считается более сложным в настройке и администрировании по сравнению с GitHub и GitLab, которые предлагают более простой интерфейс и готовые облачные решения.

Критика

Несмотря на свои преимущества, Gerrit подвергается критике за:

  • Сложность интерфейса: Веб-интерфейс Gerrit, особенно в старых версиях, считается менее интуитивно понятным по сравнению с современными платформами.
  • Крутая кривая обучения: Новым разработчикам может быть сложно освоить процесс отправки изменений через refs/for/ и понимание системы оценок.
  • Ограниченные возможности для обсуждения: Встроенные инструменты для обсуждения (комментарии, форматирование) менее развиты, чем в GitHub или GitLab.

Интересные факты

  • Название «Gerrit» происходит от имени голландского архитектора Геррита Ритвельда (Gerrit Rietveld), в честь которого также назван протокол Rietveld (первоначальное название системы).
  • Исходный код самого Gerrit также управляется через Gerrit, то есть разработчики Gerrit используют свою же систему для рецензирования изменений в ней самой.
  • В 2019 году компания Google объявила о переводе разработки Android на внутреннюю систему, однако Gerrit по-прежнему используется для внешних участников AOSP.

Источники

  • Официальная документация проекта Gerrit Code Review (gerrit-documentation.storage.googleapis.com)
  • Репозиторий исходного кода Gerrit на GitHub (gerrit-review.googlesource.com)
  • Статья «Gerrit Code Review» в английской Википедии
  • Материалы конференций и блогов, посвящённые разработке ПО и инструментам рецензирования кода

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →