Вопрос проверяет умение настраивать pre-commit hooks для автоматического запуска проверок кода перед созданием коммита, что необходимо для поддержания качества кода и соблюдения стандартов проекта.
Pre-commit hooks — это механизм Git, позволяющий автоматически выполнять определённые действия (скрипты) непосредственно перед фиксацией изменений в репозитории. Их основная цель — обеспечить контроль качества кода, запуская проверки, такие как линтинг, форматирование или запуск модульных тестов, до того как изменения будут закоммичены. Это предотвращает попадание в историю проекта кода с очевидными ошибками или нарушающего соглашения команды.
В каждом Git-репозитории есть скрытая папка .git/hooks/, содержащая примеры скриптов для различных событий. Чтобы создать pre-commit hook, нужно:
.git/hooks/.pre-commit.sample в pre-commit (удалив расширение .sample).chmod +x pre-commit на Unix-системах).#!/bin/bash
# Пример простого pre-commit hook, проверяющего наличие console.log в JavaScript файлах
echo "Running pre-commit checks..."
if git diff --cached --name-only | xargs grep -l "console\.log"; then
echo "Error: Found console.log statements in staged files."
exit 1
fi
echo "Checks passed."Ручная настройка неудобна для командной работы, так как хуки не копируются при клонировании репозитория. Поэтому в современных JavaScript/Node.js проектах популярна связка Husky и lint-staged.
package.json).Пример настройки в проекте на Node.js:
// package.json
{
"scripts": {
"prepare": "husky install"
},
"devDependencies": {
"husky": "^8.0.0",
"lint-staged": "^13.0.0",
"eslint": "^8.0.0",
"prettier": "^2.0.0"
},
"lint-staged": {
"*.js": ["eslint --fix", "prettier --write"]
}
}После установки зависимостей инициализируйте Husky командой npm run prepare, затем создайте pre-commit hook, который запустит lint-staged:
npx husky add .husky/pre-commit "npx lint-staged"Теперь при каждой попытке коммита будут автоматически запускаться ESLint и Prettier для всех изменённых JavaScript-файлов. Если проверки не пройдут, коммит будет отменён.
Pre-commit hooks широко используются в командной разработке для:
Вывод: Pre-commit hooks — это эффективный способ автоматизировать рутинные проверки и поддерживать высокое качество кодовой базы. Их стоит применять в любом проекте, особенно при работе в команде, чтобы минимизировать человеческие ошибки и обеспечить единый стандарт кода.