.git/hooks/pre-commit (если его нет) и сделать его исполняемым (chmod +x .git/hooks/pre-commit)..git/hooks/pre-commit добавить скрипт, который будет запускать линтер и проверять код. Если линтер возвращает ошибки, скрипт должен завершиться с ненулевым кодом (например, exit 1), чтобы предотвратить коммит.  Пример:
        #!/bin/sh
# Run linter
npx eslint .
# Check if there were any linting errors
if [ $? -ne 0 ]; then
  echo "Linting failed.  Please fix the errors before committing."
  exit 1
fi
exit 0
    Для автоматического запуска линтера перед каждым коммитом в Git можно использовать Git hooks, в частности, pre-commit hook.  Этот хук срабатывает непосредственно перед созданием коммита. Если он завершается с ненулевым кодом возврата (ошибка), коммит будет отменен.
  
Основные шаги:
.git/hooks в вашем репозитории.  Если ее нет, создайте её.
    pre-commit (без расширения) в директории .git/hooks.
    pre-commit исполняемым.  В терминале выполните:
      chmod +x .git/hooks/pre-commitpre-commit и добавьте в него скрипт, который запускает ваш линтер.  Пример:
    Пример скрипта pre-commit (для ESLint с npm):
#!/bin/sh
# Скрипт для запуска ESLint перед коммитом
# Запускаем ESLint для всех измененных JavaScript файлов
echo "Running ESLint..."
git diff --cached --name-only --diff-filter=ACM | grep '\.js$' | xargs -n 1 eslint
# Проверяем код возврата ESLint
if [ $? -ne 0 ]; then
  echo "ESLint found errors.  Please fix them before committing."
  exit 1
fi
echo "ESLint passed successfully."
exit 0
Пояснения к примеру:
#!/bin/sh: Указывает интерпретатор скрипта (bash).git diff --cached --name-only --diff-filter=ACM:  Получает список измененных файлов, подготовленных к коммиту. --cached означает, что рассматриваются только проиндексированные (staged) изменения. --name-only выводит только имена файлов. --diff-filter=ACM  фильтрует файлы по статусу (A - added, C - copied, M - modified).grep '\.js$':  Фильтрует список, оставляя только файлы с расширением .js.xargs -n 1 eslint:  Передает каждый файл из списка аргументом в команду eslint.if [ $? -ne 0 ]; then ... fi: Проверяет код возврата последней команды (ESLint). Если код возврата не равен 0 (ошибка), выводится сообщение об ошибке и скрипт завершается с кодом 1, что отменяет коммит.Важно:
eslint на команду prettier --write или аналогичную.Пример использования Husky и lint-staged (рекомендуемый подход):
npm install husky lint-staged --save-devnpx husky installpackage.json:
          {
  "scripts": {
    "prepare": "husky install"
  }
}package.json:
      {
  "lint-staged": {
    "*.js": "eslint --fix"  // Запускает ESLint и пытается автоматически исправить ошибки
  }
}.husky/pre-commit:
      #!/bin/sh
. "$(dirname "$0")/_/husky.sh"
npx lint-staged
Этот подход позволяет запускать линтер только для тех файлов, которые были изменены и подготовлены к коммиту, что значительно повышает производительность.
В заключение: Настройка запуска линтера перед коммитом помогает поддерживать консистентность и качество кода в репозитории. Выберите подходящий подход в зависимости от вашего проекта и потребностей.