Гитолит-крючок для конкретного репозитория
Я не понимаю, как создать привязку 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
Опять же, надеюсь, это поможет некоторым из вас, ребята.
Ура!