概要
フックはリポジトリのルートにある.dvhooks/ ディレクトリに格納される実行可能スクリプトです。リポジトリ内に存在するため、他のファイルと同様にすべてのコラボレーターと同期されます。
一般的なユースケース:
- Lint と構文チェック
- コードフォーマットの強制
- 大きなファイルや禁止ファイルのコミット防止
- プロジェクト固有のカスタム検証
- コミット前に、Diversion は
.dvhooks/pre-commitスクリプトを、コミットされるファイルをコマンドライン引数として渡して実行します - 終了コード
0はフック合格を意味し、コミットは続行されます - 非ゼロの終了コードはフック失敗を意味し、コミットはブロックされます
- フックの stdout/stderr 出力はユーザーに表示されます
プリコミットフックはクライアント側のみです。CLI またはデスクトップアプリでコミットするときに実行されます。WebApp または API を通じて直接行われるコミットはフックをバイパスします。
プリコミットフックの作成
1
hooks ディレクトリを作成
リポジトリのルートに
.dvhooks ディレクトリを作成します:2
フックスクリプトを作成
.dvhooks/ 内に pre-commit スクリプトを作成します。スクリプトは実行可能であればどんな言語でも書けます。3
フックをコミット
.dvhooks/ ディレクトリをコミットして、コラボレーターとフックを共有します:ファイル引数
コミットされるファイルは、フックスクリプトに コマンドライン引数 として渡されます。スクリプトは$@ (Mac/Linux) または %* (Windows) 経由でアクセスできます。
ファイルリストが 1 回のコマンド呼び出しには大きすぎる場合、Diversion は自動的にチャンクに分割し、フックを並列に複数回実行します。いずれかの呼び出しが失敗した場合、コミットはブロックされます。
例 — コミット対象のファイルから大きなバイナリをチェック:
環境変数
Diversion は、環境変数経由でもコンテキストをフックスクリプトに渡します:
例 — コミットメッセージにチケット番号を必須にする:
フックをスキップする
--no-verify フラグを使用すると、1 回のコミットだけプリコミットフックをバイパスできます:
挙動の詳細
- タイムアウト: フックには 60 秒のタイムアウトがあります。時間内に完了しない場合、タイムアウトメッセージとともにコミットがブロックされます。
- 作業ディレクトリ: フックはワークスペースルートを作業ディレクトリとして実行されます。
- 出力の上限: フックの出力は 1 MB に制限されます。それを超える出力は切り捨てられます。
- 出力の表示: フックの出力は、成功しても失敗しても常にユーザーに表示されます。
- プラットフォーム検出:
- Mac/Linux: Diversion は
.dvhooks/内のpre-commitという名前の実行可能ファイルを探します。ファイルが存在しても実行可能でない場合、chmod +xの実行を促すエラーが表示されます。 - Windows: Diversion は
.dvhooks/内のpre-commit.bat、pre-commit.cmd、pre-commit.ps1を (この順序で) 探します。
- Mac/Linux: Diversion は

