Rust Git钩子管理工具rusty-hook的使用,自动化执行Rust项目的Git预提交、预推送等钩子脚本
Rust Git钩子管理工具rusty-hook的使用,自动化执行Rust项目的Git预提交、预推送等钩子脚本
快速开始
前提条件:确保已安装Rust且Cargo的bin目录在PATH中。
- 在Cargo.toml文件中添加
rusty-hook
作为开发依赖 - 运行
cargo test
(构建开发依赖,包括rusty-hook
) - 更新生成的
.rusty-hook.toml
文件,配置要运行的命令 - 运行
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.toml
或rusty-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的示例:
- 首先在Cargo.toml中添加依赖:
[dev-dependencies]
rusty-hook = "0.11.2"
- 创建或修改
.rusty-hook.toml
配置文件:
[hooks]
pre-commit = "cargo fmt && cargo clippy -- -D warnings" # 提交前自动格式化和检查代码
pre-push = "cargo test" # 推送前运行所有测试
post-merge = "cargo check" # 合并后检查项目
[logging]
verbose = true # 显示详细输出
-
运行
cargo test
或cargo build
来初始化rusty-hook -
现在当你执行git操作时,相应的钩子会自动运行:
git commit
时会先运行cargo fmt
和cargo clippy
git push
时会先运行cargo test
git merge
后会运行cargo check
移除rusty-hook
- 从项目的
Cargo.toml
文件中移除rusty-hook
开发依赖 - 从项目中移除
.rusty-hook.toml
配置文件 - 移除本地项目工作区git hooks目录中的git钩子脚本(通常在
.git/hooks/
目录中)
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的示例:
- 首先创建新项目并添加rusty-hook依赖:
cargo new my_project
cd my_project
cargo add --dev rusty-hook
- 初始化rusty-hook配置:
cargo run -- init
- 编辑生成的
.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"
- 创建自定义脚本
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
- 给脚本添加执行权限:
chmod +x scripts/verify-commit-msg.sh
- 启用所有配置的钩子:
cargo run -- enable
注意事项
- rusty-hook需要Git版本2.9或更高
- 确保
.git/hooks
目录有可执行权限 - 钩子脚本中的命令需要在项目根目录下执行
rusty-hook通过自动化Git钩子管理,可以帮助Rust开发者保持代码风格一致,并在提交或推送前自动运行测试和检查,是提高代码质量的实用工具。