Skip to main content
プリコミットフックを使うと、各コミットの前に変更を自動的に検証するカスタムスクリプトを実行できます。スクリプトが非ゼロのコードで終了するとコミットはブロックされ、問題がリポジトリに到達する前に修正するチャンスが得られます。

概要

フックはリポジトリのルートにある .dvhooks/ ディレクトリに格納される実行可能スクリプトです。リポジトリ内に存在するため、他のファイルと同様にすべてのコラボレーターと同期されます。 一般的なユースケース:
  • Lint と構文チェック
  • コードフォーマットの強制
  • 大きなファイルや禁止ファイルのコミット防止
  • プロジェクト固有のカスタム検証
仕組み:
  • コミット前に、Diversion は .dvhooks/pre-commit スクリプトを、コミットされるファイルをコマンドライン引数として渡して実行します
  • 終了コード 0 はフック合格を意味し、コミットは続行されます
  • 非ゼロの終了コードはフック失敗を意味し、コミットはブロックされます
  • フックの stdout/stderr 出力はユーザーに表示されます
プリコミットフックはクライアント側のみです。CLI またはデスクトップアプリでコミットするときに実行されます。WebApp または API を通じて直接行われるコミットはフックをバイパスします。

プリコミットフックの作成

1

hooks ディレクトリを作成

リポジトリのルートに .dvhooks ディレクトリを作成します:
2

フックスクリプトを作成

.dvhooks/ 内に pre-commit スクリプトを作成します。スクリプトは実行可能であればどんな言語でも書けます。
Mac/Linux では、スクリプトを実行可能にします:
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.batpre-commit.cmdpre-commit.ps1 を (この順序で) 探します。