在您的 Composer 配置中輕鬆管理 git hooks。這個命令列工具可以輕鬆實現 git hooks 在專案範圍內的一致使用。在 Composer 檔案中指定掛鉤使專案團隊的每個成員都可以使用它們。這為每個人提供了一致的環境和行為,這非常棒。也可以用於全域管理電腦上每個儲存庫的 git hook。這樣,您就可以為您選擇從事的每個項目製作一套可靠的掛鉤。
將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 不再支援在scripts
中聲明的鉤子或composer.json
的hooks
根部分。
您也可以全域安裝它。當cghooks
與新添加的管理全域 git hooks 的支援一起使用時,這感覺更自然。
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.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 hook。
選項 | 描述 | 命令 |
---|---|---|
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
運行的更新命令基本上會忽略鎖定檔案並嘗試從作曲家檔案中新增掛鉤。這與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
掛鉤,則此選項將導致命令刪除您的初始掛鉤。
如果與--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
掛鉤。
詳細資訊請參閱貢獻。
麻省理工學院許可證 (MIT)。請參閱許可證文件以獲取更多資訊。