sostheblack / composer-git-hooks
轻松管理composer配置中的git hooks
此软件包的官方仓库似乎已消失,因此该软件包已被冻结。
Requires
- php: ^8
- symfony/console: ^6.0
Requires (Dev)
- ext-json: *
- friendsofphp/php-cs-fixer: ^3.0
- phpunit/phpunit: ^9.5
This package is not auto-updated.
Last update: 2023-03-29 15:28:32 UTC
README
在composer配置中轻松管理git hooks。这个命令行工具可以轻松实现git hooks在项目范围内的统一使用。在composer文件中指定hooks,使它们对项目团队的所有成员都可用。这为每个人提供了一个一致的环境和行为,非常好。还可以用于管理计算机上每个仓库的全局git hooks。这样,你可以为选择要工作的每个项目创建一个可靠的自定义hooks集合。
安装
将hooks
部分添加到composer.json
文件中的extra
部分,并将hooks添加到其中。
{ "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 sostheblack/composer-git-hooks
这会将cghooks
二进制文件安装到您的vendor/bin
文件夹中。如果此文件夹不在您的路径中,您需要在每个命令前加上vendor/bin/
。
注意:在v3中不再支持在composer.json
的scripts
或hooks
根部分中声明的hooks。
全局支持
您还可以全局安装它。当使用新添加的全局git hooks管理支持时,使用cghooks
会感觉更自然。
composer global require --dev sostheblack/composer-git-hooks
所有命令都支持全局(除了测试hooks。仍然需要在包含composer.json
文件的目录中)。
可选配置
失败时停止
当hooks是一系列命令时,在命令失败时停止执行可能很有用。
在stop-on-failure
配置部分指定受影响的hooks。
{ "extra": { "hooks": { "config": { "stop-on-failure": ["pre-push"] }, "pre-push": [ "php-cs-fixer fix --dry-run --stop-on-violation .", "phpunit" ], } } }
在更改stop-on-failure
配置部分后,务必运行更新命令。
自定义hooks
可以将自定义hooks添加到`config`部分的`custom-hooks`数组中。
{ "extra": { "hooks": { "config": { "custom-hooks": ["pre-flow-feature-start"] }, "pre-flow-feature-start": [ "echo 'Starting a new feature...'" ] } } }
在更改`custom-hooks`配置部分后,务必运行更新命令。注意:config
不是有效的自定义hook值。
快捷方式
将cghooks
脚本添加到composer.json
文件中的scripts
部分。这样,可以通过composer cghooks ${command}
运行命令。如果您不想编辑系统路径,这很理想。
{ "scripts": { "cghooks": "vendor/bin/cghooks", "...": "..." } }
Composer事件
将以下事件添加到您的composer.json
文件中。每当事件发生时,都会运行cghooks
命令。有关Composer事件系统的更多信息,请参阅[Composer命令事件][link-composer-events]。
{ "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 |
锁文件包含所有已添加钩子的列表。
如果使用 --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 |
小心:如果锁文件被篡改或使用了强制选项,则在使用此包之前已存在但在 composer 脚本配置中指定的钩子也将被删除。也就是说,如果您之前有一个 pre-commit
钩子,但您的当前 composer 配置也有一个 pre-commit
钩子,则此选项将导致命令删除您的初始钩子。
此选项在没有提供目录时也不会回退到 $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。
鸣谢
- [Ezinwa Okpoechi][link-author]
- [所有贡献者][link-contributors]
相关
- [husky][link-husky]
许可证
MIT 许可证(MIT)。有关更多信息,请参阅 许可证文件。