До коммита применяются следующие основные типы Git хуков:
-
pre-commit: Этот хук выполняется первым, непосредственно перед созданием коммита. Он часто используется для:
- Запуска линтеров кода (ESLint, PyLint и т.д.)
- Проверки форматирования кода (например, пробелов в конце строк)
- Выполнения тестов (unit-тестов, интеграционных тестов)
- Предотвращения коммитов с отладочным кодом (console.log, debugger)
- Проверки соответствия имени ветки стандартам
Если `pre-commit` завершается с ненулевым кодом возврата, коммит отменяется.
-
prepare-commit-msg: Этот хук вызывается перед открытием редактора для ввода сообщения коммита. Он позволяет:
- Автоматически генерировать сообщение коммита на основе информации из коммита (например, номер задачи из системы отслеживания ошибок)
- Добавлять шаблон сообщения коммита, содержащий инструкции по написанию хорошего сообщения
Этот хук получает имя файла, содержащего сообщение коммита, и позволяет его изменить.
-
commit-msg: Этот хук выполняется после того, как пользователь ввел сообщение коммита, но перед тем, как коммит будет создан. Он позволяет:
- Проверять соответствие сообщения коммита стандартам (например, ограничения по длине строки, наличие префикса)
- Проверять корректность формата сообщения, например, наличие информации о задаче.
Этот хук также получает имя файла с сообщением коммита и может отменить коммит, если проверка не пройдена.
-
pre-push: Хотя формально он выполняется не перед коммитом, а перед отправкой (push) изменений на удаленный репозиторий, часто логика, которая должна была быть в `pre-commit` (например, тесты), переносится в `pre-push` для ускорения процесса коммита. `pre-push` может отменить `push`, если тесты не пройдены, код не соответствует стандартам и т.д. Важно отметить, что `pre-push` запускается только на локальной машине.
Важно помнить, что хуки хранятся в каталоге .git/hooks
и должны быть исполняемыми (например, chmod +x .git/hooks/pre-commit
). Хуки не переносятся при клонировании репозитория. Чтобы их распространять, часто используют symlinks или дополнительные инструменты, такие как Husky или pre-commit.