使用しようとしています pre-commit
を管理するには black
をGitのプリコミットフックとして使用しますが、間違っているはずです。
黒の自動実行Pythonコードスタイルルール。私のコミット前の構成ファイルで:
- repo: https://github.com/psf/black
rev: 19.3b0
hooks:
- id: black
私が期待しているのは、黒がファイルを変更するだけで、コミットが成功することです。
しかし、(黒に準拠していない)ファイルをステージングしてコミットしようとすると、黒が先に進み、意図したとおりに準拠するようにファイルを変更します...しかし、問題は「失敗」を返すことです。したがって、コミットは失敗します。そして、ファイルをアンステージし、再度コミットする前にファイルを再ステージする必要があります...コミットが成功するのはそのときだけです。
これは大きな煩わしさであり、意図したワークフローではないのでしょうか?
何が悪いのですか?
黒のREADMEを見ると、おそらく--check
オプション。これは、ファイルが標準に適合しているかどうかに応じて、正常に終了するか失敗して終了するかを示します。これにより、ファイルを変更せずにコミットが失敗します。
私の開発者の1人は、pre-commit-hookで解決された黒(たとえば、単一引用符または二重引用符)が原因でコミットが失敗した場合に備えて、良いヒントを提供しました(二重引用符文字列のように)フィクサー)。あなたは一種の「nobodysランドgit状況」に陥ります。ステージングされたファイルに変更されたファイルがありますが、pre-commit-hookでコミットすることはできません。gitステータスには変更が表示されませんが、コミットは失敗します(私の意見では本当にブラックホール)。コミットに失敗するだけですが、何もできません(このファイルのリセットヘッドを除く)。いったんこの状況になって実行した場合:commit -m 'Resolving pre-commit-hook changes' --no-verify
..... tada!を使用してください。
私はあなたと同じ船です。 私が調査してきたことから、コミットはプリコミットフックでは修正できません。
私が理解できる限り、次の最良のものはbk2204の概要です。 pythonファイルが黒で適切にフォーマットされていないコミットを防止するように黒に依頼します。それでも、すべてのコミットがフォーマットされていることを確認しますが、実際にはそれが不愉快です。自動的にファイルをフォーマットします。
それは理にかなっている。コミットの変更はすべてステージングする必要があります。これをgitフックから実行できれば、問題は解決されます。 gitフックから直接ファイルを変更して、途中まで行きました。次の半分は、変更されたファイルのすべての変更をステージングすることになります。しかし、明らかに...「ステージングなしを意味する「プリコミットフックでコミットを修正することはできません」。 https://stackoverflow.com/a/14641656/6032076
私はbk2204の回答についてコメントしたでしょうが、まだ50人の担当者がいません。
すべてをスクラッチして、この回答( https://stackoverflow.com/a/16832764/6032076 )は、コミット前のフックでコミットを変更できると主張しています。その場合、ファイルが追加されるので、私たちの場合、ファイルを再ステージング/修正できると思います。