Похоже, вы исключили возможность использования среды хостинга для своего репо-источника. Хотя существует много вариантов размещения программного обеспечения, и они имеют более удобные интерфейсы для управления контролем доступа (помимо прочего), они не для всех. Так что в этом случае вы, вероятно, будете использовать хук предварительного получения для контроля доступа.
Хук - это просто скрипт, который запускается в определенное время. Хук предварительного получения запускается, когда кто-то подталкивает к репо, и его состояние выхода определяет, принято ли пуш.
Первая проблема заключается в том, как аутентифицировать пользователя (поскольку такие вещи, как имя коммиттера и адрес электронной почты устанавливаются по усмотрению клиента). Я полагаю, что самым простым вариантом будет принять только те коммиты, которые были подписаны определенным пользователем (ей) на master
, но если вы не планируете использовать подписи, это может показаться излишним. Другой вариант - принимать только запросы от ssh, и в этом случае я считаю, что вы можете получить имя пользователя из переменных среды.
После того, как вы аутентифицировали пользователя, вы можете проверить, есть ли master
(или любая другая ветка, которую вы хотите защитить) в списке обновленных ссылок, и если это так, решить, принимать ли толчок или нет, основываясь на вашем правила авторизации.
Но, чтобы быть ясным, этот подход все "составляет сценарий, который делает это"; git поддерживает это только в том случае, если «он выполнит сценарий, который вы ему дадите, прежде чем решить, принять ли push». Что возвращает нас к преимуществам использования программного обеспечения для хостинга.