Как настроить линтинг только для измененных файлов перед отправкой коммита?

Как можно написать скрипт для pre-push hook'а, чтобы запускать линтер только на измененные файлы, а не на весь проект?
  • 11 марта 2024 г. 11:49
Ответы на вопрос 2
Для настройки линтинга только для измененных файлов перед отправкой коммита можно использовать следующий подход:

1. Добавить скрипт, который будет запускать линтер только на измененные файлы, в файл `pre-commit` в директории `.git/hooks/` вашего проекта.

2. В этом скрипте можно использовать команду `git diff --name-only --cached` для получения списка измененных файлов, которые уже добавлены в staging area перед коммитом.

3. Затем можно запустить линтер (например, ESLint для JavaScript) только на эти файлы.

Пример скрипта для `pre-commit` hook'а:

```bash
#!/bin/bash

# Получение списка измененных файлов
files=$(git diff --name-only --cached)

# Запуск линтера только на измененных файлах
for file in $files
do
    if [ ${file: -3} == ".js" ]; then
        eslint $file
    fi
done
```

Таким образом, данный скрипт запустит ESLint только на измененные JavaScript файлы перед каждым коммитом.

Аналогично можно поднять хук `pre-push` для выполнения линтинга только измененных файлов перед отправкой коммита в удаленный репозиторий.
Что-то вроде такого: 
git ls-tree --name-only -r origin/HEAD | egrep '\.(js|ts)$' | xargs npx eslint
Похожие вопросы