Composer git hooks

Composer Git Hooks 可以讓你直接在 composer 設定進行管理 git hooks,透過這樣管理的好處在於,能避免每個開發者都有各自的git hooks 設定,透過 composer git hooks 能將所有開發者的 git hooks 統一納入版控。

安裝

首先,如果還沒開始,可以先初始化 composer

$ composer init
$ compsoer install

接著開啟 composer.json 進行設定

"extra": {
    "hooks": {
        "pre-commit": [
            "echo committing as $(git config user.name)",
            "php-cs-fixer fix ." // fix style
        ],
        "pre-push": [
            "php-cs-fixer fix --dry-run .", // check style
            "phpunit"
        ],
        "post-merge": "composer update"
    }
}

安裝 composer git hooks

$ composer require --dev brainmaestro/composer-git-hooks

同步設定到 git hooks

執行 cghooks add ,可以將 composer.json 設定的 git hooks 自動加到 git hooks

$ composer cghooks add

以下是自動執行的內容

> vendor/bin/cghooks 'add'
Added pre-commit hook
Added commit-msg hook
Added pre-push hook
Added post-merge hook

可以在 .git/hook/ 資料夾查看新增的git hook

執行測試

執行測試的指令為 cghooks ${hook}

在前面的 compsoer.json 我們有新增一個 pre-commit 指令,可以直接執行這段測試

composer cghooks pre-commit

備註

如果發生 php-cs-fixer: command not found 表示需要安裝

brew install php-cs-fixer

選項說明

Option Description Command
no-lock 不要產生 lock file cghooks add --no-lock
ignore-lock 將 lock file 加到 .gitignore cghooks add --ignore-lock
force-win 強制兼容 windows bash cghooks add --force-win
force 不檢查 lock file 直接刪除 hooks cghooks remove —force
git-dir1 指定 git 路徑 cghooks ${command} --git-dir='/path/to/.git'
global 在 globally 執行指定指令 cghooks ${command} --global
list-hooks 列出已經新增的 hooks cghooks list-hooks
remove 刪除指定的 hooks cghooks remove ${hook}
update 更新指定的 hooks cghooks update ${hook}