Git добавление локальных хуков с удаленного репозитория
Насколько я помню git не отправляет локально определенные хуки в удаленный репозиторий.
Соответственно, чтобы поделиться хуками с другими разработчиками, им надо копировать эти хуки из какой-либо папки определенной в проекте самостоятельно. Соотвественно, если хук претерпевает изменения, то и копировать его надо заново.
Если автоматизировать процесс перемещением хуков в новую папку при сборке, то возникает проблема, что иногда после миноров нет смысла долго пересобирать проект, но при этом можно проморгать изменения в хуке.
Может кто-то сталкивался?
Ответы (1 шт):
как таковое содержимое каталога с хранилищем (в случае не-bare-хранилища — это содержимое каталога .git в корне рабочего каталога) не передаётся командой push (передаются объекты, хранящиеся внутри файлов в каталоге objects).
чтобы включить файлы с hook-ами в контроль версий, можно скопировать их в рабочий каталог. не прямо в корень, конечно, чтоб на глазах не маячили, а в какой-нибудь подкаталог, например (внезапно!) hooks. а в .git/hooks создать относительные символические ссылки на эти файлы.
например, в пустом хранилище я создал подкаталог hooks, переместил файл .git/hooks/commit-msg.sample в него (под именем commit-msg) и создал символическую ссылку:
$ mkdir hooks
$ mv .git/hooks/commit-msg.sample hooks/commit-msg
$ ln -s ../../hooks/commit-msg .git/hooks/
получилась такая картина:
$ tree hooks/ .git/hooks/
hooks/
└── commit-msg
.git/hooks/
├── applypatch-msg.sample
├── commit-msg -> ../../hooks/commit-msg
├── fsmonitor-watchman.sample
├── post-update.sample
├── pre-applypatch.sample
├── pre-commit.sample
├── prepare-commit-msg.sample
├── pre-push.sample
├── pre-rebase.sample
├── pre-receive.sample
└── update.sample
осталось добавить файл hooks/commit-msg под контроль версий и отправить коммит в общее хранилище:
$ git add hooks/commit-msg
$ git commit -m 'add hook commit-msg'
$ git push
а те разработчики, кому потребуется задействовать этот hook, должны однократно создать аналогичную символическую ссылку в своих локальных копиях хранилища:
$ ln -s ../../hooks/commit-msg .git/hooks/