为什么要在Git提交时检查编码标准
开发过程中,团队成员的代码风格难免有差异。有人喜欢用两个空格缩进,有人偏爱四个;有人写注释像写诗,有人干脆不写。时间一长,项目就像拼凑的旧毛衣,看着就头疼。
更麻烦的是,等到代码审查阶段才发现格式问题,又要打回去修改,来回拉扯,效率低下。与其事后补救,不如在提交代码那一刻就拦住不符合规范的改动。
利用Git钩子实现提交前检查
Git提供了钩子(hook)机制,可以在特定操作前后执行脚本。比如pre-commit钩子,就是在git commit执行前触发的。只要在这个钩子里加入编码标准检查逻辑,就能确保每次提交都合规。
以JavaScript项目为例,假设你用ESLint做代码检查。可以这样配置:
#!/bin/sh
echo "正在检查代码格式..."
npm run lint -- --fix-dry-run
if [ $? -ne 0 ]; then
echo "代码格式有问题,请先修复再提交"
exit 1
fi把这个脚本保存为.git/hooks/pre-commit,并加上可执行权限:chmod +x .git/hooks/pre-commit。下次提交时,如果ESLint报错,提交就会被中断。
借助Husky简化钩子管理
直接操作.git/hooks有个问题:这些文件不会被纳入版本控制,新成员 clone 项目后还得手动配置,容易遗漏。
Husky是个流行的工具,能把Git钩子变成项目依赖的一部分。安装它:
npm install husky --save-dev
npx husky install然后添加一个pre-commit钩子:
npx husky add .husky/pre-commit "npm run lint"现在,任何人在运行git commit时都会自动执行npm run lint。这个配置会随项目一起传播,新人开箱即用。
结合Prettier统一代码风格
有时候,光报错还不够直观。Prettier可以直接格式化代码,避免因空格、引号等小问题引发争执。
配合Husky,在提交前自动格式化:
npx husky add .husky/pre-commit "npx prettier --write src/&& git add src/"这段命令会先用Prettier格式化src/目录下的文件,然后把改动自动加到暂存区。提交者几乎感觉不到额外操作,但代码始终整洁。
处理非JavaScript项目
不是所有项目都用JS。Python可以用flake8或ruff,Go有gofmt,Java靠checkstyle。原理都一样:找一个能检查或格式化代码的命令行工具,在pre-commit里调用它。
比如Python项目:
npx husky add .husky/pre-commit "ruff check src/"或者更进一步,自动修复:
npx husky add .husky/pre-commit "ruff check src/ --fix && git add src/"只要工具支持命令行调用,就能塞进Git钩子里。
团队协作中的实际效果
上线这套机制后,最明显的变化是代码审查更高效了。以前PR里总能看到“少了个分号”“缩进不对”这类低级反馈,现在这些都被挡在提交之外, reviewers可以专注逻辑设计和边界处理。
也有同事一开始觉得“太严格”,改个日志都要被拦下。但用熟之后反而觉得安心——至少不用担心自己手滑破坏整体风格。