черный как хук pre-commit всегда терпит неудачу мои коммиты - PullRequest
2 голосов
/ 15 октября 2019

Я пытаюсь использовать pre-commit для управления black в качестве ловушек Git перед фиксацией, но я должен делать это неправильно.

Черный автоматически применяет правила стиля кода Python. В моем файле конфигурации перед фиксацией:

-   repo: https://github.com/psf/black
    rev: 19.3b0
    hooks:
    -   id: black

Я ожидаю, что черные просто изменят файл, а коммит будет успешным.

Но когда я ставлю (не черный) и попытайтесь зафиксировать, черный идет вперед и модифицирует файл, чтобы сделать его совместимым, как и предполагалось ... Но проблема в том, что он возвращает «сбой». Так что зафиксировать не удается. И затем мне нужно удалить файл, затем заново создать его перед повторной фиксацией ... и только тогда фиксация завершится успешно.

Это очень раздражает и не может быть намеченным рабочим процессом?

Что я делаю не так?

Ответы [ 3 ]

2 голосов
/ 19 октября 2019

(автор pre-commit здесь)

платформа намеренно не предоставляет способ автоматической фиксации изменений. Вот несколько вопросов, которые требуют такого:

Комментарий одного из этих вопросов:

Сама предварительная фиксация никогда не коснется области подготовки. Это хорошие способы молча нарушать коммиты. На мой взгляд, это одна из худших вещей, которые [другие фреймворки делают и предлагают] - хуки очень часто не совершенны, и магическое изменение того, что совершается, не следует воспринимать легкомысленно.

Тем не менее, если выкак нож, ваш хук может вызывать git add -u, и предварительная фиксация не будет лучше знать :) набросок этого (не проверено, не рекомендуется)

  - id: yapf
    entry: bash -c 'yapf "$@"; git add -u' --

(примечание: использование bash будетпотенциально уменьшает переносимость)

Еще один комментарий отмечает

К счастью, git add -u && !! довольно легко запустить, если вы хорошо стреляете из бедра:)

1 голос
/ 16 октября 2019

Глядя на чёрный README, вы, вероятно, захотите использовать опцию --check, которая просто завершается успешно или неудачно в зависимости от того, соответствует ли файл стандартам. Это приведет к сбою фиксации без изменения файла.

0 голосов
/ 18 октября 2019

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

Насколько я могу судить, лучшее следующее - это то, что обрисовал в общих чертах bk2204. Мы просим черный запретить любые коммиты, включающие файлы python, которые не были должным образом отформатированы черным. Он по-прежнему гарантирует, что любые коммиты отформатированы, но действительно раздражает, что он не просто автоматически форматирует файлы для нас.

Это имеет смысл. Любые изменения в коммите должны быть организованы. Если бы мы могли сделать это с помощью git hook, то наша проблема была бы решена. Вы попали на полпути, изменив файл прямо из git hook. Следующая половина будет инсценировать все изменения измененных файлов. Но очевидно ... «Вы не можете изменить коммит в хуке предварительного коммита», что означает отсутствие постановки. https://stackoverflow.com/a/14641656/6032076

Я бы прокомментировал ответ bk2204, но у меня еще нет 50 повторений.

Поцарапайте все это, этот ответ (https://stackoverflow.com/a/16832764/6032076) утверждаетчто фиксация может быть изменена в хуке предварительной фиксации. В этом случае файлы добавляются, поэтому я уверен, что в нашем случае файлы могут быть пересмотрены / исправлены.

...