Гитолит-крючок для конкретного репозитория

Я не понимаю, как создать привязку post-receive для репозитория определенного в gitolite (без установки root)

Мой голый репозиторий содержит веб-сайт, который должен скопировать рабочий каталог в docRoot (GIT_WORK_TREE=/path/htdocs git checkout -f) при обновлении

Перед gitolite я просто обновил бы крючок для конкретного репозитория.
В документации Гитолита упоминается, что все крючки должны быть в hooks/common, поэтому я не понимаю, как это работает.

Каким должно быть имя крючков, где оно должно быть расположено и как его структура должна быть изменена (если она должна)?

Ответ 1

Обновление июля 2013 года: что следует за гитолит V2 (или 'g2'), который был версией, используемой OP в то время (ноябрь 2011 года).

Обновление в августе 2013 года, с последним гитолит 3.x: Теперь у вас есть официальный специальный репозиторий:

он просто создает символическую ссылку в <repo.git>/hooks, указывая на некоторый файл внутри $rc{LOCAL_CODE}/hooks/repo-specific (кроме репо gitolite-admin)


Все перехватчики в gitolite/hooks/common реплицируются во всех репозиториях, управляемых Gitolite, как описано в документации по распространению крюка.
Это означает, что ваш крючок script должен выполнять определенное действие в зависимости от репо, которое выполняет указанный крючок.

Вы можете использовать переменную $GL_REPO (какой набор gitolite и передать все его скрипты для любой команды git, которую он получает).

Или вы можете использовать конфигурацию git, зарегистрированную на сервере gitolite, например, зеркальный захват. См. post-receive.mirrorpush hook.

OP Eyal R добавляет в комментарии:

Но я до сих пор не понимаю, как это делается (я понимаю, что $GL_REPO используется для определения того, какое репо я обновляю, но мне не хватает практической части).
Я создал файл с именем post-receive.test с echo "test", поместил его в $HOME/gitolite/hooks/common, запустил gl-setup, запускал push с рабочей станции - ничего не происходит (нет вывода "test" )

На что я ответил:

Крючок должен появиться в каталоге hook вашего репо на сервере gitolite в качестве ссылки, ссылаясь на .gitolite/common/hook. Обратите внимание, что это должно быть в $HOME/.gitolite/common/hook, а не /gitolite.

OP подтверждает, что отсутствующая точка была проблемой.

Процесс добавления крючка подробно описан в распространении крюка в гитолите и их использовании в Использование Hooks ".

Ответ 2

Это довольно распространенная потребность в том, чтобы кто-то использовал гитолит, и, похоже, немного сложно связать свободные концы, будучи не очень продвинутым пользователем (в то время как это было для меня).

Последовательные переходы и гитолит-ссылки взад и вперед могут быть немного запутанными. Это мои выводы и путь, которым я следил, чтобы достичь этого.

Как упоминалось в @VonC, создание репозитория связано с определенными перехватами, поскольку версия 3.5.3.1 (github link)

Обновление/обновление гитолита

Первое, что вам нужно сделать, это обновить репозиторий gitolite. Итак, ssh на ваш сервер, на котором размещен гитолит, и переместитесь в место, где установлен гитолит (обычно /home/git/gitolite), как пользователь git (обычно git)

Пример:

$ ssh [email protected]
$ sudo su - git
$ pwd
/home/git
$ cd gitolite

Затем мы должны обновить гитолит. Для этого сначала нам нужно обновить репозиторий gitolite

$ git pull

Затем мы должны повторить команду установки (убедитесь, что вы используете те же аргументы, что и раньше)

$ ./install

И, наконец, запустите настройку еще раз.

$ gitolite setup

Если это не сработает, вы, вероятно, не создали исполняемый файл gitolite в своем PATH, чтобы вы могли сделать что-то вроде этого:

$src/gitolite setup

Настройки Gitolite (файл "RC" )

Это была одна из тех частей, которые меня больше всего смутили, но в итоге это было довольно прямо.

Знаменитый файл "rc" находится в git домашнем каталоге /home/git/.gitolite.rc. Там убедитесь, что у вас есть переменная с именем LOCAL_CODE, вы должны увидеть что-то подобное в этом файле, если нет, добавьте ее.

LOCAL_CODE => "$ENV{HOME}/.gitolite/local"

И в разделе "Команды для включения" вы должны убедиться, что repo-specific-hooks доступен, если нет, добавьте его.

ENABLE => [

    # COMMANDS

        # These are the commands enabled by default
        'help',
        'desc',
        'info',
        ...,
        ...,
        ...,
        'repo-specific-hooks'
        ...,
        ...,
        ...
]

Вот ссылка на документацию

Создание специальных привязок репозитория

Наконец, в вашем репозитории local gitolite-admin создайте следующие каталоги hooks/repo-specific в каталоге, который вы только что установили в переменной LOCAL_CODE, например:

gitolite_admin/local/hooks/repo-specific

После этого вы можете добавить свои скрипты с крючками в это место и управлять ими через файл конфига gitolite как указанный в документации. Убедитесь, что скрипты исполняемы.

repo foo
RW+                       =   @all
option hook.post-receive  =   deploy

Опять же, надеюсь, это поможет некоторым из вас, ребята.

Ура!