xbhub / composer-git-hooks
轻松管理 composer 配置中的 git 钩
此包的规范仓库似乎已消失,因此该包已被冻结。
Requires
- php: >=7.3
Requires (Dev)
- ext-json: *
- phpunit/phpunit: ^7.0
This package is not auto-updated.
Last update: 2024-06-22 14:54:00 UTC
README
在 composer 配置中轻松管理 git 钩。此命令行工具使项目范围内一致使用 git 钩变得容易。在 composer 文件中指定钩子可以使它们对项目团队的所有成员都可用。这为每个人提供了一个一致的环境和行为,这是非常好的。还可用作在计算机上为每个仓库全局管理 git 钩。这样,您为每个选择工作的项目都有一组可靠的、由自己定制的钩子。
安装
将 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 中不再支持在 composer.json
的 scripts
或 hooks
根部分中声明的钩子。
全局支持
您还可以全局安装它。当使用新增的用于管理全局 git 钩的支持使用 cghooks
时,这感觉更自然。
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 事件
将以下事件添加到您的 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 钩。
选项 | 描述 | 命令 |
---|---|---|
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
的更新命令基本上忽略了锁文件,并尝试从 composer 文件添加钩子。这类似于 add
命令的 --force
选项所做的那样。如果自第一次添加钩子以来 composer.json
文件中的钩子已更改,则此命令很有用。
当与 --global
一起使用时,它的工作方式类似,只是在没有提供目录的情况下不会回退到 $COMPOSER_HOME
。
移除钩子
可以使用 cghooks remove
轻松移除钩子。这将移除在 composer 配置中指定的所有钩子。
也可以通过传递参数来移除钩子。命令 cghooks remove pre-commit post-commit
将移除 pre-commit
和 post-commit
钩子。
选项 | 描述 | 命令 |
---|---|---|
force | 不检查锁文件即可删除钩子 | cghooks remove --force |
小心:如果锁文件被篡改或使用了 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
钩子。
贡献
有关详细信息,请参阅 CONTRIBUTING。
致谢
相关
许可证
MIT 许可证 (MIT)。有关更多信息,请参阅 许可证文件。