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"

posted @ 2024-04-15 12:54  feipeng8848  阅读(107)  评论(0编辑  收藏  举报