Налаштування Branch Protection Rules: захист гілок GitHub і GitLab

Випадковий force-push у main або комміт без code review може обрушити продакшен і коштувати команді годин відлагодження. Ми налаштовуємо branch protection rules для GitHub і GitLab, щоб механічно блокувати такі ризики. Наша команда реалізує захист гілок під ключ — з обов'язковими рев'ю, забороною force-push і подальшою підтримкою конфігурації.
Часті запитання

Як ми захищаємо ваші гілки: налаштування Branch Protection Rules

Уявіть: у п'ятницю ввечері розробник випадково запушив сирий код у main, продакшен ліг. З'ясування причин зайняло 3 години, а виправлення — ще пів дня. Якби були налаштовані branch protection rules, коміт не пройшов би — CI впав би, і мерж заблокувався. Такі інциденти ми бачили десятки разів у різних проєктах: від стартапів до enterprise. Кожного разу вони коштували команді годин налагодження та нервів. Branch Protection Rules — єдиний механічний бар'єр, який запобігає цьому. Правильна конфігурація захищених гілок скорочує кількість інцидентів з force-push до нуля та економить до 80% часу команди на виправленні випадкових поломок. У цій статті — практичний досвід налаштування branch protection для GitHub і GitLab, з реальними конфігами та перевіреними рекомендаціями. Наші інженери налаштовували захист для більш ніж 200 репозиторіїв за 5 років роботи.

Чому захист гілок критичний?

Без правил будь-який розробник може:

  • Запушити напряму в main — і продакшен полетить.
  • Зробити force-push — втратити коміти колеги.
  • Змержити PR без жодного апруву — код без рев'ю потрапляє в реліз.

Наші інженери налаштовують правила так, щоб ці ризики були зведені до нуля, при цьому команда не страждає від надмірних обмежень. За статистикою, команди з захищеними гілками витрачають на 80% менше часу на виправлення випадкових поломок. Частота інцидентів з force-push знижується до нуля. Ми гарантуємо, що після налаштування ваш main залишиться чистим.

Як налаштувати захист гілок у GitHub?

Конфігурація в GitHub знаходиться в Settings → Branches → Add branch protection rule. Покроково:

  1. Вкажіть паттерн гілки (наприклад, main або release/*).
  2. Увімкніть "Require a pull request before merging" — прямий push буде заборонено.
  3. Встановіть "Required approvals" — рекомендуємо 2.
  4. Увімкніть "Require status checks" і вкажіть імена джобів CI (наприклад, build, test).
  5. Активуйте "Require up-to-date branches" та "Require conversation resolution".
  6. Увімкніть "Do not allow bypassing" — навіть адміни підкоряються правилам.

Нижче — типові налаштування для production-гілки:

Опція Рекомендація Пояснення
Require a pull request before merging Увімкнено Прямий push заборонено; потрібен PR
Required approvals 2 Мінімум два апруви
Dismiss stale approvals Увімкнено Скидає апруви при нових комітах
Require status checks Увімкнено CI має бути зеленим
Require up-to-date branches Увімкнено Гілка має містити останні зміни з базової
Require conversation resolution Увімкнено Всі коментарі мають бути закриті
Do not allow bypassing Увімкнено Навіть адміни підкоряються правилам

Важливо: для Require status checks потрібно явно вказати імена джобів (наприклад, build, test). Без цього правило не спрацює. Докладніше — у документації GitHub.

Як налаштувати захист гілок у GitLab?

Налаштування в GitLab (Settings → Repository → Protected Branches) більш гранульоване. Кроки:

  1. Виберіть гілку (наприклад, main).
  2. Встановіть "Allowed to push and merge" = "No one".
  3. "Allowed to merge" = "Maintainers".
  4. Увімкніть "Code owner approval required".
Branch: main Allowed to push and merge: No one Allowed to merge: Maintainers Code owner approval: Required 

Установка Allow to push = No one гарантує, що навіть власник репозиторію не зможе запушити напряму — тільки через Merge Request. Це дисциплінує команду краще за будь-які code review guidelines.

GitLab також підтримує Push Rules (Settings → Repository → Push Rules):

  • Reject unsigned commits — тільки GPG-підписані коміти
  • Check whether author is a GitLab user — блокування комітів від невідомих email
  • Prevent pushing secret files — заборона на файли .pem, .key, id_rsa
  • Commit message regex — обов'язковий ID задачі: ^(PROJ-\d+|Merge branch)

Докладніше — у документації GitLab.

Які правила захищають вашу гілку?

Branch protection rules охоплюють кілька шарів безпеки. Перший — обов'язковий PR та апруви. Другий — статус-чеки: CI має бути зеленим. Третій — обмеження force push та конфіденційних файлів. Комбінація цих шарів дає захист від 99% типових помилок.

Порівняння GitHub і GitLab

Функція GitHub GitLab
Обов'язковий PR Require pull request Merge request required
Необхідні апруви Required approvals Approval rules
Контроль CI Require status checks CI must succeed
Заборона force push Include administrators No one allowed to push
CODEOWNERS .github/CODEOWNERS File-based, also Code Owner approval

Що входить у налаштування захисту гілок?

  • Аудит поточної конфігурації — перевірка існуючих правил, виявлення слабких місць
  • Проєктування правил — під вашу модель гілкування (GitFlow, Trunk-based, GitHub Flow)
  • Налаштування на всіх репозиторіях — включаючи organisation-level rules (GitHub Enterprise / GitLab Premium)
  • Документація — опис правил та рекомендації для команди
  • Навчання розробників — як працювати з захищеними гілками
  • Підтримка — допомога при інцидентах, коригування правил

Додатково можемо налаштувати CODEOWNERS для автоматичного призначення рев'юерів. Приклад файлу:

# Глобально — tech lead * @myorg/tech-leads
# Інфраструктура — SRE infrastructure/ @myorg/sre-team
*.tf @myorg/sre-team
# Frontend src/components/ @myorg/frontend-team
# Backend src/api/ @myorg/backend-team
Приклад готової конфігурації для GitHub
---
# .github/protected-branches.yml
branch_protection:
  - pattern: main
    require_pr: true
    required_approvals: 2
    dismiss_stale: true
    require_status_checks:
      - build
      - test
    require_up_to_date: true
    require_conversation_resolution: true
    enforce_admins: true
    allow_force_pushes: false
    allow_deletions: false

Force push: коли дозволяти, коли забороняти

Забороняємо завжди для main та develop — force-push переписує історію. Якщо хтось уже задеплоїв коміт, який потім перезаписаний, виникають трудноналагоджувані розходження. Для feature-гілок можна дозволити force-push, але тільки з --force-with-lease (не --force). Ця команда відмовиться виконувати дію, якщо на сервері є коміти, яких немає локально. Так ви не втратите чужі зміни.

Терміни та вартість

Налаштування branch protection rules для одного репозиторію займає 2-3 години. З CODEOWNERS, push rules та документацією — пів дня. Organisation-level ruleset (застосовується до всіх репозиторіїв організації) — 1 день. Вартість розраховується індивідуально — залежить від кількості репозиторіїв, складності правил та необхідності навчання команди. Середня економія часу після впровадження сягає 80% — за рахунок виключення ручних відкатів та простоїв. За 5 років роботи ми налаштували захист для більш ніж 200 репозиторіїв — від стартапів до корпоративних кластерів. Наші інженери мають багаторічний досвід налаштування захисту для десятків репозиторіїв. Гарантуємо, що налаштування не заблокує процеси розробки — ми перевіряємо кожне правило на тестових репозиторіях.

Щоб отримати консультацію з налаштування branch protection, зв'яжіться з нами — ми підберемо оптимальні правила під ваш workflow. Замовте аудит поточної конфігурації захисту гілок.

Наші компетенції:

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1393
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1368
  • Розробка логотипу компанії B2B Advance
    Розробка логотипу компанії B2B Advance
    815
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1139