Rust Git钩子管理工具rusty-hook的使用,自动化执行Rust项目的Git预提交、预推送等钩子脚本

Rust Git钩子管理工具rusty-hook的使用,自动化执行Rust项目的Git预提交、预推送等钩子脚本

快速开始

前提条件:确保已安装Rust且Cargo的bin目录在PATH中。

  1. 在Cargo.toml文件中添加rusty-hook作为开发依赖
  2. 运行cargo test(构建开发依赖,包括rusty-hook
  3. 更新生成的.rusty-hook.toml文件,配置要运行的命令
  4. 运行git commit(或触发git钩子的等效操作)!
    • 你可能希望钩子脚本失败(例如,如果提交钩子是cargo test,则添加一个失败的测试)以查看钩子是否被强制执行
    • 注意:第一次(也是唯一一次)执行此操作将需要额外约30秒来完成设置

设置

只需在Cargo.toml文件中添加rusty-hook作为开发依赖:

[dev-dependencies]
rusty-hook = "^0.11.2"

初始化

当你在项目中添加rusty-hook作为开发依赖时,它会在构建后自动配置git钩子(例如第一次运行cargo test时)。

这将确保所有客户端git钩子都已设置并可用,如果不存在配置文件,它将创建一个rusty-hook配置文件。

git钩子脚本将确保rusty-hook cli可用,因此第一次在机器上触发git钩子时,你会看到一条消息,指示rusty-hook设置正在完成,可能需要约30秒:

Finalizing rusty-hook configuration...
This may take a few seconds...

(可选)安装

你也可以使用cargo安装rusty-hook cli:

cargo install rusty-hook

你可以选择在任何git目录中手动运行init命令来设置它:

rusty-hook init

配置

你可以在rusty-hook配置文件(名为.rusty-hook.tomlrusty-hook.toml的TOML文件)中定义所需的git钩子配置。

以下是一个示例rusty-hook配置:

[hooks]
pre-commit = "cargo test"  # 在提交前运行测试
pre-push = "cargo fmt -- --check"  # 在推送前检查代码格式
post-commit = "echo yay"  # 提交后显示"yay"

[logging]
verbose = true  # 显示详细日志

钩子

[hooks]表下,你可以为任何你想运行的git钩子添加条目,方法是使用git钩子的名称作为键,然后指定要为该钩子运行的命令/脚本。每当触发该git钩子时,rusty-hook将运行你指定的命令!

日志记录

[logging]表下,你可以控制是否记录运行指定钩子命令的输出。默认情况下,rusty-hook会记录钩子脚本的结果,但你可以通过将verbose键设置为false来禁用此行为:

[logging]
verbose = false  # 禁用详细日志

完整示例

下面是一个完整的Rust项目使用rusty-hook的示例:

  1. 首先在Cargo.toml中添加依赖:
[dev-dependencies]
rusty-hook = "0.11.2"
  1. 创建或修改.rusty-hook.toml配置文件:
[hooks]
pre-commit = "cargo fmt && cargo clippy -- -D warnings"  # 提交前自动格式化和检查代码
pre-push = "cargo test"  # 推送前运行所有测试
post-merge = "cargo check"  # 合并后检查项目

[logging]
verbose = true  # 显示详细输出
  1. 运行cargo testcargo build来初始化rusty-hook

  2. 现在当你执行git操作时,相应的钩子会自动运行:

    • git commit时会先运行cargo fmtcargo clippy
    • git push时会先运行cargo test
    • git merge后会运行cargo check

移除rusty-hook

  1. 从项目的Cargo.toml文件中移除rusty-hook开发依赖
  2. 从项目中移除.rusty-hook.toml配置文件
  3. 移除本地项目工作区git hooks目录中的git钩子脚本(通常在.git/hooks/目录中)

1 回复

Rust Git钩子管理工具rusty-hook的使用指南

工具介绍

rusty-hook是一个用于管理Git钩子的Rust工具,它可以帮助开发者自动化执行Rust项目的Git预提交(pre-commit)、预推送(pre-push)等钩子脚本。这个工具特别适合Rust项目,可以轻松集成到开发工作流中,确保代码质量。

安装方法

可以通过Cargo直接安装rusty-hook:

cargo install rusty-hook

或者作为开发依赖添加到项目中:

cargo add --dev rusty-hook

基本使用方法

1. 初始化rusty-hook

在项目根目录下运行:

cargo run -- init

这会在项目根目录下创建.rusty-hook.toml配置文件。

2. 配置示例

.rusty-hook.toml配置示例:

[hooks]
pre-commit = "cargo fmt && cargo clippy -- -D warnings"
pre-push = "cargo test"

3. 启用钩子

运行以下命令启用配置的Git钩子:

cargo run -- enable

高级用法

自定义脚本

你可以在配置文件中指定自定义脚本:

[hooks]
pre-commit = "scripts/pre-commit.sh"

条件执行

rusty-hook支持条件执行,例如只对特定文件类型运行钩子:

[hooks]
pre-commit = { command = "cargo fmt", include = "*.rs" }

多命令执行

可以配置多个命令按顺序执行:

[hooks]
pre-commit = [
    "cargo fmt",
    "cargo clippy -- -D warnings",
    "cargo test"
]

实际示例

完整的Rust项目配置示例

[hooks]
pre-commit = [
    { command = "cargo fmt", include = "**/*.rs" },
    { command = "cargo clippy -- -D warnings", include = "**/*.rs" },
    "cargo test"
]

pre-push = "cargo build --release"

禁用特定钩子

cargo run -- disable pre-commit

查看当前钩子状态

cargo run -- status

完整示例demo

以下是一个完整的Rust项目使用rusty-hook的示例:

  1. 首先创建新项目并添加rusty-hook依赖:
cargo new my_project
cd my_project
cargo add --dev rusty-hook
  1. 初始化rusty-hook配置:
cargo run -- init
  1. 编辑生成的.rusty-hook.toml文件:
[hooks]
# 预提交钩子:格式化代码、运行clippy检查、运行测试
pre-commit = [
    { command = "cargo fmt", include = "**/*.rs" },
    { command = "cargo clippy -- -D warnings", include = "**/*.rs" },
    "cargo test"
]

# 预推送钩子:构建release版本
pre-push = "cargo build --release"

# 提交信息钩子:检查提交信息格式
commit-msg = "scripts/verify-commit-msg.sh"
  1. 创建自定义脚本scripts/verify-commit-msg.sh
#!/bin/bash
# 验证提交信息格式

commit_msg_file=$1
commit_msg=$(cat "$commit_msg_file")

# 检查提交信息是否以特定前缀开头
if ! [[ $commit_msg =~ ^(feat|fix|docs|style|refactor|test|chore) ]]; then
    echo "提交信息必须以以下前缀开头: feat, fix, docs, style, refactor, test, chore"
    exit 1
fi
  1. 给脚本添加执行权限:
chmod +x scripts/verify-commit-msg.sh
  1. 启用所有配置的钩子:
cargo run -- enable

注意事项

  1. rusty-hook需要Git版本2.9或更高
  2. 确保.git/hooks目录有可执行权限
  3. 钩子脚本中的命令需要在项目根目录下执行

rusty-hook通过自动化Git钩子管理,可以帮助Rust开发者保持代码风格一致,并在提交或推送前自动运行测试和检查,是提高代码质量的实用工具。

回到顶部