pre-commit

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

Хук pre-commit — это важный инструмент для автоматизации проверок и форматирования кода перед тем, как он попадет в репозиторий. Этот хук запускается до открытия редактора сообщения коммита и используется для линтинга, форматирования кода, проверки типов и быстрых тестов. Если хук выдает ненулевой код выхода, коммит отменяется. Для пропуска хука можно использовать команду git commit --no-verify, но это следует согласовать с командой, так как это может привести к пропуску важных проверок.

Для эффективной работы хук pre-commit должен быть быстрым, выполняющимся за несколько секунд. Если проверки требуют больше времени, их следует переместить в хук pre-push или в систему непрерывной интеграции (CI). Python-фреймворк pre-commit позволяет декларативно управлять мультиязычными конфигурациями хуков и стал стандартом для обеспечения согласованности между разработчиками.

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

Хук pre-commit запускается автоматически перед тем, как изменения будут добавлены в репозиторий. Он может содержать скрипты для различных задач, таких как форматирование кода, проверка стиля кода, сканирование секретов и т.д. Эти скрипты находятся в директории .git/hooks/ и срабатывают на соответствующие Git-события.

Клиентские хуки, такие как pre-commit, commit-msg и pre-push, выполняются на стороне разработчика и помогают предотвратить ошибки до отправки изменений. Серверные хуки, такие как pre-receive, update и post-receive, выполняются на стороне сервера и используются для защиты репозитория от некорректных изменений. Они могут быть настроены для триггеров CI, защиты веток и других задач.

Инструменты для управления хуками включают pre-commit (Python), husky (Node.js) и lefthook (многоязычные). Эти инструменты помогают управлять хуками, делая их частью репозитория, а не отдельными файлами в директории .git/hooks/.

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

Хуки pre-commit эффективны для быстрых проверок, таких как форматирование кода, линтинг и сканирование секретов. Используя эти хуки, можно существенно сократить время выполнения CI-цикла, так как большая часть проверок уже будет выполнена на стороне разработчика.

Однако важно следить за скоростью выполнения хуков pre-commit. Если они выполняются слишком долго, это может замедлить процесс разработки. Поэтому для медленных проверок лучше использовать хуки pre-push или интегрировать их в систему CI.

Команда git commit --no-verify позволяет пропустить выполнение хуков pre-commit, но это следует использовать осторожно, так как это может привести к пропуску важных проверок.

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

Типичные ошибки при использовании хуков pre-commit включают использование тяжелых хуков, которые выполняют весь тестовый набор на каждый коммит. Это может привести к тому, что разработчики начнут использовать опцию --no-verify, что делает хуки бесполезными. Другая распространенная ошибка — это блокировка хуков на сетевых вызовах, что может привести к тому, что разработчики не смогут сделать коммиты, если у них нет доступа к интернету.

Также важно убедиться, что хуки установлены для всех новых контрибьюторов. Если хуки не установлены, новые участники могут обходить их, что может привести к некачественным коммитам.

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

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