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

git git-branch

55603 просмотра

3 ответа

4050 Репутация автора

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

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

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

Автор: Senthil A Kumar Источник Размещён: 18.03.2010 04:02

Ответы (3)


9 плюса

364009 Репутация автора

Хук обновления, из документов:

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

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

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

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

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

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

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

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

Автор: Cascabel Размещён: 18.03.2010 04:07

7 плюса

426 Репутация автора

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

Автор: amx Размещён: 18.03.2010 04:24

40 плюса

45980 Репутация автора

Решение

Разветвленная ветвь является первым параметром в хуке обновления . Если вы хотите заблокировать ветку 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
Автор: eckes Размещён: 26.07.2011 08:06
Вопросы из категории :
32x32