codedefective/cg-hooks

Composer Git Hook

v3.1.1 2024-03-29 13:23 UTC

This package is auto-updated.

Last update: 2024-09-29 14:20:12 UTC


README

Software License Packagist Download

管理git钩子轻松在你的composer配置中。这个命令行工具使得实现项目范围内的一致使用git钩子变得容易。在composer文件中指定钩子可以使它们对项目团队中的每个成员都可用。这为每个人提供了一致的环境和行为,非常好。它还可以用来管理计算机上每个仓库的全局git钩子。这样,你可以为每个选择工作的项目创建一个可靠的钩子集。

安装

composer.jsonextra部分添加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 codedefective/cg-hooks

这将安装cghooks二进制文件到你的vendor/bin文件夹。如果该文件夹不在你的路径中,你需要在每个命令前加上vendor/bin/

注意:v3版本不再支持在composer.jsonscriptshooks根部分声明的钩子。

全局支持

您还可以全局安装它。当使用新增的全局git钩子管理功能时,使用cghooks感觉更为自然。

composer global require --dev codedefective/cg-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钩子。

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-commitpost-commit 钩子。

小心:如果锁文件被篡改或使用了强制选项,则在使用此包之前已存在但已在 composer 脚本配置中指定的钩子也将被删除。也就是说,如果你之前有一个 pre-commit 钩子,但你的当前 composer 配置中也有一个 pre-commit 钩子,此选项将导致命令删除你的初始钩子。

如果使用 --global 选项而没有提供目录,也不会回退到 $COMPOSER_HOME

列出钩子

可以使用 cghooks list-hooks 命令列出钩子。这基本上检查 composer 配置并列出具有文件的钩子。

常见选项

以下选项对所有命令都是通用的。

每个命令还有一个 -v 标志来控制详细日志的冗余。目前,仅支持一个级别。

测试钩子

在添加之前,可以使用 cghooks ${hook} 测试钩子。例如,cghooks pre-commit 将运行 pre-commit 钩子。

贡献

请参阅 CONTRIBUTING 以获取详细信息。

致谢

相关

许可证

MIT 许可证(MIT)。有关更多信息,请参阅 许可证文件