Подтвердить что ты не робот

Есть ли способ заблокировать ветвь в GIT

У меня есть идея заблокировать репозиторий от пользователей, нажимая в него файлы, имея блокировку script в облове обновления GIT, так как push может распознавать идентификатор пользователя только как аргументы, а не ветки. Поэтому я могу заблокировать все репо, которое просто блокирует каталог.

Есть ли способ заблокировать конкретную ветвь в GIT?

Или существует способ, которым Update Hook может идентифицировать, из какой ветки пользователь нажимает и на какую ветвь нажимает код?

4b9b3361

Ответ 1

Вложенная ветвь является первым параметром привязки . Если вы хотите заблокировать ветвь myfeature для нажатия, этот код (помещенный в hooks/update) будет делать это:

#!/bin/sh
# lock the myfeature branch for pushing
refname="$1"

if [[ $refname == "refs/heads/myfeature" ]]
then
    echo "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
    echo "You cannot push to myfeature! It locked"
    echo "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
    exit 1
fi
exit 0

Ответ 2

Крюк обновления из документов:

Крюк выполняется один раз для каждого ref, который должен быть обновлен, и принимает три параметра:

  • имя обновляемого ref,
  • имя старого объекта, сохраненное в ref,
  • и новое имя объекта, которое будет сохранено в ссылке.

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

И если вы хотите (разумно) сделать это до того, как пользователь загрузил объекты, вы можете использовать крюк pre-receive:

Этот крючок выполняется один раз для операции приема. Он не принимает аргументов, но для каждого ref, который нужно обновить, он получает на стандартном вводе строку формата:

<old-value> SP <new-value> SP <ref-name> LF

где <old-value> - это старое имя объекта, сохраненное в ref, <new-value> - это новое имя объекта, которое должно быть сохранено в ref, и <ref-name> - полное имя ссылки.

(это пробелы и строки)

Ответ 3

У инструмента, такого как гитолит, есть такая функция, которую я считаю: http://github.com/sitaramc/gitolite