«Зацепка» невозможна по соображениям безопасности.Если бы вы могли, тогда кто-то, просто клонировавший ваше хранилище и выполняющий базовые операции, мог получить произвольный код, выполняемый на их машинах.
Два распространенных способа решения этой проблемы:
Документируйте, что люди должны сделать, чтобы подключить хук в своем хранилище.
Автоматизируйте , что люди должны сделать, чтобы получить его.Например, в проекте, использующем Makefile, у меня есть это в Makefile, и люди могут просто запустить make setup-pre-push-hook
, чтобы заставить крюк запускать «make check» всякий раз, когда они нажимают:
setup-pre-push-hook: setup-pre-push-hook-file
grep -q 'make check' .git/hooks/pre-push || \
printf '\n%s\n\n' 'make check' >> .git/hooks/pre-push
setup-pre-push-hook-file:
test -f .git/hooks/pre-push || echo '#!/bin/sh' >.git/hooks/pre-push
test -x .git/hooks/pre-push || chmod +x .git/hooks/pre-push