Есть ли способ заблокировать ветку в GIT - PullRequest
41 голосов
/ 18 марта 2010

У меня есть идея заблокировать репозиторий от пользователей, вставляющих в него файлы, с помощью скрипта блокировки в хуке обновления GIT, поскольку push-файл может распознавать только идентификатор пользователя в качестве аргументов, а не ветви. Так что я могу заблокировать весь репо, который просто блокирует каталог.

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

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

Ответы [ 3 ]

39 голосов
/ 26 июля 2011

Разветвленная ветвь является первым параметром ловушки обновления . Если вы хотите заблокировать ветку 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's locked"
    echo "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
    exit 1
fi
exit 0
9 голосов
/ 18 марта 2010

Обновление, из документации:

Хук выполняется один раз для каждого обновления, которое будет обновлено, и принимает три параметра:

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

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

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

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

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

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

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

7 голосов
/ 18 марта 2010

Такой инструмент, как гитолит, имеет такую ​​особенность, которую я считаю: http://github.com/sitaramc/gitolite

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...