← Назад к вопросам

Что такое хуки в Git?

1.8 Middle🔥 161 комментариев
#Инфраструктура и DevOps

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI7 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое хуки в Git?

Git хуки (hooks) — это специальные пользовательские скрипты, которые автоматически запускаются при наступлении определенных событий в репозитории Git. Они позволяют кастомизировать и автоматизировать процессы, связанные с контролем версий, обеспечивая соблюдение правил разработки, проверку качества кода и интеграцию с внешними системами.

Механизм работы хуков

Хуки хранятся в папке .git/hooks внутри каждого Git-репозитория. По умолчанию Git создает в этой директории образцы скриптов (с расширением .sample), которые можно активировать, удалив расширение и добавив исполнительные права.

Основные категории хуков:

1. Хуки на стороне клиента

  • pre-commit — выполняется перед созданием коммита. Идеален для проверки синтаксиса, стиля кодирования.
  • prepare-commit-msg — позволяет модифицировать сообщение коммита перед его редактированием.
  • commit-msg — проверяет или изменяет сообщение коммита (например, требует наличия issue-номеров).
  • post-commit — выполняется после успешного создания коммита (уведомления, логирование).
  • pre-push — запускается перед отправкой изменений на удаленный репозиторий (запуск тестов).

2. Хуки на стороне сервера (работают на удаленном репозитории)

  • pre-receive — проверяет все входящие push-запросы (проверка прав доступа, политик).
  • update — аналогичен pre-receive, но выполняется для каждой ветки отдельно.
  • post-receive — выполняется после принятия изменений (развертывание, уведомления CI/CD).

Практический пример использования

Рассмотрим реализацию pre-commit хука для проверки PHP-кода на соответствие стандартам PSR-12:

#!/bin/bash
# .git/hooks/pre-commit

echo "Running PHP Code Sniffer..."

# Проверяем только измененные PHP-файлы
FILES=$(git diff --cached --name-only --diff-filter=ACM | grep -E '\.php$')

if [ -n "$FILES" ]; then
    # Запускаем PHP Code Sniffer
    ./vendor/bin/phpcs --standard=PSR12 $FILES
    
    if [ $? -ne 0 ]; then
        echo "PHP Code Sniffer found violations!"
        echo "Please fix the errors before committing."
        exit 1
    fi
fi

echo "Code style check passed successfully!"
exit 0

Ключевые преимущества использования хуков

  • Автоматизация рутинных задач — автоматический запуск тестов, проверка стиля кодирования
  • Обеспечение качества кода — предотвращение коммитов с ошибками или несоответствием стандартам
  • Интеграция процессов — связь с системами CI/CD, тикет-трекерами
  • Кастомизация workflow — адаптация Git под конкретные потребности команды

Важные ограничения и рекомендации

  1. Хуки не распространяются — они хранятся локально в .git/hooks и не копируются при клонировании репозитория
  2. Решение проблемы распространения — используют:
    • Хранилище скриптов в корне репозитория (например, scripts/hooks/)
    • Инструменты типа Husky для JavaScript-проектов
    • Менеджеры зависимостей (Composer для PHP)
  3. Производительность — сложные хуки могут замедлять основные операции Git
  4. Безопасность — серверные хуки требуют тщательной проверки входных данных

Пример интеграции через Composer (для PHP-проектов)

{
    "scripts": {
        "post-install-cmd": [
            "cp -r scripts/hooks/* .git/hooks/",
            "chmod +x .git/hooks/*"
        ]
    }
}

Хуки Git представляют собой мощный механизм для создания стандартизированного и автоматизированного рабочего процесса. При правильном использовании они значительно повышают качество кодовой базы, обеспечивают соблюдение правил разработки и сокращают количество человеческих ошибок в процессе контроля версий. Для максимальной эффективности рекомендуется сочетать клиентские хуки с серверными проверками и системами непрерывной интеграции.

Что такое хуки в Git? | PrepBro