Git hooks — это скрипты, которые Git выполняет автоматически до или после определенных событий, таких как commit, push и receive.
Различие между client-side и server-side хуками заключается в месте их выполнения и их назначении:
Client-side hooks (хуки на стороне клиента):
- Выполняются локально на компьютере разработчика.
- В основном используются для проверки commit-сообщений, форматирования кода, запуска тестов и других локальных задач перед отправкой изменений на удаленный репозиторий.
- Не контролируются администратором репозитория и могут быть проигнорированы разработчиком (хотя это обычно не рекомендуется).
- Расположены в каталоге
.git/hooks
локального репозитория.
- Примеры:
pre-commit
, pre-push
, commit-msg
.
- Главная цель: Обеспечить качество кода и соответствие стандартам до того, как он попадет в общий репозиторий. Предотвращение ошибок и несоответствий на ранних этапах разработки.
Server-side hooks (хуки на стороне сервера):
- Выполняются на сервере, где размещен удаленный репозиторий.
- Используются для применения политик репозитория, автоматизации развертывания, интеграции с системами отслеживания ошибок и других задач, связанных с управлением репозиторием.
- Контролируются администратором репозитория и являются обязательными для всех, кто пушит изменения в репозиторий.
- Расположены в каталоге
.git/hooks
удаленного репозитория (требуется доступ к серверу).
- Примеры:
pre-receive
, post-receive
, update
.
- Главная цель: Обеспечение безопасности и соответствия правилам всего репозитория. Автоматизация процессов, связанных с изменениями в репозитории.
Ключевое различие: Client-side хуки — это про локальные правила и удобство разработчика, а server-side хуки — это про правила и контроль на уровне всего репозитория.
Важно: Server-side хуки могут быть использованы для отклонения push-запросов, если они не соответствуют заданным критериям, тем самым обеспечивая контроль над качеством и безопасностью кода в репозитории.