Composer 設定で git フックを簡単に管理します。このコマンド ライン ツールを使用すると、プロジェクト全体で一貫した git フックの使用法を簡単に実装できます。コンポーザー ファイルでフックを指定すると、プロジェクト チームのすべてのメンバーがフックを使用できるようになります。これにより、全員に一貫した環境と行動が提供され、これは素晴らしいことです。コンピューター上のすべてのリポジトリに対して git フックをグローバルに管理するために使用することもできます。こうすることで、取り組むことを選択したすべてのプロジェクトに対して、信頼できるフックのセットを自分で作成することができます。
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/
を付ける必要があります。
注: composer.json
のscripts
またはhooks
ルート セクションで宣言されたフックは、v3 ではサポートされなくなりました。
グローバルにインストールすることもできます。これは、グローバル git フックを管理するために新しく追加されたサポートとともにcghooks
使用すると、より自然に感じられます。
composer global require --dev brainmaestro/composer-git-hooks
すべてのコマンドはグローバル サポートを備えています (フックのテストを除く。それでも、 composer.json
ファイルのあるディレクトリに存在する必要があります)。
フックが一連のコマンドである場合、コマンドが失敗したときに実行を停止すると便利です。
影響を受けるフックをstop-on-failure
config セクションで指定します。
{
"extra" : {
"hooks" : {
"config" : {
"stop-on-failure" : [ " pre-push " ]
},
"pre-push" : [
" php-cs-fixer fix --dry-run --stop-on-violation . " ,
" phpunit "
],
}
}
}
stop-on-failure
構成セクションを変更した後は、必ず update コマンドを実行してください。
カスタム フックは、`config セクションのcustom-hooks
配列に追加できます。
{
"extra" : {
"hooks" : {
"config" : {
"custom-hooks" : [ " pre-flow-feature-start " ]
},
"pre-flow-feature-start" : [
" echo 'Starting a new feature...' "
]
}
}
}
custom-hooks
構成セクションを変更した後は、必ず update コマンドを実行してください。注: 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 フックを追加します。
オプション | 説明 | 指示 |
---|---|---|
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
で実行される update コマンドは、基本的にロック ファイルを無視し、composer ファイルからフックを追加しようとします。これは、 add
コマンドの--force
オプションの動作と似ています。このコマンドは、 composer.json
ファイル内のフックが最初に追加されてから変更されている場合に便利です。
これは、ディレクトリが指定されていない場合に$COMPOSER_HOME
へのフォールバックがないことを除いて、 --global
とともに使用した場合と同様に機能します。
フックはcghooks remove
を使用して簡単に削除できます。これにより、composer 構成で指定されたすべてのフックが削除されます。
フックを引数として渡すことでフックを削除することもできます。コマンドcghooks remove pre-commit post-commit
、 pre-commit
とpost-commit
フックを削除します。
オプション | 説明 | 指示 |
---|---|---|
force | ロックファイルをチェックせずにフックを削除する | cghooks remove --force |
注意: ロック ファイルが改ざんされた場合、または強制オプションが使用された場合、このパッケージを使用する前にすでに存在していたが、composer スクリプト設定で指定されていたフックも削除されます。つまり、以前にpre-commit
フックがあったが、現在のコンポーザー設定にもpre-commit
フックがあった場合、このオプションによりコマンドは最初のフックを削除します。
--global
とともに使用するときにディレクトリが指定されていない場合、これには$COMPOSER_HOME
へのフォールバックもありません。
フックは、 cghooks list-hooks
コマンドを使用してリストできます。これは基本的にコンポーザーの設定をチェックし、実際にファイルがあるフックをリストします。
次のオプションはすべてのコマンドに共通です。
オプション | 説明 | 指示 |
---|---|---|
git-dir | git ディレクトリへのパス | cghooks ${command} --git-dir='/path/to/.git' |
lock-dir | ロックファイルディレクトリへのパス | cghooks ${command} --lock-dir='/path/to/lock' |
global | 指定されたコマンドをグローバルに実行します | cghooks ${command} --global |
各コマンドには、より詳細なログの冗長性を制御するフラグ-v
もあります。現在、サポートされているレベルは 1 つだけです。
フックは、追加する前にcghooks ${hook}
でテストできます。例cghooks pre-commit
pre-commit
フックを実行します。
詳細については、「貢献」を参照してください。
MIT ライセンス (MIT)。詳細については、ライセンス ファイルを参照してください。