Как работает `pre-commit` хук?

pre-commit - это хук Git, скрипт, который автоматически запускается перед каждым коммитом. Он позволяет проверять код (например, на соответствие стандартам кодирования, наличие опечаток, и т.п.) прямо перед фиксацией изменений. Если pre-commit возвращает ненулевой код завершения, коммит отменяется, давая разработчику возможность исправить проблемы. Обычно располагается в каталоге .git/hooks/ проекта.

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

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

  1. Когда вы выполняете команду `git commit`, Git ищет исполняемый файл с именем `pre-commit` в каталоге `.git/hooks/`.
  2. Если файл `pre-commit` существует и является исполняемым (права на выполнение установлены), Git запускает его.
  3. Скрипт `pre-commit` выполняет определенные действия (проверки, форматирование, тесты и т.д.).
  4. Результат:
    • Если скрипт завершается с кодом выхода 0 (успех), то Git продолжает процесс фиксации.
    • Если скрипт завершается с кодом выхода, отличным от 0 (ошибка), то Git останавливает процесс фиксации, выводя сообщения об ошибках, сгенерированные скриптом. Это предотвращает создание коммита, который не соответствует заданным критериям.

Назначение и примеры использования:

`pre-commit` хуки используются для автоматизации различных задач, связанных с качеством кода и соблюдением стандартов. Примеры:

  • Проверка синтаксиса: Убедиться, что код компилируется и не содержит синтаксических ошибок.
  • Запуск линтеров: Проверка соответствия кода стандартам кодирования (например, PEP 8 для Python).
  • Запуск тестов: Убедиться, что все тесты успешно проходят перед фиксацией изменений.
  • Форматирование кода: Автоматическое форматирование кода (например, с помощью Black для Python или Prettier для JavaScript).
  • Проверка на наличие секретной информации: Предотвращение фиксации паролей, ключей API и другой конфиденциальной информации.
  • Проверка сообщений коммитов: Убедиться, что сообщения коммитов соответствуют определенному формату.
  • Проверка размера файлов: Предотвращение фиксации слишком больших файлов.

Как создать и использовать:

  1. Создайте файл с именем `pre-commit` в каталоге `.git/hooks/`.
  2. Напишите скрипт (например, на Bash, Python, Node.js) для выполнения необходимых проверок.
  3. Сделайте файл исполняемым: `chmod +x .git/hooks/pre-commit`.

Преимущества:

  • Автоматизация проверок качества кода.
  • Предотвращение попадания плохого кода в репозиторий.
  • Соблюдение стандартов кодирования.
  • Улучшение качества разработки.

Пример простого `pre-commit` хука (Bash):

#!/bin/bash

echo "Running pre-commit hook..."

# Проверка наличия коммита без сообщения
if git log -1 --pretty=%B | grep -q "^$"; then
  echo "Error: Commit message is empty. Please provide a commit message."
  exit 1
fi

# Простая проверка наличия слова "TODO" в измененных файлах
if git diff --cached --name-only | xargs grep -q TODO; then
  echo "Error: TODO items found. Please resolve them before committing."
  exit 1
fi

echo "Pre-commit checks passed."
exit 0

Этот простой скрипт проверяет, что сообщение коммита не пустое, и не содержит ли измененные файлы слова "TODO".

Использование `pre-commit` хуков значительно повышает качество разрабатываемого программного обеспечения, позволяя выявлять и предотвращать проблемы еще до того, как они попадут в репозиторий. Существуют готовые фреймворки для управления хуками (например, `pre-commit` - https://pre-commit.com/), которые упрощают их настройку и поддержку.

0