Защищённые ветки (protected branches) ограничивают изменение важных веток репозитория: отправлять изменения (push) и выполнять слияние в такую ветку могут только те, кому это явно разрешено. Обычно защита используется для веток main, master, релизных и стабильных веток — чтобы изменения попадали в них только через merge request и код-ревью.

Ветка проекта, назначенная веткой по умолчанию, защищается автоматически при его создании.

Ограничения защищённых веток

Для защищённой ветки действуют следующие ограничения:

  • Прямая отправка изменений (git push) запрещена для всех, кроме пользователей, указанных в списке «Разрешено выполнять push и слияние». Остальные участники вносят изменения через merge request.
  • Принудительная отправка (git push --force) запрещена для всех, пока в правиле ветки не включена настройка «Разрешить force push».
  • Ветку нельзя удалить командами Git. Удаление доступно только через веб-интерфейс пользователям с ролью Maintainer и выше.

Защита ветки по умолчанию

При создании проекта его ветка по умолчанию автоматически становится защищённой. Начальный уровень защиты задаётся настройкой «Защита начальной ветки по умолчанию»:

  • На уровне инстанса — раздел «Область администратора» → «Настройки» → «Репозиторий», секция «Ветка по умолчанию». Настройка доступна администраторам инстанса.
  • На уровне группы — на странице группы перейдите в раздел «Настройки» → «Репозиторий», секция «Ветка по умолчанию». Настройка доступна пользователям с ролью Owner в группе.

Настройка группы имеет приоритет над настройкой инстанса: если в группе она не задана, действует настройка инстанса. Для проектов в личном пространстве пользователя всегда действует настройка инстанса.

По умолчанию применяется полная защита: push и слияние разрешены только участникам с ролью Maintainer и выше, force push запрещён.

Правила веток

Защита настраивается через правила веток. Для этого откройте страницу проекта и перейдите в раздел «Настройки» → «Репозиторий» → «Правила веток». Настройка доступна пользователям с ролью Maintainer и Owner.

Чтобы создать правило:

  1. Нажмите «Добавить правило ветки».
  2. Выберите «Имя или шаблон ветки».
  3. Укажите имя конкретной ветки (например, main) или шаблон с подстановочным символом * (например, release/*). Правило с шаблоном защищает все подходящие ветки, включая те, которые будут созданы позже.
  4. Нажмите «Создать правило ветвления».

Чтобы открыть настройки существующего правила, нажмите «Просмотреть детали» напротив него в списке.

Настройка доступа к защищённой ветке

На странице правила в секции «Защитить ветку» настраиваются два списка доступа:

  • «Разрешено слияние» — кто может выполнять слияние merge request в эту ветку.
  • «Разрешено выполнять push и слияние» — кто может отправлять изменения в ветку напрямую (git push), а также выполнять слияние.

Чтобы изменить соответствующий список, нажмите «Изменить права на слияние» или «Изменить права на push и слияние».

В каждом списке можно комбинировать роли, отдельных пользователей и группы. В списке «Разрешено выполнять push и слияние» дополнительно доступны ключи развёртывания. Доступ получает каждый, кто подходит хотя бы под один из выбранных пунктов.

Доступные варианты:

Пункт списка Кому предоставляет доступ
«Мейнтейнеры» Участникам проекта с ролью Maintainer и выше
«Разработчики и Мейнтейнеры» Участникам проекта с ролью Developer и выше
«Никто» Никому. Доступ по ролям полностью закрыт
«Администраторы» Администраторам инстанса
«Пользователи» Перечисленным участникам проекта с правом записи в репозиторий (роль Developer и выше). Подробнее — в разделе «Доступ для отдельных пользователей и групп»
«Группы» Прямым участникам перечисленных групп с ролью в группе Developer и выше. Группа должна быть приглашена в проект с ролью не ниже Developer. Подробнее — в разделе «Доступ для отдельных пользователей и групп»
«Ключи развёртывания» Владельцу выбранного ключа развёртывания, в том числе при отправке изменений по этому ключу. Ключ должен быть включён в проекте с правом записи, а владелец ключа — быть участником проекта. Доступно только для списка «Разрешено выполнять push и слияние»

Доступ для отдельных пользователей и групп

Помимо ролей, доступ к защищённой ветке можно выдать точечно — конкретным пользователям и группам. Это позволяет, например, закрыть ветку для всех (выбрав «Никто») и разрешить слияние только релиз-менеджеру, не повышая его роль в проекте.

Пользователи

В селекторе «Пользователи» можно выбрать участников проекта с правом записи в репозиторий — пользователей с ролью Developer и выше, включая участников, унаследованных из родительской группы.

Добавление пользователя в список не повышает его права в проекте. Участник без роли Developer и выше не сможет отправлять изменения в защищённую ветку, даже если он указан в списке.

Эти списки позволяют сузить круг тех, кому право записи уже выдано ролью. Например, выберите «Никто» в ролях и перечислите конкретных пользователей — тогда работать с этой веткой смогут только они.

Группы

В селекторе «Группы» отображаются только группы, приглашённые в проект с ролью Developer и выше. Приглашение группы настраивается в разделе «Управление» → «Участники» проекта.

Родительские группы проекта и группы, приглашённые с меньшей ролью, выбрать нельзя.

Доступ через группу получают только прямые участники этой группы с ролью в ней Developer и выше. Участники вложенных подгрупп доступа не получают.

Прекращение действия доступа

Права проверяются в момент каждой операции, поэтому изменения членства применяются сразу:

  • если пользователь перестал быть участником проекта, его доступ к защищённой ветке перестаёт действовать;
  • если приглашение группы в проект отозвано или её роль понижена ниже Developer, доступ участников группы перестаёт действовать.

Запись при этом остаётся в списке доступа и снова начнёт действовать, если членство или приглашение будет восстановлено. Чтобы окончательно отозвать доступ, удалите пользователя или группу из списка в правиле ветки.

Разрешить force push

Переключатель «Разрешить force push» на странице правила разрешает принудительную отправку изменений (git push --force) в защищённую ветку. Пользователи, которым разрешён force push, определяются списком «Разрешено выполнять push и слияние». По умолчанию переключатель выключен, и force push запрещён для всех, включая мейнтейнеров и администраторов.

Особенности и ограничения

  • Доступ, выданный на защищённую ветку, не меняет роль пользователя в проекте и не предоставляет ему дополнительные права. Он действует только на операции push и слияния в ветки, подпадающие под правило.
  • Правило с шаблоном (например, release/*) применяется ко всем существующим и будущим веткам, имена которых соответствуют шаблону.
  • Выбор пункта «Никто» отключает доступ по ролям, но не очищает списки пользователей, групп и ключей развёртывания. Перечисленные в них сущности сохраняют доступ.
  • Настраивать правила веток могут только пользователи с ролью Maintainer и выше.