предварительная фиксация: как отключить проверку на неустановленные файлы?

#git #pre-commit.com

#git #pre-commit.com

Вопрос:

Мой pre-commit.com конфигурация выглядит следующим образом:

 repos:
-   repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v3.2.0
    hooks:
    -   id: trailing-whitespace
    -   id: end-of-file-fixer
    -   id: check-yaml
    -   id: check-added-large-files
-   repo: https://gitlab.com/pycqa/flake8
    rev: ''  # pick a git hash / tag to point to
    hooks:
    -   id: flake8
-   repo: https://github.com/pre-commit/mirrors-isort
    rev: v5.7.0
    hooks:
    - id: isort

 

Если я попытаюсь зафиксировать, я получу эту ошибку:

 guettli@yoga15:~/projects/foo$ LANG=C git commit

[WARNING] Unstaged files detected.
[INFO] Stashing unstaged files to /home/guettli/.cache/pre-commit/patch1611141286.
Trim Trailing Whitespace.............................(no files to check)Skipped
Fix End of Files.....................................(no files to check)Skipped
Check Yaml...........................................(no files to check)Skipped
Check for added large files..........................(no files to check)Skipped
flake8...............................................(no files to check)Skipped
isort................................................(no files to check)Skipped
[INFO] Restored changes from /home/guettli/.cache/pre-commit/patch1611141286.

On branch feature/super-foo
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
    modified:   .gitignore

Untracked files:
  (use "git add <file>..." to include in what will be committed)
    .pre-commit-config.yaml

no changes added to commit (use "git add" and/or "git commit -a")
 

Я бы хотел избежать проверки нестационарных файлов. Я знаю, что я делаю, и если я хочу зафиксировать только некоторые изменения (не все), то я хочу это сделать.

Как отключить проверку на неустановленные файлы?

Ответ №1:

Судя по вашим выводам, вы не подготовили никаких файлов для фиксации. so git само по себе помешало вам совершить (нет pre-commit ) — если вы действительно хотели ничего не совершать, вы можете использовать git commit --allow-empty . Если вы хотите подготовить некоторые файлы для фиксации, используйте git add или используйте git commit -a

Обратите внимание, что здесь не было ошибок pre-commit — только предупреждение, сообщающее вам, что нестационарные объекты были временно удалены, чтобы частичные коммиты могли быть успешно исправлены.


Отказ от ответственности: Я автор предварительной фиксации

Комментарии:

1. Спасибо! Я был слеп. Возможно, предварительная фиксация может быть более явной здесь (для глупых и слепых пользователей, таких как я).

2. Я думаю, что предварительная фиксация — это гораздо больше, чем простой помощник. Почему бы не использовать его для настройки среды разработки python, требования к которой находятся за пределами мира pyhon?

3. Я не уверен, о чем вы конкретно спрашиваете: S — pre-commit работает для всех видов разных языков программирования (несмотря на то, что написан на python и наиболее популярен на python)

4. @AnthonySottile Есть ли способ отключить pre-commit автоматическую постановку любых нестационарных изменений? Я бы хотел, чтобы мои сообщения Git правильно отражали, какие изменения произошли> Это довольно раздражает.

5. @demberto pre-commit никогда не коснется промежуточной области — так что у вас, вероятно, работает какая-то мошенническая вещь git add

Ответ №2:

Перехват предварительной фиксации будет использовать способ перебора файлов в наборе изменений. Вероятно, там есть что-то подобное git ls-files . Если вы используете git ls-files -c , тогда он просто покажет вам кэшированные изменения (по умолчанию) — если вы используете git ls-files -o , тогда он также покажет незафиксированные (другие) файлы.

Если вы повторно используете чужие перехваты, вам нужно будет исследовать эти перехваты, чтобы определить, есть ли способ выборочно отключить изменения.

Комментарии:

1. Ваш ответ касается общей предварительной фиксации, но вопрос заключается в pre-commit.com крючки.

2. Конечно, именно поэтому я сказал, что вам придется посмотреть на перехваты, предоставленные кем-то другим. Это не тот параметр конфигурации, который существует или используется по умолчанию, и нет стандартизированных флагов. Если вы посмотрите на код для перехватов, теперь вы знаете, что искать.

3. Вы правы «посмотрите на код» — это почти всегда ответ (помимо многих других ответов)