Как настроить post-receive-email Git hook с Gitolite
Я использую post-receive-email
hook из дистрибутива Git для отправки сообщений электронной почты определенным пользователям, когда обновляется репозиторий Git (крючок вызывается из post-receive
).
Все мои репозитории управлялись вручную. Теперь у меня так много репозиториев и так много пользователей и групп, которые мне нужно обновить до некоторой системы управления репозиториями Git. Я выбрал Гитолит.
Но я немного теряю информацию о том, как настроить уведомления по электронной почте.
Обновление: я немного уточню вопрос:
Первый вопрос: где я должен положить крючок и изменить его каким-то образом, чтобы он работал с Gitolite?
Второй вопрос:
Стандартный post-receive-email
hook зависит от трех параметров в *.git/config
: hooks.envelopesender
, hooks.emailprefix
и hooks.mailinglist
.
Эти параметры, вообще говоря, различны для каждого репозитория, который я перемещаю под Gitolite. На практике они одинаковы для тех же групп разрешений - пользователи, которые имеют доступ к репозиторию, получают уведомления, другие - нет.
Я хотел бы избежать редактирования файла config
для каждого репозитория вручную. Было бы намного веселее, если бы я мог сконфигурировать все в одном и том же централизованном месте для целого Гитолита.
Итак, любые подсказки?
Ответы
Ответ 1
Вы можете посмотреть doc hook для стартеров:
, где я (администратор) клал крючки?
В общем, все перехватчики попадают в каталог hooks/common
. Только специальный крюк после обновления, предназначенный для репо admin
, переходит в hooks/gitolite-admin
.
Но GitoliteV3 doc в 'mirroring' предоставляет альтернативу пользовательскому подключению.
Во второй вопрос:
Я хотел бы избежать редактирования файла конфигурации для каждого репозитория вручную.
Было бы намного веселее, если бы я мог сконфигурировать все в одном и том же централизованном месте для целого Гитолита.
doc gitolite.conf совершенно ясно:
специальные команды git конфигурации репо
Иногда вы хотите указать настройки git config
для некоторых ваших репозиториев.
Например, у вас может быть пользовательский крюк post-receive, который отправляет электронное письмо при нажатии push, и этот крючок должен знать, кому отправить электронное письмо и т.д.
Вы можете установить значения git config
, указав что-то вроде этого в абзаце "repo":
пример использования: если вы разместили крючок в hooks/common
, который требует информации о конфигурации, специфичной для каждого репо, вы можете сделать это:
repo gitolite
config hooks.mailinglist = [email protected]
config hooks.emailprefix = "[gitolite] "
config foo.bar = ""
config foo.baz =
Синтаксис прост:
config sectionname.keyname = [optional value_string]
Это делает либо простой "git config section.key value
" (для первых 3 примеров выше), либо "git config --unset-all section.key
" (для последнего примера).
Другие формы (--add
, value_regex
и т.д.) Не поддерживаются.
Примечание: это не сработает, если файл rc
не имеет правильных настроек; см. комментарии вокруг переменной $GL_GITCONFIG_KEYS
$GIT_CONFIG_KEYS
(теперь в GitoliteV3 или 'g3') в gitolite rc
file для получения подробной информации и информации о безопасности.
Ответ 2
на данный момент это не работает:
repo @all
config foo.bar = "baz"
Я предполагаю, что вы хотели бы, чтобы это сработало, но это немного низкое в моем списке прямо из-за других давлений и того факта, что есть обходное решение:
@almostall = repo1 repo2 repo3
@almostall = repo4 repo5 repo6 [add as many more as you like]
[... later ...]
repo @almostall
config foo.bar = "baz"
Надеюсь, что это поможет, и извините за недосмотр на @all
Ответ 3
Вот один быстрый лайнер для добавления описаний в ваш gitolite.conf с тем же именем, что и репо. Вам это нужно, если вы используете этот большой подход @almostall и gitolite, чтобы у вас были описания для каждого репо. Это избавило меня от часа ввода текста, поэтому мне пришлось делиться:
Попробуйте сначала:
sed 's/^\(repo *\)\(.*\)/\1\2\n\t\t\2 = "\2"/' gitolite.conf
Затем попробуйте с редактированием на месте, но сделайте резервную копию ранее:
cp gitolite.conf gitolite.conf.backup
Затем выполните редактирование на месте:
sed -i 's/^\(repo *\)\(.*\)/\1\2\n\t\t\2 = "\2"/' gitolite.conf
Ура!