Как настроить 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

Ура!