预提交挂钩更改文件时提交消息出现问题

问题描述 投票:0回答:1

我准备了以下

pre-commit
挂钩:

#!/bin/sh

# Run flake8 and mypy
flake8 ./src
FLAKE8_EXIT_CODE=$?

mypy ./src
MYPY_EXIT_CODE=$?

# If either flake8 or mypy return an error, skip black and the commit process
if [ $FLAKE8_EXIT_CODE -ne 0 ] || [ $MYPY_EXIT_CODE -ne 0 ]; then
  echo "flake8 or mypy checks failed. Skipping black and commit."
  exit 1
fi
black .
git add -u

if ! git diff-index --quiet HEAD; then
  git commit --no-verify -m "Same message all the times!"
fi

请注意,

black .
重新格式化文件,因此我有第二个
git add -u
。为了避免无限递归,我添加了最后一个检查
git commit with --no-verify
,但是每次提交的提交消息都是相同的,我想避免它。相反,当我输入最后一个
if
分支时,我希望收到提交消息提示。 我尝试在最后一个
read
分支中使用
if
命令,但没有成功。 我还想避免使用外部工具作为预提交,但如果可能的话,我宁愿使用本机解决方案。

如何解决?

git
1个回答
0
投票

我建议对 black 执行与 pyflakes 和 mypy 相同的操作:将其作为检查器运行,如果检查器失败则拒绝提交,但实际上不要重新格式化代码。因此,您始终必须手动运行黑色,但它不会在您看到和不知道的情况下重新格式化文件。

black --check ./src

可以做到这一点(如果您愿意,您可以将该检查的输出发送到

/dev/null
以减少提交挂钩噪音)。当检查失败时,它(还)返回一个非零值,表明
black
将重新格式化代码。


但对于你特别想要的东西,也许

git commit --no-verify --amend --no-edit

这样做:它通过修改当前提交来保留最后的提交消息(并且不会打开编辑器来调整提交消息)。

© www.soinside.com 2019 - 2024. All rights reserved.