Гитолитовый крючок для конкретного хранилища - PullRequest
11 голосов
/ 30 ноября 2011

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

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

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

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

Ответы [ 2 ]

8 голосов
/ 30 ноября 2011

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

Обновление августа 2013 г. с последней версией gitolite3.x: Теперь у вас есть официальный специфический репо-хук :

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


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

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

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

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.

ОП подтверждает, что проблема была в пропущенной точке.

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

3 голосов
/ 15 марта 2014

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

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

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

Обновление / обновление Gitolite

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

Пример:

$ ssh myusername@devserver.com
$ sudo su - git
$ pwd
/home/git
$ cd gitolite

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

$ git pull

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

$ ./install

И, наконец, снова запустите установку.

$ gitolite setup

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

$ src / gitolite setup

Gitolite Settings (файл "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

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

Приветствия!

...