Защищённые ветки (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.
Чтобы создать правило:
- Нажмите «Добавить правило ветки».
- Выберите «Имя или шаблон ветки».
- Укажите имя конкретной ветки (например,
main) или шаблон с подстановочным символом*(например,release/*). Правило с шаблоном защищает все подходящие ветки, включая те, которые будут созданы позже. - Нажмите «Создать правило ветвления».
Чтобы открыть настройки существующего правила, нажмите «Просмотреть детали» напротив него в списке.
Настройка доступа к защищённой ветке
На странице правила в секции «Защитить ветку» настраиваются два списка доступа:
- «Разрешено слияние» — кто может выполнять слияние 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и выше.