Как проверять линтом только измененные файлы при pre-push?

Ссылка скопирована
1 ответ

Как написать условный скрипт для pre-push файла, который будет запускать линт только на те файлы, которые были изменены, а не на весь проект?

Дополнительно:

а почему pre-push, а не pre-commit?

  • Зачем? Изменения в одном файле могут повлиять на валидность кода в другом файле, который не менялся.
  • Ответы:

    https://www.npmjs.com/package/lint-staged

    • + husky

    Что-то вроде такого:

    git ls-tree --name-only -r origin/HEAD | egrep '.(js|ts)$' | xargs npx eslint

    git ls-tree --name-only -r origin/HEAD | egrep '.(js|ts)$' | xargs npx eslint

    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Никита Орлов Ответ

    Для проверки линтом только измененных файлов перед отправкой коммита (pre-push), можно воспользоваться следующим подходом:

    1. Необходимо создать скрипт, который будет проверять только измененные файлы. Для этого можно воспользоваться командой `git diff --name-only origin/master`, которая позволяет получить список измененных файлов относительно ветки `origin/master`.

    2. Далее, можно использовать этот список файлов для запуска линтера только на них. Для примера, давайте рассмотрим использование линтера для PHP файлов.

    Пример скрипта для проверки измененных PHP файлов перед отправкой коммита:

    #!/bin/bash
    
    FILES=$(git diff --name-only origin/master | grep '\.php$')
     
    if [ -n "$FILES" ]; then
        for FILE in $FILES; do
            php -l $FILE
            if [ $? -ne 0 ]; then
                echo "PHP linting failed for file: $FILE"
                exit 1
            fi
        done
    fi

    #!/bin/bash FILES=$(git diff --name-only origin/master | grep '\.php$') if [ -n "$FILES" ]; then for FILE in $FILES; do php -l $FILE if [ $? -ne 0 ]; then echo "PHP linting failed for file: $FILE" exit 1 fi done fi

    3. Сохраните этот скрипт в файл `pre-push.sh` и добавьте права на исполнение: `chmod +x pre-push.sh`.

    4. Далее, необходимо добавить этот скрипт в хук pre-push вашего репозитория. Для этого выполните команду: `ln -s ../../pre-push.sh .git/hooks/pre-push`.

    Теперь при каждой попытке отправки коммита (git push), скрипт будет запускаться автоматически и проверять только измененные PHP файлы на наличие ошибок линтера. Если какой-либо файл не проходит проверку, коммит не будет отправлен, и вы получите уведомление о необходимости исправления ошибок.

    Надеюсь, это поможет вам эффективно проверять линтером только измененные файлы перед отправкой коммита!

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно