commit-msg

Тема дорожной карты · Изучи Git

Хук commit-msg запускается после того, как пользователь написал сообщение коммита, но до его финализации. Git вызывает хук с одним аргументом: путём ко временному файлу с сообщением. Прочитайте его, проверьте или преобразуйте (например, навяжите Conventional Commits, добавьте ID тикета из имени ветки, отклоните пустые сообщения), и завершитесь с ненулевым кодом, чтобы прервать коммит. Хук срабатывает на каждом git commit, включая --amend. Сочетайте его с prepare-commit-msg, если нужно генерировать содержимое по умолчанию, а не только валидировать.

Применение хука commit-msg позволяет управлять стилем и содержанием сообщений коммита, что в свою очередь помогает поддерживать чистоту истории проекта и облегчает отслеживание изменений. Хук commit-msg особенно полезен для больших команд, где стандартизация сообщений коммита помогает улучшить документацию и облегчает понимание изменений.

Как это работает

commit-msg: скрипты в .git/hooks/, срабатывающие на Git-события. Client-side: pre-commit (линтеры, форматтеры до коммита), commit-msg (валидация формата сообщения), pre-push (тесты до push). Server-side (на forge): pre-receive, update, post-receive (для CI-триггеров, branch protection). Инструменты для управления: pre-commit (Python), husky (Node), lefthook (cross-language). Hooks локальны для клона — расшаривайте через инструменты.

Когда применять

Pre-commit hooks — для быстрых проверок (форматирование, линтинг, сканирование секретов); экономят CI-циклы. Держите <2s; медленные hooks обходят (git commit --no-verify). pre-commit-тул (или husky/lefthook) — чтобы hooks были частью репо, а не похоронены в .git/hooks/. Commit-msg hooks — для enforce conventional-commit style если команда так пишет.

Хук commit-msg особенно полезен для проектов, где требуется строгое соблюдение стандартов написания сообщений коммита. Это может быть важно для команд, работающих на крупных проектах, где история коммитов служит важным источником информации для анализа и отслеживания изменений.

Типичные ошибки

Ловушки commit-msg: тяжёлые hooks, гоняющие весь test-suite на каждый коммит (начинают использовать --no-verify, теряет смысл); hooks, блокирующиеся на сетевых вызовах (нет интернета = нет коммита); hooks не установлены для новых контрибьюторов (обходят всё, пока не сказано).

Типичные ошибки при использовании хуков commit-msg включают использование слишком сложных или долгих проверок, которые могут привести к перегрузке системы и замедлению процесса разработки. Также важно убедиться, что хуки установлены для всех новых участников проекта, чтобы избежать обхода правил.

Связанные понятия

Полезные ресурсы