Git 如何让 blank-at-eol 忽略空行缩进?
数据小许
结论
Git 的 core.whitespace 没有规则能根据相邻行的缩进来判断是否应忽略空行中的空格。blank-at-eol 会将行尾空白视为错误,因此空行中有空格时也可能被标记。
可以用 -blank-at-eol 关闭这项检查,但这样也会停止检查其他行末尾的空白。Git 没有内置选项可以只忽略空行,同时继续检查非空行末尾的空白。
调整 Git 配置
若只想在当前仓库关闭 blank-at-eol,可以运行:
git config --local core.whitespace -blank-at-eol
若要让设置对当前用户的所有仓库生效,将 --local 改成 --global:
git config --global core.whitespace -blank-at-eol
-blank-at-eol 会关闭整项行尾空白检查,其他空白规则仍可单独启用。如果仓库或用户配置中已有自定义的 core.whitespace 值,请先查看现有配置,再将 -blank-at-eol 加入其中,以免覆盖已有规则:
git config --show-origin --get-all core.whitespace
如果需要保留非空行的检查
Git 自带的 blank-at-eol 无法只检查非空行末尾的空白、同时忽略空行上的缩进。要实现这一点,需要使用自定义脚本或 hook 逐行判断:跳过内容为空或只含空格、制表符的行,其他行则继续检查行尾空白。
这种自定义检查不会改变 Git 内置 git diff --check 的判断。如果仍启用 blank-at-eol,Git 的 diff 检查仍可能报告空行上的空格。
备注:内容仅供参考。
