#!/bin/sh
FILES=$(git diff --cached --name-only --diff-filter=ACMR | grep '\.js$' ) # Только JS файлы
if [ -n "$FILES" ]; then
echo "Formatting files with prettier..."
npx prettier --write $FILES
git add $FILES
echo "Formatting complete."
fi
Подключение внешнего инструмента форматирования (например, Prettier, Black, gofmt) к Git-хукам позволяет автоматически форматировать код перед коммитом, обеспечивая соблюдение единого стиля в репозитории. Вот как это делается:
Определите, какой инструмент форматирования соответствует вашему языку программирования и предпочтениям. Установите его локально или глобально в вашей системе.
Git-хуки – это скрипты, которые автоматически выполняются Git'ом при определенных событиях (например, перед коммитом, перед отправкой изменений на сервер). Наиболее подходящий хук для форматирования - pre-commit
.
pre-commit
В корневом каталоге вашего Git-репозитория перейдите в папку .git/hooks
. Если она не существует, создайте её.
Создайте файл с именем pre-commit
(без расширения) и сделайте его исполняемым.
pre-commit
Внутри файла pre-commit
напишите скрипт, который будет выполнять следующие действия:
Пример скрипта pre-commit
для Prettier (JavaScript/TypeScript):
#!/bin/sh
# pre-commit hook to format staged files with Prettier
# Get staged files
staged_files=$(git diff --cached --name-only --diff-filter=ACMR | grep -E '\.(js|jsx|ts|tsx|css|scss|less|html|json|md)$')
if [ -n "$staged_files" ]; then
echo "Running Prettier on staged files..."
npx prettier --write $staged_files
# Add formatted files back to staging area
git add $staged_files
echo "Prettier finished."
else
echo "No files to format."
fi
exit 0
Пример скрипта pre-commit
для Black (Python):
#!/bin/sh
# pre-commit hook to format staged files with Black
# Get staged files
staged_files=$(git diff --cached --name-only --diff-filter=ACMR | grep '\.py$')
if [ -n "$staged_files" ]; then
echo "Running Black on staged files..."
black $staged_files
# Add formatted files back to staging area
git add $staged_files
echo "Black finished."
else
echo "No files to format."
fi
exit 0
Убедитесь, что у файла .git/hooks/pre-commit
установлены права на выполнение:
chmod +x .git/hooks/pre-commit
Измените какой-либо файл, соответствующий формату, который обрабатывает ваш инструмент, и выполните git add
и git commit
. Скрипт pre-commit
должен запуститься автоматически и отформатировать файл перед коммитом.
pre-commit
лучше использовать относительные пути к инструментам форматирования (например, с помощью npx
), чтобы избежать зависимостей от глобальных установок.--no-verify
при коммите: git commit --no-verify -m "Your commit message"
.husky
и lint-staged
. Они упрощают управление Git-хуками и позволяют запускать линтеры и форматтеры только на измененных файлах. Это значительно ускоряет процесс.