Что такое Gerrit?
Gerrit — это бесплатный, веб-ориентированный инструмент для совместной работы над кодом с открытым исходным кодом. Он тесно интегрируется с Git и действует как строгий контролер для вашей кодовой базы. В отличие от более распространенной модели pull-request, где разработчики сливают ветки с функционалом, Gerrit центрирует свой рабочий процесс вокруг отдельных коммитов (изменений). Каждый коммит должен быть рассмотрен, проверен и одобрен, прежде чем он может быть слит в официальную историю проекта, обеспечивая линейную и чистую основную ветку. Он активно используется в крупномасштабных проектах, таких как Android Open Source Project (AOSP).
Ключевые особенности
- Веб-рецензирование кода: Предоставляет понятный интерфейс для просмотра кода, добавления встроенных комментариев и голосования за изменения.
- Строгий контроль доступа: Предлагает гранулированные разрешения на уровне проекта и ветки, контролируя, кто может отправлять, рецензировать и сливать изменения.
- Управление репозиториями Git: Может функционировать как основной Git-сервер, управляя всем доступом к репозиторию через SSH и HTTP.
- Автоматизированная проверка: Бесшовно интегрируется с системами CI/CD, такими как Jenkins или GitLab CI, для автоматической сборки и тестирования каждого предлагаемого изменения, предоставляя оценку “+1 Проверено” или “-1 Неудачно”.
- Рабочий процесс на основе изменений: Каждый коммит является отдельной единицей для рецензирования с уникальным Change-ID. Это упрощает отслеживание итераций и просмотр истории конкретного изменения.
- Расширяемая архитектура плагинов: Поддерживает широкий спектр плагинов для добавления новых функций, интеграций и улучшений пользовательского интерфейса.
Сценарии использования
- Крупномасштабные корпоративные проекты: Идеально подходит для организаций, которым требуется строгий, проверяемый и высококачественный процесс отправки кода.
- Проекты с открытым исходным кодом с линейной историей: Используется такими проектами, как Android, Go и Eclipse, которые отдают предпочтение чистой, неразветвленной истории коммитов.
- Регулируемые отрасли: Подходит для сред, где каждое изменение должно быть задокументировано и одобрено перед интеграцией.
- Проверка перед коммитом: Идеально для рабочих процессов, где ничто не должно попадать в основную ветку без прохождения автоматических тестов и человеческой проверки.
Начало работы
Рабочий процесс в Gerrit отличается от стандартного pull request в Git. Вместо того чтобы отправлять ветку и открывать PR, вы отправляете коммит в специальную “магическую” ссылку.
-
Клонируйте репозиторий: Вам нужно клонировать репозиторий из Gerrit, что установит хук
commit-msgдля автоматического добавления уникального Change-ID в ваши коммиты.# Замените на ваш сервер Gerrit, проект и пользователя git clone ssh://user@gerrit-server:29418/project.git cd project -
Сделайте и закоммитьте ваше изменение: Создайте изменение в коде и закоммитьте его как обычно. Хук добавит строку
Change-Id:в ваше сообщение коммита.echo "Моя новая функция" >> new_feature.txt git add new_feature.txt git commit -m "Добавить мою потрясающую новую функцию" -
Отправьте на рецензию: Вместо обычного
git push, вы отправляете свой коммит вrefs/for/<branch>. Это говорит Gerrit создать новую рецензию кода.# Отправить текущий коммит в ветку 'main' на рецензию git push origin HEAD:refs/for/main
Gerrit ответит URL-адресом на только что созданную рецензию, где вы и ваша команда сможете обсудить, протестировать и одобрить изменение.
Цены
Gerrit является полностью бесплатным и с открытым исходным кодом, распространяется под лицензией Apache 2.0. Вы несете ответственность за расходы на хостинг и обслуживание собственного экземпляра.
Gerrit против Pull Requests
Ключевое различие заключается в том, что Gerrit фокусируется на коммитах, в то время как модель pull request — на ветках.
- Gerrit: Рецензия — это серия наборов исправлений, применяемых к одному коммиту. Цель — довести до совершенства один коммит перед его слиянием. Это приводит к чистой, линейной истории.
- Pull/Merge Requests: Рецензия основана на ветке, которая может содержать много коммитов. Обсуждение происходит на уровне ветки, и вся ветка сливается, часто создавая “коммит слияния”.
Это делает кривую обучения Gerrit более крутой, но предоставляет непревзойденный контроль над историей коммитов.