在您的 Composer 配置中轻松管理 git hooks。这个命令行工具可以轻松实现 git hooks 在项目范围内的一致使用。在 Composer 文件中指定挂钩使项目团队的每个成员都可以使用它们。这为每个人提供了一致的环境和行为,这非常棒。还可以用于全局管理计算机上每个存储库的 git hook。这样,您就可以为您选择从事的每个项目制作一套可靠的挂钩。
将hooks
部分添加到composer.json
的extra
部分并在那里添加挂钩。
{
"extra" : {
"hooks" : {
"pre-commit" : [
"echo committing as $(git config user.name)" ,
"php-cs-fixer fix ." // fix style
] ,
// verify commit message. ex: ABC-123: Fix everything
"commit-msg" : "grep -q '[A-Z]+-[0-9]+.*' $1" ,
"pre-push" : [
"php-cs-fixer fix --dry-run ." // check style
"phpunit"
] ,
"post-merge" : "composer install"
"..." : "..."
}
}
}
然后安装
composer require --dev brainmaestro/composer-git-hooks
这会将cghooks
二进制文件安装到您的vendor/bin
文件夹中。如果此文件夹不在您的路径中,则您需要在每个命令前面加上vendor/bin/
。
注意:v3 不再支持在scripts
中声明的钩子或composer.json
的hooks
根部分。
您也可以全局安装它。当cghooks
与新添加的管理全局 git hooks 的支持一起使用时,这感觉更自然。
composer global require --dev brainmaestro/composer-git-hooks
所有命令都具有全局支持(除了测试钩子之外。仍然需要位于包含composer.json
文件的目录中)。
当挂钩是命令序列时,在命令失败时停止执行会很有用。
在stop-on-failure
”配置部分中指定受影响的挂钩。
{
"extra" : {
"hooks" : {
"config" : {
"stop-on-failure" : [ " pre-push " ]
},
"pre-push" : [
" php-cs-fixer fix --dry-run --stop-on-violation . " ,
" phpunit "
],
}
}
}
始终确保在更改stop-on-failure
配置部分后运行更新命令。
自定义挂钩可以添加到`config 部分的custom-hooks
数组中。
{
"extra" : {
"hooks" : {
"config" : {
"custom-hooks" : [ " pre-flow-feature-start " ]
},
"pre-flow-feature-start" : [
" echo 'Starting a new feature...' "
]
}
}
}
始终确保在更改custom-hooks
配置部分后运行更新命令。注意: config
不是有效的自定义挂钩值。
将cghooks
脚本添加到composer.json
文件的scripts
部分。这样,可以使用composer cghooks ${command}
运行命令。如果您不想编辑系统路径,这是理想的选择。
{
"scripts" : {
"cghooks" : " vendor/bin/cghooks " ,
"..." : " ... "
}
}
将以下事件添加到您的composer.json
文件中。每次事件发生时都会运行cghooks
命令。有关 Composer 事件系统的更多详细信息,请参阅 Composer 命令事件。
{
"scripts" : {
"post-install-cmd" : " cghooks add --ignore-lock " ,
"post-update-cmd" : " cghooks update " ,
"..." : " ... "
}
}
以下所有命令都必须在与composer.json
文件相同的文件夹中运行,或者通过指定--git-dir
选项来指向包含composer.json
文件的文件夹。
安装完成后,运行cghooks add
以添加 Composer 配置中指定的所有有效 git hook。
选项 | 描述 | 命令 |
---|---|---|
no-lock | 不创建锁定文件 | cghooks add --no-lock |
ignore-lock | 将锁定文件添加到 .gitignore | cghooks add --ignore-lock |
force-win | 强制 Windows bash 兼容性 | cghooks add --force-win |
lock
文件包含所有添加的挂钩的列表。
如果使用--global
标志,钩子将被全局添加,并且全局git配置也将被修改。如果未提供目录,则会回退到全局配置中的当前core.hooksPath
。如果未设置该值,则默认为$COMPOSER_HOME
(此特定回退仅发生在add
命令中)。如果回退后仍然没有路径,它将失败并出现错误。
使用cghooks update
运行的更新命令基本上会忽略锁定文件并尝试从作曲家文件添加挂钩。这与add
命令的--force
选项的作用类似。如果自第一次添加挂钩以来, composer.json
文件中的挂钩已发生更改,则此命令非常有用。
与--global
一起使用时,其工作原理类似,只是如果未提供目录,则不会回退到$COMPOSER_HOME
。
可以使用cghooks remove
轻松删除钩子。这将删除 Composer 配置中指定的所有挂钩。
也可以通过将钩子作为参数传递来删除它们。命令cghooks remove pre-commit post-commit
这将删除pre-commit
和post-commit
挂钩。
选项 | 描述 | 命令 |
---|---|---|
force | 删除钩子而不检查锁定文件 | cghooks remove --force |
小心:如果锁定文件被篡改或使用了强制选项,则在使用此包之前已经存在但在 Composer 脚本配置中指定的挂钩也将被删除。也就是说,如果您之前有一个pre-commit
挂钩,但当前的 Composer 配置也有一个pre-commit
挂钩,则此选项将导致命令删除您的初始挂钩。
如果与--global
一起使用时未提供目录,则这也不会回退到$COMPOSER_HOME
。
可以使用cghooks list-hooks
命令列出挂钩。这基本上会检查 Composer 配置并列出实际具有文件的钩子。
以下选项对于所有命令都是通用的。
选项 | 描述 | 命令 |
---|---|---|
git-dir | git 目录的路径 | cghooks ${command} --git-dir='/path/to/.git' |
lock-dir | 锁定文件目录的路径 | cghooks ${command} --lock-dir='/path/to/lock' |
global | 全局运行指定命令 | cghooks ${command} --global |
每个命令还有一个标志-v
来控制更详细日志的详细程度。目前仅支持一级。
在添加钩子之前,可以使用cghooks ${hook}
对其进行测试。示例cghooks pre-commit
运行pre-commit
挂钩。
详细信息请参阅贡献。
麻省理工学院许可证 (MIT)。请参阅许可证文件以获取更多信息。