Как настроить Git-хук после получения электронной почты с помощью Gitolite

Я использую хук post-receive-email из дистрибутива Git для отправки электронных писем определенным пользователям при обновлении репозитория Git (хук вызывается из post-receive).

Все мои репозитории управлялись вручную. Теперь у меня так много репозиториев и так много пользователей и групп, что мне нужно перейти на какую-нибудь систему управления репозиторием Git. Я выбрал Гитолит.

Но я немного не понимаю, как настроить уведомления по электронной почте.

Обновление: я немного уточню вопрос:

Первый вопрос: куда мне поставить крючок и нужно ли его как-то изменить, чтобы он работал с Gitolite?

Второй вопрос:

Стандартный хук post-receive-email зависит от трех параметров в *.git/config: hooks.envelopesender, hooks.emailprefix и hooks.mailinglist.

Эти параметры, в общем-то, разные для каждого репозитория, который я перемещаю под Gitolite. На практике они одинаковы для одних и тех же групп разрешений — пользователи, имеющие доступ к репозиторию, получают уведомления, остальные — нет.

Я хотел бы избежать редактирования файла config для каждого репозитория вручную. Было бы намного веселее, если бы я мог настроить все в одном и том же централизованном месте для всего Gitolite.

Итак, любые намеки?


person Alexander Gladysh    schedule 20.02.2011    source источник
comment
Стоит отметить расположение по умолчанию распределенного post-received-email: /usr/share/doc/git/contrib/hooks/post-receive-email   -  person Pierre de LESPINAY    schedule 02.09.2014


Ответы (4)


Для начала вы можете посмотреть док-хук:

куда мне (админу) ставить крючки?

Как правило, все хуки идут в каталог hooks/common. Только специальный хук после обновления, предназначенный для репозитория admin, входит в hooks/gitolite-admin.

Но GitoliteV3 документ по зеркалированию предоставляет альтернативу пользовательскому хуку.


По второму вопросу:

Я хотел бы избежать редактирования файла конфигурации для каждого репозитория вручную.
Было бы намного веселее, если бы я мог настроить все в одном и том же централизованном месте для всего Gitolite.

В doc gitolite.conf все ясно:

специфичные для репозитория команды git config

Иногда вам нужно указать git config настройки для некоторых ваших репозиториев.
Например, у вас может быть настраиваемый хук после получения, который отправляет электронное письмо, когда происходит 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" (для первых трех примеров выше), либо "git config --unset-all section.key" (для последнего примера).
Другие формы (--add, value_regex и т. д.) не поддерживаются.

Примечание: это не сработает, если файл rc не имеет правильных настроек; см. комментарии вокруг переменной $GL_GITCONFIG_KEYS $GIT_CONFIG_KEYS (теперь в GitoliteV3 или 'g3 ') в файле gitolite rc для получения подробной информации и информации о безопасности.

person VonC    schedule 21.02.2011
comment
Хорошо, кажется, что это должно работать. Есть ли хороший способ централизовать параметры конфигурации ловушек для всех репозиториев (hooks.envelopesender, hooks.emailprefix, hooks.envelopesender)? - person Alexander Gladysh; 21.02.2011
comment
@Alexander: все хуки централизованы в hooks/common в вашей локальной копии gitolite. Скрипт easy-install обновит его до удаленного gitolite-admin и скопирует эти хуки в каждый репозиторий. - person VonC; 21.02.2011
comment
@VonC: Это я понимаю. Но хук post-receive-email имеет свои собственные параметры конфигурации (находящиеся в *.git/config). Я так понимаю, что теперь мне придется вручную редактировать config файла для каждого репозитория. Это звучит не очень весело. Я хотел бы сделать это из одного центрального места, точно так же, как я делаю это с разрешениями на репозиторий. - person Alexander Gladysh; 21.02.2011
comment
@Alexander: git config`` имеет три уровня конфигурации: глобальная конфигурация (в домашнем каталоге gitadmin: ~/.gitconfig) должна быть естественным местом для... «глобальной» (как в «действительной для всех репозиториев») конфигурации - person VonC; 21.02.2011
comment
@VonC: Нет, так не получится: эти параметры, очевидно, разные для каждой группы доступа gitolite — уведомления по электронной почте рассылаются только участникам. - person Alexander Gladysh; 21.02.2011
comment
@Alexander: верно, это означает, что вам нужно изменить классический крючок для уведомлений по электронной почте, чтобы получить список участников на основе того, что gitolite скомпилировал в своем собственном файле конфигурации администратора. - person VonC; 21.02.2011
comment
@VonC: и это главный вопрос моего вопроса (извините за неясность): как это сделать? - person Alexander Gladysh; 21.02.2011
comment
@VonC: Спасибо! Почти готово. Есть ли способ настроить это для каждой группы доступа, а не для каждого репозитория? (Если нет, я думаю, я всегда могу сгенерировать gitolite.conf) - person Alexander Gladysh; 21.02.2011
comment
@Alexander: я не видел такого уровня для параметра gitconfig. - person VonC; 21.02.2011

на данный момент это не работает:

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

person Sitaram    schedule 03.03.2011
comment
Да, это было бы круто и сделало бы мой конфиг намного красивее. Но это не решает всех моих проблем, так как я хотел бы иметь возможность автоматически настраивать hooks.mailinglist, чтобы он состоял из электронных писем пользователей, имеющих доступ к каждому репозиторию. - person Alexander Gladysh; 03.03.2011

Вот быстрый лайнер, чтобы добавить описания в ваш 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

Ваше здоровье!

person Community    schedule 24.08.2011

поваренная книга gitolite рассказывает, как настроить хуки:

1. Включить локальные непрофильные программы в гитолите

Отредактируйте файл конфигурации gitolite (обычно ~git/.gitolite.rc) и раскомментируйте следующую строку:

LOCAL_CODE => "$rc{GL_ADMIN_BASE}/local"

Обязательно прочитайте предупреждения безопасности.

2. Включить хуки для конкретного репозитория

Раскомментируйте строку repo-specific-hooks в конфигурационном файле gitolite.

3. Добавьте крючок электронной почты

Поместите соответствующий исполняемый файл хука post-receive (я использую git-multimail) в репозиторий gitolite-admin как файл /local/hooks/repo-specific/git-multimail.

Совершить и нажать его.

4. Настройте параметры многоадресной перехватчика.

Чтобы разрешить добавление ключей конфигурации через файл конфигурации gitolite, отредактируйте файл конфигурации gitolite ~git/.gitolite.rc и обновите следующую строку:

GIT_CONFIG_KEYS => ".*"

Обязательно прочитайте предупреждение о безопасности. Вы можете сузить его до GIT_CONFIG_KEYS => "multimailhook\..*".

5. Настройте хук многоадресной электронной почты

Это пример конфигурации файла gitolite.conf в репозитории gitolite-admin:

repo @all
    config multimailhook.environment      = gitolite
    config multimailhook.from             = [email protected]
    config multimailhook.mailinglist      = [email protected]

repo xyz
    option hook.post-receive = git-multimail

Я решил использовать хуки, специфичные для репо, и хранить их в репозитории gitolite-admin. В качестве альтернативы вы можете использовать глобальные хуки (/local/hooks/common) или хранить их где-то еще на сервере gitolite и указать там LOCAL_CODE.

person romor    schedule 13.02.2018