Есть ли способ заблокировать ветвь в GIT
У меня есть идея заблокировать репозиторий от пользователей, нажимая в него файлы, имея блокировку script в облове обновления GIT, так как push может распознавать идентификатор пользователя только как аргументы, а не ветки. Поэтому я могу заблокировать все репо, которое просто блокирует каталог.
Есть ли способ заблокировать конкретную ветвь в GIT?
Или существует способ, которым Update Hook может идентифицировать, из какой ветки пользователь нажимает и на какую ветвь нажимает код?
Ответы
Ответ 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