Ooops : хотя это допустимый метод, он предполагает, что вы фактически имеете полный контроль над сервером.Если вы используете размещенное решение, все ставки отключены.
Вы можете проверить имя автора и адрес электронной почты в хуке репозитория update
.Вы можете получить оба значения следующим образом:
#!/bin/sh
set -- refname sha1_old sha1_new
author_name=$(git log --pretty=format:%an $sha1_new)
author_email=$(git log --pretty=format:%ae $sha1_new)
Хитрость, конечно, заключается в том, чтобы выяснить, являются ли они действительными.Вот один трюк:
Вы можете использовать опцию command=""
в вашей конфигурации ssh, чтобы создать оболочку вокруг git-receive-pack
, которая сопоставляет ключи ssh с информацией об авторе.Например, что-то вроде этого:
#!/bin/sh
GV_AUTHOR_NAME="$1"
GV_AUTHOR_EMAIL="$2"
export GV_AUTHOR_EMAIL GV_AUTHOR_NAME
eval exec $SSH_ORIGINAL_COMMAND
И вы бы использовали строку authorized_keys
примерно так:
command="~/bin/gitvalidator 'Lars Kellogg-Stedman' 'lars@seas.harvard.edu'" ssh-rsa ...
В результате всего этого ваш скрипт update
будет иметь переменные окружения GV_AUTHOR_NAME
и GV_AUTHOR_EMAIL
и сможет проверить их на соответствие и выйти с ошибкой, если они не совпадают.