Git Hooks - это скрипты, которые автоматически запускаются Git'ом до или после определенных событий, таких как commit, push и receive.
Они находятся в каталоге .git/hooks/ в репозитории.
Принцип работы:
Пример: pre-commit хук может проверять commit-сообщение на соответствие заданному шаблону.
Хуки в Git - это мощный механизм, позволяющий выполнять пользовательские скрипты автоматически в определенных точках жизненного цикла Git. Они представляют собой скрипты, расположенные в каталоге .git/hooks вашего Git-репозитория. Когда Git достигает определенной точки (например, перед коммитом, после получения изменений и т.д.), он проверяет, есть ли в этом каталоге соответствующий скрипт и, если да, выполняет его.
Как это работает:
.git/hooks: В каждом репозитории Git есть каталог .git/hooks.  Внутри этого каталога находятся примеры скриптов хуков (с расширением .sample).  Чтобы активировать хук, нужно удалить расширение .sample и сделать скрипт исполняемым.
    pre-commit: Выполняется перед созданием коммита.  Используется для проверки форматирования кода, запуска тестов и т.д.  Если этот хук завершается с ненулевым кодом возврата, коммит будет отменен.prepare-commit-msg: Выполняется перед открытием редактора сообщения коммита. Позволяет динамически изменять сообщение коммита.commit-msg: Выполняется после того, как пользователь ввел сообщение коммита, но до фактического создания коммита.  Используется для проверки соответствия сообщения коммита определенным стандартам.  Если этот хук завершается с ненулевым кодом возврата, коммит будет отменен.post-commit: Выполняется после создания коммита.  Используется для уведомлений, запуска сборки и т.д.pre-push: Выполняется перед отправкой (push) коммитов на удаленный репозиторий.  Используется для проверки того, что отправляемые коммиты соответствуют определенным требованиям (например, все тесты проходят).  Если этот хук завершается с ненулевым кодом возврата, отправка будет отменена.post-receive: Выполняется на удаленном репозитории после получения изменений. Используется для запуска сборки, развертывания и т.д.update: Выполняется на удаленном репозитории перед обновлением веток..git/hooks применяются только к конкретному репозиторию.  Также можно настроить глобальные хуки, которые будут применяться ко всем репозиториям на машине.  Это делается с помощью настройки core.hooksPath в конфигурации Git.  При наличии локального и глобального хука для одного и того же события, будет выполнен только локальный хук.
    Пример (pre-commit):
#!/bin/bash
# Проверка наличия ошибок линтинга в файлах, добавленных в коммит
eslint .
if [ $? -ne 0 ]; then
  echo "Обнаружены ошибки линтинга.  Пожалуйста, исправьте их перед коммитом."
  exit 1
fi
# Запуск модульных тестов
npm test
if [ $? -ne 0 ]; then
    echo "Модульные тесты не пройдены.  Пожалуйста, исправьте ошибки перед коммитом."
    exit 1
fi
exit 0
Важно:  Хуки не распространяются вместе с репозиторием при клонировании.  Это означает, что каждый разработчик должен настроить свои собственные хуки.  Чтобы сделать хуки более доступными, можно хранить скрипты хуков в репозитории и предоставить скрипт установки, который скопирует их в каталог .git/hooks.