使用 Git 钩子 - Husky.Net

发布时间 2023-07-27 15:47:45作者: 初久的私房菜

在我们的日常工作中,我们通常需要执行一些重复性任务,如格式化代码、运行单元测试和遵循提交策略等。虽然这些任务简单易行,但我们经常会浪费大量的时间和精力来完成它们。幸运的是,有一种方式可以自动化这些任务——Git 钩子。在本篇文章中,我们将探讨 Git 钩子的概念,并回顾一下 Husky.Net,这是一个在 .NET 生态系统下开始使用 Git 钩子的简单方法。

Git 钩子

Git 钩子提供了一种方法,在不同事件(前后)触发自定义脚本,例如提交、推送或变基等。有两种类型的钩子:

客户端钩子:由本地存储库中的事件触发,例如开发人员提交代码时。
服务器端钩子:在远程存储库下运行,并由接收到的推送等事件触发。
有用的客户端钩子

pre-commit

在 Git 请求开发人员输入提交消息或生成提交对象之前调用。它不带任何参数,如果以非零状态退出,则会中止提交操作。用于静态分析、linting、拼写检查和代码样式检查或运行测试。

prepare-commit-msg

在准备默认的提交消息之后调用,就在启动提交消息编辑器之前。参数:文件名包含提交日志消息的名称、提交类型:fix、feat、docs、style、refactor、perf、test、build、ci、chore、revert 或其他。还包括提交 SHA1。

它适用于在提交作者看到之前编辑默认消息(例如,在提交消息中添加分支名称)。

commit-msg

在用户输入提交消息后调用。此钩子需要一个参数,即包含提交消息的临时文件的路径。它是验证提交状态或消息以确保符合标准或根据任何标准拒绝的适当位置。

post-commit

在提交操作完成后调用。没有参数,可用于提供通知。

pre-push

在推送之前调用,可以用于防止推送。该钩子有两个参数:远程名称和位置(URL)。

Husky.Net

Husky.Net 提供了一种非常简单的方法来开始使用 Git 钩子,例如运行特定任务、编写和运行自定义脚本。

让我们开始安装 Husky.Net:

dotnet tool install --global Husky
现在,我们将创建一个简单的 .NET Core 控制台应用程序来演示 Husky 的用法。请打开终端并依次键入以下命令:

mkdir husky-demo
cd husky-demo
dotnet new console -n MyProject
dotnet new sln
dotnet sln add MyProject
dotnet add MyProject package Newtonsoft.Json
现在,在 MyProject 文件夹中创建一个名为 example.json 的新文件,并将其内容设置为以下 JSON 对象:

json
{
"name": "Husky Demo",
"description": "This is an example of using Husky with Git hooks in .NET"
}
接下来,我们将为 pre-commit 钩子添加一个任务,用于格式化代码并删除不必要的文件。在 Husky 中,您可以为每个钩子添加多个任务。

dotnet husky add pre-commit -c "dotnet format && git clean -fd"
最后,请提交更改并观察 Husky 如何在您提交代码之前自动运行预先配置的任务。

git add .
git commit -m "Add example.json"
现在,您已了解如何使用 Husky 在 .NET 应用程序中管理 Git 钩子。Happy coding!