Запретить git push для удаленного репозитория, если имя пользователя pusher не настроено - PullRequest
1 голос
/ 13 декабря 2010

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

foreach commit in pushed_stuff:
   if not commit.username in some_list:
       reject push

Хук pre-receive кажется подходящим, но как мне извлечь имя пользователя из каждого полученного объекта фиксации?update, кажется, получает имена объектов, но, насколько я понимаю, это происходит, когда он уже находится в моем хранилище (непосредственно перед перемещением ссылки).

РЕДАКТИРОВАТЬ: Это не означает, что какой-то механизм безопасности только дляПозвольте определенным людям давить на меня.Я доверяю всем, но иногда люди путаются и забывают настроить свои .gitconfig.

ОБНОВЛЕНИЕ: у меня была проблема с предложением VonC.При использовании предварительного получения, если кто-то выдвигает новую ветку, <old-value> равен «000000000».Так что, если он сделал несколько коммитов в эту новую ветку и попытался протолкнуть ее, выполнив git rev-list ... $ new дает мне только один коммит.Но, возможно, другие коммиты до того, как у него было плохое имя пользователя, я хочу отклонить.Я не мог найти способ сказать git дать мне все новые коммиты.Когда ветвь уже существует, выполните git rev-list ... $ old .. $ new сделает эту работу.

1 Ответ

1 голос
/ 13 декабря 2010

Я полагаю, что это немного рассматривается в " Git / gitosis: Как проверить правильность имени пользователя и адреса электронной почты? ".

Теперь упомянутый вопрос SO касается механизма безопасности (который вам не нужен), но:

git log -1 --pretty=format:%ae $new

может помочь в pre-receive хуке , как подсказывает Бомба в его ответе .
%an или %aN могут быть более адаптированы к вашему случаю.

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

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

где:

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

При создании новой ссылки <old-value> равно 40 0.

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