Jea*_*ett 18 git pre-commit githooks python-black pre-commit.com
我正在尝试使用预提交来管理Black作为 Git 预提交挂钩,但我一定是做错了。
在我的预提交配置文件中,我有:
- repo: https://github.com/psf/black
rev: 19.3b0
hooks:
- id: black
Run Code Online (Sandbox Code Playgroud)
我期望发生的是 Black 只修改暂存文件,并且提交成功。因为 Black 的全部意义在于它自动强制执行 Python 代码样式规则,所以不会提出任何问题。
当我暂存(非黑色兼容)文件并尝试提交时实际发生的情况:黑色继续修改文件以使其符合预期……但问题是它返回了“失败”。所以提交失败。然后我必须取消暂存文件,然后在再次提交之前重新暂存它......只有这样提交才能成功。
这是一个巨大的烦恼,不可能是预期的工作流程?
我究竟做错了什么?
Ant*_*ile 16
(作者在pre-commit
这里)
该框架有意不提供自动提交修改的方法。这里有一些要求这样的问题:
其中一个问题的评论:
pre-commit 本身永远不会触及暂存区。这些是静默中断提交的好方法。在我看来,这是 [其他框架所做的和建议的] 最糟糕的事情之一——钩子经常不完美,并且不应该掉以轻心。
也就是说,如果你想用枪,你的钩子可以调用
git add -u
并且预提交不会更好:) 草图(未经测试,不鼓励)Run Code Online (Sandbox Code Playgroud)- id: yapf entry: bash -c 'yapf "$@"; git add -u' --
(注意:使用
bash
可能会降低可移植性)
另一个评论说明
幸运的是,
git add -u && !!
如果你可以从臀部开火,它很容易跑步:)
看看black的README,你可能想使用该--check
选项,它只是根据文件是否符合标准而成功或不成功退出。这将导致提交失败而不修改文件。
我的一位开发人员提供了一个很好的提示,以防您因黑色(例如由于单/双引号)而导致提交失败,该问题已通过 pre-commit-hook(如双引号字符串)解决固定器)。你会遇到一种“无人问津的情况”。暂存文件中有一个已更改的文件,但无法由预提交挂钩提交,git status 不会看到任何更改,但提交失败(我认为这是一个真正的黑洞)。你只会在提交时失败,但什么也做不了(除了这个文件上的重置头)。一旦你处于这种情况并运行:使用commit -m 'Resolving pre-commit-hook changes' --no-verify
..... tada!:它已解决。
归档时间: |
|
查看次数: |
7983 次 |
最近记录: |