luizalabs-opensource-php/composer-git-hooks

轻松管理 composer 配置中的 git hooks。BrainMaestro 的分叉

0.0.1 2023-04-18 19:15 UTC

This package is auto-updated.

Last update: 2024-09-18 22:05:54 UTC


README

轻松在 composer 配置中管理 git hooks。这个命令行工具可以轻松实现 git hooks 在项目范围内的统一使用。在 composer 文件中指定 hooks 使其对项目团队的每个成员都可用。这为每个人提供了一个一致的环境和行为,这很好。它还可以用来全局管理计算机上每个仓库的 git hooks。这样,你就可以为每个选择要工作的项目创建一组可靠的、由自己定制的 hooks。

安装

composer.jsonextra 部分添加一个 hooks 部分,并将 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 luizalabs-opensource-php/composer-git-hooks

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

注意:v3 中不再支持在 composer.jsonscriptshooks 根部分中声明的 hooks。

全局支持

您还可以全局安装它。当使用新增的用于管理全局 git hooks 的支持时,这感觉更自然。

composer global require --dev luizalabs-opensource-php/composer-git-hooks

所有命令都支持全局(除了测试 hooks。仍然需要在包含 composer.json 文件的目录中)。

可选配置

失败时停止

当钩子是一系列命令时,当命令失败时停止执行可能很有用。

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 配置部分后,务必运行 update 命令

自定义 hooks

可以在 `config` 部分 `custom-hooks` 数组中添加自定义 hooks。

{
    "extra": {
        "hooks": {
            "config": {
                "custom-hooks": ["pre-flow-feature-start"]
            },
            "pre-flow-feature-start": [
                "echo 'Starting a new feature...'"
            ]
        }
    }
}

在更改 `custom-hooks` 配置部分后,务必运行 update 命令。注意:`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 文件的文件夹。

添加 Hooks

安装完成后,运行 cghooks add 添加在 composer 配置中指定的所有有效 git hooks。

lock 文件包含所有添加的 hooks 列表。

如果使用了 --global 标志,hooks 将全局添加,并将全局 git 配置也进行修改。如果没有提供目录,将回退到全局配置中的当前 core.hooksPath。如果没有设置该值,则默认为 $COMPOSER_HOME(此特定回退仅发生在 add 命令中)。如果在回退后仍然没有路径,将报错。

更新 Hooks

使用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

鸣谢

  • [Ezinwa Okpoechi][link-author]
  • [所有贡献者][link-contributors]

相关

  • [husky][link-husky]

许可证

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