git 提交之前的检查
要使用 pre-commit 钩子,你需要执行以下步骤:
找到 .git/hooks 目录:在你的 Git 仓库中,找到 .git/hooks 目录。这个目录包含了所有的 Git 钩子脚本。
创建 pre-commit 钩子文件:在 .git/hooks 目录下创建一个名为 pre-commit 的文件。你可以使用任何文本编辑器创建这个文件。
编写 pre-commit 脚本:在 pre-commit 文件中编写你希望在提交之前执行的操作。这可以是运行代码风格检查、运行单元测试、进行静态代码分析等。确保脚本能够在当前环境中正确运行。
赋予脚本执行权限:在创建完 pre-commit 文件后,确保给它执行权限,使其能够在提交时被执行。你可以通过 chmod +x pre-commit 命令来赋予执行权限。
测试钩子:在编辑完 pre-commit 脚本并赋予执行权限后,尝试执行一个提交操作,看看钩子是否按预期执行。如果一切正常,你应该能够看到你在脚本中定义的操作在提交前执行。
需要注意的是,pre-commit 钩子是针对单个仓库的,因此你可能需要在每个 Git 仓库中都配置一次。
当 pre-commit 脚本以非零退出码退出时,Git 会认为提交操作失败,并阻止提交
支持任何脚本语言,只要系统中装有相关的解释器
#!/bin/sh
#
# An example hook script to verify what is about to be committed.
# Called by "git commit" with no arguments. The hook should
# exit with non-zero status after issuing an appropriate message if
# it wants to stop the commit.
#
# To enable this hook, rename this file to "pre-commit".
if git rev-parse --verify HEAD >/dev/null 2>&1
then
against=HEAD
else
# Initial commit: diff against an empty tree object
against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
fi
# Redirect output to stderr.
exec 1>&2
cpplint=cpplint
sum=0
filters='-build/include_order,-build/namespaces,-legal/copyright,-runtime/references'
# for cpp
for file in $(git diff-index --name-status $against -- | grep -E '\.[ch](pp)?$' | awk '{print $2}'); do
$cpplint --linelength=100 --filter=$filters $file
sum=$(expr ${sum} + $?)
done
if [ ${sum} -eq 0 ]; then
exit 0
else
exit 1
fi
如果想要忽略pre-commit
脚本,只需要添加-n
即可git commit -n -m "balabala"