черный, поскольку хук предварительной фиксации всегда терпит неудачу, мои коммиты
Я пытаюсь использовать pre-commit
управлять black
как хуки перед фиксацией Git, но я, должно быть, делаю это неправильно.
Черный автоматически применяет правила стиля кода Python. В моем конфигурационном файле перед фиксацией:
- repo: https://github.com/psf/black
rev: 19.3b0
hooks:
- id: black
Я ожидаю, что черный цвет просто изменит файл, а фиксация будет успешной.
Но когда я создаю файл (несовместимый с черным) и пытаюсь зафиксировать, черный идет дальше и модифицирует файл, чтобы сделать его совместимым, как задумано... Но проблема в том, что он возвращает "сбой". Итак, фиксация не удалась. И затем я должен отключить файл, затем перезапустить его перед повторной фиксацией... и только тогда фиксация будет успешной.
Это очень раздражает и не может быть запланированным рабочим процессом?
Что я делаю неправильно?
5 ответов
(автор pre-commit
Вот)
фреймворк намеренно не предоставляет возможность автоматической фиксации изменений. Вот несколько вопросов, о которых просили:
- предварительная фиксация / предварительная фиксация #806
- предварительная фиксация / предварительная фиксация #747
Комментарий от одной из этих проблем:
pre-commit никогда не затрагивает область подготовки. Это хорошие способы молча прерывать коммиты. На мой взгляд, это одна из худших вещей, которые [делают и предлагают другие фреймворки] - хуки очень часто не идеальны, и к волшебному изменению того, что совершается, не следует относиться легкомысленно.
Тем не менее, если вы хотите использовать пистолет, ваш крюк может вызвать
git add -u
и предварительная фиксация не знает ничего лучше:) набросок этого (непроверенный, обескураженный)- id: yapf entry: bash -c 'yapf "$@"; git add -u' --
(примечание: использование
bash
потенциально снизит переносимость)
Другой комментарий отмечает
К счастью,
git add -u && !!
довольно легко бежать, если вы в порядке, стреляя от бедра:)
Один из моих разработчиков дал хороший совет на тот случай, если у вас есть сбой при фиксации из-за черного цвета (например, из-за одинарных / двойных кавычек), который разрешается с помощью хука предварительной фиксации (например, с двойной кавычкой-строкой - фиксатор). вы попадаете в ситуацию "никто не садится на мерзавцев". В поэтапных файлах есть измененный файл, но он не может быть зафиксирован обработчиком pre-commit, git status не увидит никаких изменений, но фиксация не удалась (на мой взгляд, настоящая черная дыра). Вы получаете ошибку только при фиксации, но ничего нельзя сделать (кроме заголовка сброса в этом файле). Как только вы окажетесь в этой ситуации и запустите: используйтеcommit -m 'Resolving pre-commit-hook changes' --no-verify
..... тада! Решено.
Глядя на README черного, вы, вероятно, захотите использовать --check
вариант, который просто завершается успешно или безуспешно в зависимости от того, соответствует ли файл стандартам. Это приведет к сбою фиксации без изменения файла.
Я такая же лодка, как ты. Из того, что я исследовал, коммиты не могут быть изменены с помощью хуков перед фиксацией.
Насколько я могу понять, лучше всего то, что изложил bk2204. Мы просим черный цвет предотвратить любые коммиты, которые включают файлы python, которые не были правильно отформатированы черным цветом. Он по-прежнему следит за форматированием любых коммитов, но действительно раздражает, что он не просто автоматически форматирует файлы для нас.
Это имеет смысл. Любые изменения в фиксации должны быть инсценированы. Если бы мы могли сделать это с помощью git-хука, наша проблема была бы решена. Вы прошли половину пути, изменив файл прямо с помощью git-хука. В следующей половине будут производиться все изменения измененных файлов. Но, очевидно... "Вы не можете изменить фиксацию в хуке предварительной фиксации", что означает отсутствие постановки. /questions/10527457/git-hook-izmenit-fajlyi-kommitov/10527467#10527467
Я бы прокомментировал ответ bk2204, но у меня еще нет 50 повторений.
Поцарапайте все это, этот ответ ( /questions/9675022/mozhete-li-vyi-izmenit-soderzhimoe-fajla-vo-vremya-git-commit/9675038#9675038) утверждает, что коммиты могут быть изменены с помощью хука предварительной фиксации. В этом случае файлы добавляются, поэтому я уверен, что в нашем случае файлы можно перегруппировать / изменить.
По моему опыту, нет необходимости
unstage
любые файлы, либо просто
git add
файлы, которые затемняются, или другие перехватчики предварительной фиксации, снова измененные, что перезапишет их в области рабочей области и
commit
с тем же сообщением, что и раньше, если только ошибка не была связана с проверкой сообщения фиксации.
Если ваша фиксация включает в себя все ваши измененные файлы, то просто изменив команду фиксации с
git commit -m "Your commit message"
к
git commit -am "Your commit message"
сделает работу красиво.