#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. Вы правы «посмотрите на код» — это почти всегда ответ (помимо многих других ответов)