Git钩子Hook功能

💾 Hook 钩子


🔔 简介

Git Hooks是Git内置的一种机制,允许在特定事件发生时执行自定义脚本。Git Hook可以在客户端和服务器端配置,经常用于自动化任务、增强开发流程以及确保代码质量。



🔔 常见类型

📄项目 📜类型 💡含义
客户端
Hooks
pre-commit 在提交前运行
prepare-commit-msg 在生成提交信息前运行
commit-msg 在提交信息编辑完成后运行
post-commit 在提交完成后运行
pre-rebase 在变基操作前运行
pre-push 在推送代码前运行
服务器
Hooks
pre-receive 在服务器端接收到推送数据前运行
update 在服务器端更新每个分支前运行
post-receive 在服务器端接收推送数据后运行


🔔 如何配置

📄 个人配置:

将个人使用的Git Hook脚本存放在.git/hooks目录下。该目录默认包含一些示例脚本,可以将这些脚本重命名或替换为自定义脚本。


📄 团队配置:

将所有团队成员需要的Hook脚本放在项目中的某个目录(例如hooks),然后在项目根目录的.git配置文件中配置core.hooksPath指向该目录。

配置命令:

git config core.hooksPath hooks

.git目录下的config文件内容可看到多了hooksPath = hooks 的字段:

[core]
	...
	hooksPath = hooks

取消配置命令:

git config --unset core.hooksPath


🔔 使用场景

  • 💡 代码格式检查:pre-commit在提交之前使用工具检查代码格式是否符合团队规范。
  • 💡 运行单元测试:pre-commit在提交之前运行单元测试,确保新代码不会破坏现有功能。
  • 💡 提交信息检查:commit-msg确保提交信息符合特定格式或包含必要的内容。
  • 💡 代码审查:提交或推送代码时触发代码审查工具,自动化代码审查流程。
  • 💡 自动部署:在推送代码到特定分支后结合CI/CD工具自动部署到测试或生产环境。


🔔 示例

以下是使用pre-commit作为钩子的示例。每次提交前会执行该钩子。

📄 项目的结构:

GitHooksExample
├─ CMakeLists.txt
├─ hooks
│    └─ pre-commit
├─ scripts
│    └─ build.py
└─ src
       └─ main.cpp

在hooks目录(使用git config core.hooksPath hooks命令配置指向该目录)下有一个pre-commit的钩子。
在scripts目录下有个Python脚本,该脚本会被钩子使用,执行的时候会构建项目。


📄 pre-commit的内容:

#!/bin/bash

# 如果src目录下存在修改的文件就运行Python脚本
changes_files=$(git diff --name-only --relative=src)
if [ -n "$changes_files" ] ;then
  echo "$changes_files" files changed, running build script...
  python  scripts/build.py
  if [ $? -ne 0 ]; then
      echo "Build failed. Aborting commit."
      exit 1
  fi
else
    echo "Skipping build: no changes in src directory."
fi

# 允许继续
exit 0

📄 build.py的内容:

import os
import sys
import subprocess

VCINSTALLDIR = "C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Auxiliary/Build/vcvarsall.bat"

current_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
build_dir = os.path.normpath(current_dir + "/build")
os.makedirs(build_dir, exist_ok=True)

build_cmd = [f'{os.path.normpath(VCINSTALLDIR)}', 'x86']

cmake_cmd = [
    f'cmake',
    f'-DCMAKE_BUILD_TYPE=RelWithDebInfo',
    f'-DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE',
    f'-S{current_dir}',
    f'-B{build_dir}',
    '-G', 'Ninja'
]
cmake_build_cmd = [
    f'cmake',   
    f'--build', f'{build_dir}', 
    f'--config', f'RelWithDebInfo'
]

cmd = build_cmd + ['&&'] + cmake_cmd + ['&&'] + cmake_build_cmd

try:
    subprocess.run(cmd, shell=True, check=True)
    print("编译成功!")
    sys.exit(0)
except subprocess.CalledProcessError as e:
    print("编译失败:", e)
    sys.exit(1)

📄 提交时触发hooks:
在这里插入图片描述

可以看到在提交前对工程进行构建编译,编译完成后才会提交。


📄 提交异常代码时触发hooks:

接下来演示一下当main.cpp文件代码异常时的提交:

#include <iostream>

int main() {
    std::cout << "Hello, World!" << std::endl;
    
	//异常代码, 未定义 test
	test = 1;
	return 0;
}

进行提交时,可以看到编译构建失败,提交中止:
在这里插入图片描述

这样可以避免提交了一个错误的代码。减少错误。


本文件示例工程源码下载https://download.csdn.net/download/qq_41898196/89543736

相关推荐

  1. hook钩子功能在深度学习里有什么用

    2024-07-15 22:16:04       52 阅读
  2. pytest钩子hook使用2

    2024-07-15 22:16:04       18 阅读
  3. git hooks

    2024-07-15 22:16:04       52 阅读
  4. pytorch 钩子函数hook 详解及实战

    2024-07-15 22:16:04       52 阅读
  5. Pytorch中的钩子函数Hook函数

    2024-07-15 22:16:04       37 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-15 22:16:04       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-15 22:16:04       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-15 22:16:04       62 阅读
  4. Python语言-面向对象

    2024-07-15 22:16:04       72 阅读

热门阅读

  1. .NET Core项目中添加MIME类型

    2024-07-15 22:16:04       21 阅读
  2. 对于RBAC模型的认识

    2024-07-15 22:16:04       21 阅读
  3. 开源项目面临的机遇与挑战

    2024-07-15 22:16:04       21 阅读
  4. 【C++语言】正则表达式

    2024-07-15 22:16:04       20 阅读
  5. Mybatis防止SQL注入

    2024-07-15 22:16:04       21 阅读
  6. Vue2中的指令修饰符

    2024-07-15 22:16:04       19 阅读
  7. Python面试题:如何在 Python 中处理大数据集?

    2024-07-15 22:16:04       23 阅读
  8. 安全编织:Eureka驱动的分布式服务网格安全策略

    2024-07-15 22:16:04       22 阅读
  9. 速盾:cdn加速能提高多少?

    2024-07-15 22:16:04       17 阅读
  10. einsum算子不支持问题处理

    2024-07-15 22:16:04       22 阅读
  11. Vant Ui 最新访问地址

    2024-07-15 22:16:04       19 阅读