Как заблокировать нажатие на ведущую ветку на удаленном

Есть ли способ блокировать ввод кода непосредственно в master? Я попробовал добавить script в .git/hooks/update:

#!/bin/sh
if [ $USER != "git-repo-admin" ];
then
  if [ "$1" == refs/heads/master ];
  then
    echo "Manual pushing to this repo is restricted"
    exit 1
  fi
fi

Но это не сработает - все могут двигаться. Я хочу разрешить только конкретным пользователям нажимать, чтобы управлять и блокировать другие.

Ответ 1

Оригинальный script был идеальным, мне просто нужно было переименовать его с .git/hooks/update.sample на .git/hooks/update на удаленный сервер и убедиться, что он выполним.

#!/bin/sh
if [ $USER != "git-repo-admin" ];
then
  if [ "$1" == refs/heads/master ];
  then
    echo "Manual pushing to this repo is restricted"
    exit 1
  fi
fi

Ответ 2

Использование git перехватчиков для управления доступом может быть полезным как одноразовый хак, но может быть скользким уклоном, что приводит к жесткой конфигурации сервера git.

Таким образом, я бы рекомендовал настроить gitolite, что сделано именно для такого доступа контроль.
Он управляет голыми репозиториями (которые хороши для нажатия).

Вы можете найти пример предотвращения нажатия в ветке в разрешениях Gitolite на ветках:

repo @project
    RW+        = @git-repo-admin
    R   master = @developers
    -   master = @developers
    RW+        = @developers

Gitolite может полагаться на ssh для части аутентификации и автоматизировать процесс регистрации открытого ключа.

Но без Gitolite вы по-прежнему можете защитить доступ для чтения/записи к репозиции git, используя только ssh, как описано в разделе Git на Сервер - настройка сервера " Pro git Книга (как упоминалось Anthony Geoghegan в комментариях)

В качестве дополнительной меры предосторожности вы можете легко ограничить пользователя git только выполнением действий git с помощью ограниченного инструмента оболочки git-shell, который поставляется с Git.
Если вы установили это как ваш пользовательский интерфейс "git", то пользовательский "git" пользователь не имеет обычного доступа к вашему серверу. Чтобы использовать это, укажите git-shell вместо bash или csh для вашей оболочки входа в систему. Для этого вам, вероятно, придется отредактировать файл /etc/passwd.

Ответ 3

Вы можете перейти к настройкам репо → Филиалы

Git запрашивает, какую ветвь вы хотите защитить Git защита ветки