提交前想做一层不依赖语言工具链的检查,可以先跑 git diff --check。它会检查这次改动新引入的空白错误,也能提示残留的冲突标记;发现问题时返回非零状态,放进脚本或 CI 都比较顺手。
环境:Git 2.39+;Linux 或 macOS;Bash;需要 mktemp。下面只操作新建的临时仓库:
set -eu
repo=$(mktemp -d)
trap 'rm -rf -- "$repo"' EXIT
git init -q -b main "$repo"
git -C "$repo" config user.name "Diff Check Demo"
git -C "$repo" config user.email "[email protected]"
printf 'clean line\n' >"$repo/note.txt"
git -C "$repo" add note.txt
git -C "$repo" commit -qm 'initial'
printf 'line with trailing spaces \n' >"$repo/note.txt"
if git -C "$repo" diff --check; then
printf 'expected worktree check to fail\n' >&2
exit 1
fi
git -C "$repo" add note.txt
if git -C "$repo" diff --cached --check; then
printf 'expected staged check to fail\n' >&2
exit 1
fi
未暂存的改动用 git diff --check,已经 git add 的内容则用 git diff --cached --check。它不是格式化器,也不会检查没有变化的旧代码;适合做一道很快的提交前检查。项目调整过 core.whitespace 时,判定规则也会跟着配置变化。