Git
英語 ▾ トピック ▾ 最新バージョン ▾ githooks は 2.46.1 で最後に更新されました

名前

githooks - Gitで使用されるフック

概要

$GIT_DIR/hooks/* (または `git config core.hooksPath`/*)

説明

フックは、gitの実行中の特定の時点でアクションをトリガーするために、フックディレクトリに配置できるプログラムです。実行ビットが設定されていないフックは無視されます。

デフォルトでは、フックディレクトリは`$GIT_DIR/hooks`ですが、`core.hooksPath`設定変数を使用して変更できます(git-config[1]を参照)。

Gitがフックを呼び出す前に、作業ディレクトリは、ベアドリポジトリでは`$GIT_DIR`に、非ベアドリポジトリではワーキングツリーのルートに変更されます。プッシュ中にトリガーされるフック(`pre-receive`、`update`、`post-receive`、`post-update`、`push-to-checkout`)は、常に`$GIT_DIR`で実行されることを除きます。

`GIT_DIR`、`GIT_WORK_TREE`などの環境変数はエクスポートされるため、フックによって実行されるGitコマンドはリポジトリを正しく特定できます。フックが外部リポジトリ、または同じリポジトリの異なるワーキングツリーでGitコマンドを呼び出す必要がある場合、これらの環境変数をクリアして、外部の場所でのGit操作を妨げないようにする必要があります。例えば

local_desc=$(git describe)
foreign_desc=$(unset $(git rev-parse --local-env-vars); git -C ../foreign-repo describe)

フックは、環境変数、コマンドライン引数、stdinを介して引数を取得できます。詳細は、以下の各フックのドキュメントを参照してください。

`git init`は、その設定に応じて、新しいリポジトリにフックをコピーする場合があります。git-init[1]の「TEMPLATE DIRECTORY」セクションを参照してください。このドキュメントの残りの部分で「デフォルトフック」を参照する場合、Gitに付属するデフォルトテンプレートについて言及しています。

現在サポートされているフックを以下に説明します。

フック

applypatch-msg

このフックはgit-am[1]によって呼び出されます。これは、提案されたコミットログメッセージを含むファイルの名前を1つのパラメーターとして受け取ります。ゼロ以外のステータスで終了すると、パッチを適用する前に`git am`が中止されます。

フックはメッセージファイルをその場で編集することができ、メッセージをプロジェクトの標準フォーマットに正規化するために使用できます。また、メッセージファイルを確認した後、コミットを拒否するためにも使用できます。

デフォルトの`applypatch-msg`フックは、有効になっている場合、後者が有効になっている場合は`commit-msg`フックを実行します。

pre-applypatch

このフックはgit-am[1]によって呼び出されます。パラメーターは何も受け取らず、パッチの適用後、コミットが行われる前に呼び出されます。

ゼロ以外のステータスで終了した場合、パッチ適用後のワーキングツリーはコミットされません。

現在のワーキングツリーを検査し、特定のテストに合格しない場合はコミットを拒否するために使用できます。

デフォルトの`pre-applypatch`フックは、有効になっている場合、後者が有効になっている場合は`pre-commit`フックを実行します。

post-applypatch

このフックはgit-am[1]によって呼び出されます。パラメーターは何も受け取らず、パッチが適用され、コミットが行われた後に呼び出されます。

このフックは主に通知を目的としており、`git am`の結果に影響を与えることはできません。

pre-commit

このフックはgit-commit[1]によって呼び出され、`--no-verify`オプションでバイパスできます。パラメーターは何も受け取らず、提案されたコミットログメッセージを取得し、コミットを行う前に呼び出されます。このスクリプトからゼロ以外のステータスで終了すると、コミットを作成する前に`git commit`コマンドが中止されます。

デフォルトの`pre-commit`フックは、有効になっている場合、末尾に空白を含む行の導入をキャッチし、そのような行が見つかった場合にコミットを中止します。

すべての`git commit`フックは、コマンドがコミットメッセージの変更のためのエディターを起動しない場合、`GIT_EDITOR=: `環境変数を使用して呼び出されます。

デフォルトの`pre-commit`フックは、有効になっている場合(そして`hooks.allownonascii`設定オプションが設定されていないか、falseに設定されている場合)、非ASCIIファイル名の使用を防ぎます。

pre-merge-commit

このフックはgit-merge[1]によって呼び出され、`--no-verify`オプションでバイパスできます。パラメーターは何も受け取らず、マージが正常に実行された後、コミットを行うための提案されたコミットログメッセージを取得する前に呼び出されます。このスクリプトからゼロ以外のステータスで終了すると、コミットを作成する前に`git merge`コマンドが中止されます。

デフォルトの`pre-merge-commit`フックは、有効になっている場合、後者が有効になっている場合は`pre-commit`フックを実行します。

このフックは、コマンドがコミットメッセージの変更のためのエディターを起動しない場合、`GIT_EDITOR=: `環境変数を使用して呼び出されます。

マージを自動的に実行できない場合、競合を解決し、結果を別々にコミットする必要があります(git-merge[1]を参照)。その時点で、このフックは実行されませんが、有効になっている場合は`pre-commit`フックが実行されます。

prepare-commit-msg

このフックはgit-commit[1]によって、デフォルトのログメッセージの準備後、エディターが開始される前に呼び出されます。

1〜3個のパラメーターを受け取ります。最初のものは、コミットログメッセージを含むファイルの名前です。2番目は、コミットメッセージのソースであり、`message`(`-m`または`-F`オプションが指定されている場合)、`template`(`-t`オプションが指定されている場合、または設定オプション`commit.template`が設定されている場合)、`merge`(コミットがマージである場合、または`.git/MERGE_MSG`ファイルが存在する場合)、`squash`(`.git/SQUASH_MSG`ファイルが存在する場合)、または`commit`、それに続くコミットオブジェクト名(`-c`、`-C`、または`--amend`オプションが指定されている場合)です。

終了ステータスがゼロ以外の場合、`git commit`は中止されます。

このフックの目的は、メッセージファイルをその場で編集することであり、`--no-verify`オプションでは抑制されません。ゼロ以外の終了はフックの失敗を意味し、コミットを中止します。`pre-commit`フックの代替として使用しないでください。

Gitに付属するサンプル`prepare-commit-msg`フックは、コミットテンプレートのコメント部分にあるヘルプメッセージを削除します。

commit-msg

このフックはgit-commit[1]git-merge[1]によって呼び出され、`--no-verify`オプションでバイパスできます。これは、提案されたコミットログメッセージを含むファイルの名前を1つのパラメーターとして受け取ります。ゼロ以外のステータスで終了すると、コマンドが中止されます。

フックはメッセージファイルをその場で編集することができ、メッセージをプロジェクトの標準フォーマットに正規化するために使用できます。また、メッセージファイルを確認した後、コミットを拒否するためにも使用できます。

デフォルトの`commit-msg`フックは、有効になっている場合、重複した`Signed-off-by`トレーラーを検出し、見つかった場合にコミットを中止します。

post-commit

このフックはgit-commit[1]によって呼び出されます。パラメーターは何も受け取らず、コミットが行われた後に呼び出されます。

このフックは主に通知を目的としており、`git commit`の結果に影響を与えることはできません。

pre-rebase

このフックはgit-rebase[1]によって呼び出され、ブランチのリベースを防ぐために使用できます。フックは、1つまたは2つのパラメーターで呼び出される場合があります。最初の引数は、シリーズがフォークされた上流ブランチです。2番目の引数はリベースされているブランチで、現在のブランチをリベースする際には設定されません。

post-checkout

このフックは、ワークツリーの更新後にgit-checkout[1]またはgit-switch[1]が実行されたときに呼び出されます。フックには、以前のHEADの参照、新しいHEADの参照(変更されている場合とされていない場合があります)、チェックアウトがブランチのチェックアウト(ブランチの変更、フラグ=1)かファイルのチェックアウト(インデックスからのファイルの取得、フラグ=0)かを表すフラグの3つのパラメーターが渡されます。このフックは、フックの終了ステータスがこれらの2つのコマンドの終了ステータスになることを除いて、git switchまたはgit checkoutの結果に影響を与えることはできません。

--no-checkout-n)オプションを使用しない限り、git-clone[1]の後にも実行されます。フックに渡される最初の引数はnull参照、2番目の引数は新しいHEADの参照、フラグは常に1です。--no-checkoutを使用しない限り、git worktree addについても同様です。

このフックは、リポジトリの整合性チェックの実行、以前のHEADとの差分の自動表示、作業ディレクトリのメタデータプロパティの設定に使用できます。

post-merge

このフックはgit-merge[1]によって呼び出され、ローカルリポジトリでgit pullを実行したときに発生します。フックは、実行されたマージがsquashマージだったかどうかを示すステータスフラグを1つのパラメーターとして受け取ります。このフックはgit mergeの結果に影響を与えることはできず、競合のためにマージが失敗した場合は実行されません。

このフックは、対応するpre-commitフックと組み合わせて、作業ツリーに関連付けられたメタデータ(例:アクセス許可/所有権、ACLなど)を保存および復元するために使用できます。これを行う方法の例については、contrib/hooks/setgitperms.perlを参照してください。

pre-push

このフックはgit-push[1]によって呼び出され、プッシュの実行を防ぐために使用できます。フックは、宛先リモートの名前と場所を示す2つのパラメーターで呼び出されます。名前付きリモートを使用していない場合、両方の値は同じになります。

プッシュされる内容に関する情報は、フックの標準入力に次の形式の行で提供されます。

<local-ref> SP <local-object-name> SP <remote-ref> SP <remote-object-name> LF

例えば、コマンドgit push origin master:foreignを実行した場合、フックは次のような行を受け取ります。

refs/heads/master 67890 refs/heads/foreign 12345

ただし、完全なオブジェクト名が提供されます。foreign refがまだ存在しない場合、<remote-object-name>はすべてゼロのオブジェクト名になります。refを削除する場合、<local-ref>(delete)として提供され、<local-object-name>はすべてゼロのオブジェクト名になります。ローカルコミットが展開可能な名前(HEAD~やオブジェクト名など)以外のものによって指定された場合、元の指定どおりに提供されます。

このフックがゼロ以外のステータスで終了した場合、git pushは何もプッシュせずに中断します。プッシュが拒否された理由に関する情報は、標準エラーに書き込むことでユーザーに送信できます。

pre-receive

このフックは、git pushに対応してリポジトリ内の参照を更新するgit-receive-pack[1]によって呼び出されます。リモートリポジトリの参照の更新を開始する直前に、pre-receiveフックが呼び出されます。その終了ステータスによって、更新の成功または失敗が決まります。

このフックは、受信操作ごとに1回実行されます。引数は受け取りませんが、更新される各refに対して、標準入力に次の形式の行を受け取ります。

<old-oid> SP <new-oid> SP <ref-name> LF

ここで、<old-oid>はrefに保存されている古いオブジェクト名、<new-oid>はrefに保存される新しいオブジェクト名、<ref-name>はrefの完全名です。新しいrefを作成する場合、<old-oid>はすべてゼロのオブジェクト名です。

フックがゼロ以外のステータスで終了した場合、refは更新されません。フックがゼロで終了した場合でも、個々のrefの更新はupdateフックによって防止できます。

標準出力と標準エラー出力の両方が、反対側のgit send-packに転送されるため、ユーザー向けのメッセージを単純にechoできます。

git push --push-option=...のコマンドラインで指定されたプッシュオプションの数は、環境変数GIT_PUSH_OPTION_COUNTから読み取ることができ、オプション自体はGIT_PUSH_OPTION_0GIT_PUSH_OPTION_1などに格納されます。プッシュオプションフェーズを使用しないようにネゴシエートされた場合、環境変数は設定されません。クライアントがプッシュオプションの使用を選択するが、送信しない場合、カウント変数はゼロ(GIT_PUSH_OPTION_COUNT=0)に設定されます。

git-receive-pack[1]の「検疫環境」セクションで、いくつかの注意点を確認してください。

update

このフックは、git pushに対応してリポジトリ内の参照を更新するgit-receive-pack[1]によって呼び出されます。リモートリポジトリでrefを更新する直前に、updateフックが呼び出されます。その終了ステータスによって、ref更新の成功または失敗が決まります。

フックは更新される各refごとに1回実行され、3つのパラメーターを受け取ります。

  • 更新されるrefの名前、

  • refに保存されている古いオブジェクト名、

  • refに保存される新しいオブジェクト名。

updateフックがゼロで終了すると、refを更新できます。ゼロ以外のステータスで終了すると、git receive-packはそのrefを更新できなくなります。

このフックは、オブジェクト名が古いオブジェクト名で指定されたコミットオブジェクトの子孫であるコミットオブジェクトであることを確認することで、特定のrefに対する強制更新を防ぐために使用できます。「高速フォワードのみ」ポリシーを適用するためです。

古い…新しいステータスのログにも使用できます。ただし、ブランチ全体のセットは認識しないため、単純に使うとrefごとに1つのメールが送信されることになります。post-receiveフックの方が適しています。

ワイヤ経由のgitコマンドのみにユーザーのアクセスを制限する環境では、このフックを使用して、ファイルシステムの所有権やグループメンバーシップに依存せずにアクセス制御を実装できます。ユーザーのアクセスをgitコマンドのみに制限する方法については、git-shell[1]を参照してください。

標準出力と標準エラー出力の両方が、反対側のgit send-packに転送されるため、ユーザー向けのメッセージを単純にechoできます。

デフォルトのupdateフックは、有効になっている場合(そしてhooks.allowunannotated設定オプションが設定されていないかfalseに設定されている場合)、注釈のないタグのプッシュを防ぎます。

proc-receive

このフックはgit-receive-pack[1]によって呼び出されます。サーバーが多値設定変数receive.procReceiveRefsを設定しており、receive-packに送信されたコマンドに一致する参照名がある場合、これらのコマンドは内部のexecute_commands()関数ではなく、このフックによって実行されます。このフックは、関連する参照を更新し、結果をreceive-packに報告する責任があります。

このフックは、受信操作ごとに1回実行されます。引数は受け取りませんが、pkt-line形式のプロトコルを使用してreceive-packと通信し、コマンド、プッシュオプションを読み取り、結果を送信します。次のプロトコルの例では、文字Sreceive-packを表し、文字Hはフックを表します。

# Version and features negotiation.
S: PKT-LINE(version=1\0push-options atomic...)
S: flush-pkt
H: PKT-LINE(version=1\0push-options...)
H: flush-pkt
# Send commands from server to the hook.
S: PKT-LINE(<old-oid> <new-oid> <ref>)
S: ... ...
S: flush-pkt
# Send push-options only if the 'push-options' feature is enabled.
S: PKT-LINE(push-option)
S: ... ...
S: flush-pkt
# Receive results from the hook.
# OK, run this command successfully.
H: PKT-LINE(ok <ref>)
# NO, I reject it.
H: PKT-LINE(ng <ref> <reason>)
# Fall through, let 'receive-pack' execute it.
H: PKT-LINE(ok <ref>)
H: PKT-LINE(option fall-through)
# OK, but has an alternate reference.  The alternate reference name
# and other status can be given in option directives.
H: PKT-LINE(ok <ref>)
H: PKT-LINE(option refname <refname>)
H: PKT-LINE(option old-oid <old-oid>)
H: PKT-LINE(option new-oid <new-oid>)
H: PKT-LINE(option forced-update)
H: ... ...
H: flush-pkt

proc-receiveフックのコマンドは疑似参照を指すことがあり、常にゼロのold-oidを古いoidとして持ちます。一方、proc-receiveフックは代替参照を更新でき、代替参照はゼロ以外のold-oidで既に存在する場合があります。この場合、フックは「option」ディレクティブを使用して、先頭の「ok」ディレクティブで指定された参照の拡張属性を報告します。

このフックのコマンドのレポートは、入力と同じ順序でなければなりません。proc-receiveフックの終了ステータスは、アトミックプッシュが使用されていない限り、それに送信されたコマンドのグループの成功または失敗のみを決定します。

post-receive

このフックは、git pushに対応してリポジトリ内の参照を更新するgit-receive-pack[1]によって呼び出されます。提案されたref更新がすべて処理され、少なくとも1つのrefが更新された結果となった場合、リモートリポジトリで1回実行されます。

フックは引数を受け取りません。成功裏に更新された各refに対して、標準入力で1行を受け取ります。これはpre-receiveフックと同じ形式です。

このフックは、実際の作業が完了した後に呼び出されるため、git receive-packの結果に影響を与えることはありません。

これは、すべてのrefの古い値と新しい値に加えて、それらの名前も取得するため、post-updateフックに取って代わります。

標準出力と標準エラー出力の両方が、反対側のgit send-packに転送されるため、ユーザー向けのメッセージを単純にechoできます。

デフォルトのpost-receiveフックは空ですが、コミットメールの送信を実装するサンプルスクリプトpost-receive-emailが、Git配布のcontrib/hooksディレクトリに提供されています。

git push --push-option=...のコマンドラインで指定されたプッシュオプションの数は、環境変数GIT_PUSH_OPTION_COUNTから読み取ることができ、オプション自体はGIT_PUSH_OPTION_0GIT_PUSH_OPTION_1などに格納されます。プッシュオプションフェーズを使用しないようにネゴシエートされた場合、環境変数は設定されません。クライアントがプッシュオプションの使用を選択するが、送信しない場合、カウント変数はゼロ(GIT_PUSH_OPTION_COUNT=0)に設定されます。

git-receive-pack[1]の「post-receive」セクションで、詳細を確認してください。

post-update

このフックは、git pushに対応してリポジトリ内の参照を更新するgit-receive-pack[1]によって呼び出されます。すべてのrefが更新された後に、リモートリポジトリで1回実行されます。

実際には更新されたrefの名前である、可変数の引数を受け取ります。

このフックは主に通知を目的としており、git receive-packの結果に影響を与えることはできません。

post-updateフックは、プッシュされたヘッドを認識できますが、それらの元の値と更新された値は認識できないため、古い…新しいログを作成するには適していません。post-receiveフックは、refの元の値と更新された値の両方を受け取ります。必要であれば、代わりに検討してください。

有効になっている場合、デフォルトのpost-updateフックはgit update-server-infoを実行して、ダムトランスポート(例:HTTP)で使用される情報を最新の状態に維持します。HTTP経由でアクセス可能なGitリポジトリを公開する場合は、このフックを有効にすることをお勧めします。

標準出力と標準エラー出力の両方が、反対側のgit send-packに転送されるため、ユーザー向けのメッセージを単純にechoできます。

reference-transaction

このフックは、参照更新を実行するすべてのGitコマンドによって呼び出されます。参照トランザクションが準備、コミット、または中止されるたびに実行されるため、複数回呼び出される場合があります。フックはシンボリック参照の更新もサポートします。

フックは、指定された参照トランザクションの現在の状態を1つの引数として受け取ります。

  • 「prepared」:すべての参照更新がトランザクションにキューに入れられ、参照はディスク上でロックされました。

  • 「committed」:参照トランザクションがコミットされ、すべての参照がそれぞれの新しい値を持つようになりました。

  • 「aborted」:参照トランザクションが中止され、変更は実行されず、ロックは解放されました。

トランザクションに追加された各参照更新について、フックは次の形式の行を標準入力で受け取ります。

<old-value> SP <new-value> SP <ref-name> LF

ここで、<old-value>は参照トランザクションに渡された古いオブジェクト名、<new-value>はrefに保存される新しいオブジェクト名、<ref-name>はrefの完全名です。現在の値に関係なく参照を強制的に更新する場合、または参照を新しく作成する場合、<old-value>はすべてゼロのオブジェクト名です。これらのケースを区別するには、git rev-parseを使用して<ref-name>の現在の値を検査できます。

シンボリック参照の更新では、<old_value>および<new-value>フィールドは、オブジェクトではなく参照を示す場合があります。参照は、ref:<ref-target>のように、ref:プレフィックスで示されます。

フックの終了ステータスは、「prepared」状態を除くすべての状態では無視されます。「prepared」状態では、ゼロ以外の終了ステータスによりトランザクションが中止されます。その場合、フックは「aborted」状態で呼び出されません。

push-to-checkout

このフックは、git-receive-pack[1] によって、git push に反応してリポジトリ内の参照を更新する場合、およびプッシュが現在チェックアウトされているブランチを更新しようとしており、receive.denyCurrentBranch 構成変数がupdateInsteadに設定されている場合に呼び出されます。このようなプッシュは、デフォルトでは、リモートリポジトリの作業ツリーとインデックスが現在チェックアウトされているコミットと異なる場合に拒否されます。作業ツリーとインデックスが現在のコミットと一致する場合、それらはブランチの新しくプッシュされた先端と一致するように更新されます。このフックは、デフォルトの動作を上書きするために使用されます。

フックは、現在のブランチの先端が更新されるコミットを受け取ります。ゼロ以外のステータスで終了してプッシュを拒否できます(その場合、インデックスまたは作業ツリーを変更してはなりません)。または、現在のブランチの先端が新しいコミットに更新されたときに、作業ツリーとインデックスに必要な変更を加えて目的の状態にし、ゼロステータスで終了できます。

たとえば、フックはgit read-tree -u -m HEAD "$1"を実行するだけで、git pushで逆方向に実行されるgit fetchをエミュレートできます。git read-tree -u -mのツーツリー形式は、本質的にブランチを切り替えるgit switchまたはgit checkoutと同じであり、ブランチ間の違いを妨げない作業ツリーのローカルな変更を保持します。

pre-auto-gc

このフックは、git gc --autoによって呼び出されます(git-gc[1]を参照)。パラメータは必要ありません。このスクリプトからゼロ以外のステータスで終了すると、git gc --autoが中止されます。

post-rewrite

このフックは、コミットを書き換えるコマンドによって呼び出されます(--amendで呼び出されたgit-commit[1]git-rebase[1]。ただし、git-fast-import[1]git-filter-repoなどの完全な履歴(再)書き込みツールは通常呼び出しません!)。その最初の引数は、それが呼び出されたコマンドを示します。現在、amendまたはrebaseのいずれかです。将来、コマンドに依存するさらに多くの引数が渡される可能性があります。

フックは、書き換えられたコミットのリストを標準入力で、次の形式で受け取ります。

<old-object-name> SP <new-object-name> [ SP <extra-info> ] LF

extra-infoは、これもコマンドによって異なります。空の場合、前のSPも省略されます。現在、どのコマンドもextra-infoを渡しません。

フックは、自動ノートのコピー(git-config[1]の「notes.rewrite.<command>」を参照)の後常に実行されるため、これらのノートにアクセスできます。

次のコマンド固有のコメントが適用されます。

rebase

squash操作とfixup操作では、スクアッシュされたすべてのコミットが、スクアッシュされたコミットに書き換えられたものとしてリストされます。つまり、同じnew-object-nameを共有する行がいくつかあることを意味します。

コミットは、rebaseによって処理された順序でリストされることが保証されています。

sendemail-validate

このフックは、git-send-email[1]によって呼び出されます。

このコマンドライン引数を受け取ります。1. 送信するメールの内容を含むファイルの名前。2. メールSMTPヘッダーを含むファイルの名前。

SMTPヘッダーは、ユーザーのメール転送エージェント(MTA)に渡されるのと同じ方法で渡されます。実際、ユーザーのMTAに渡されるメールは、$2の内容に$1の内容が続くものです。

いくつかの一般的なヘッダーの例を以下に示します。大文字と小文字、および複数行のタブ構造に注意してください。

From: Example <from@example.com>
To: to@example.com
Cc: cc@example.com,
 A <author@example.com>,
 One <one@example.com>,
 two@example.com
Subject: PATCH-STRING

ゼロ以外のステータスで終了すると、メールの送信前にgit send-emailが中止されます。

フックの実行時に、次の環境変数が設定されます。

GIT_SENDEMAIL_FILE_COUNTER

送信されるメールを含むファイルごとに1ずつ増分される1ベースのカウンター(FIFOを除く)。このカウンターは、パッチシリーズのカウンタースキームに従いません。常に1から始まり、GIT_SENDEMAIL_FILE_TOTALで終了します。

GIT_SENDEMAIL_FILE_TOTAL

送信されるファイルの総数(FIFOを除く)。このカウンターは、パッチシリーズのカウンタースキームに従いません。表紙の手紙があるかどうかにかかわらず、常に送信されるファイルの数と等しくなります。

これらの変数は、たとえば、パッチシリーズの検証に使用できます。

Gitに付属のサンプルsendemail-validateフックは、送信されたすべてのパッチ(表紙の手紙を除く)が、競合することなく上流のリポジトリのデフォルトブランチの先頭に適用できることを確認します。指定されたシリーズのすべてのパッチが適用された後に実行される追加の検証手順のために、いくつかのプレースホルダーが残されています。

fsmonitor-watchman

このフックは、構成オプションcore.fsmonitorが、使用するフックのバージョンに応じて.git/hooks/fsmonitor-watchmanまたは.git/hooks/fsmonitor-watchmanv2に設定されている場合に呼び出されます。

バージョン1は、バージョン(1)と、1970年1月1日午前0時からの経過ナノ秒単位の時間という2つの引数を取ります。

バージョン2は、バージョン(2)と、トークン以降の変更を識別するために使用されるトークンという2つの引数を取ります。Watchmanの場合、これはクロックIDになります。このバージョンは、ファイルのリストの前に、新しいトークンに続いてNULを標準出力に出力する必要があります。

フックは、要求された時間以降に変更されている可能性のある作業ディレクトリ内のすべてのファイルのリストを標準出力に出力する必要があります。ロジックは包括的である必要があるため、潜在的な変更を見逃すことはありません。パスは作業ディレクトリのルートを基準とした相対パスで、単一のNULで区切られる必要があります。

実際には変更されていないファイルを含めても問題ありません。新しく作成されたファイルと削除されたファイルを含むすべての変更を含める必要があります。ファイルの名前が変更された場合、古い名前と新しい名前の両方が含まれる必要があります。

Gitは、指定されたパス名に基づいて、変更を確認するファイルと、追跡されていないファイルを確認するディレクトリを制限します。

Gitに「すべてのファイルが変更された」ことを最適化された方法で伝える方法は、ファイル名/を返すことです。

終了ステータスは、Gitがフックからのデータを使用して検索を制限するかどうかを決定します。エラーが発生した場合、すべてのファイルとフォルダーの検証に戻ります。

p4-changelist

このフックは、git-p4 submitによって呼び出されます。

p4-changelistフックは、チェンジリストメッセージがユーザーによって編集された後に実行されます。--no-verifyオプションでバイパスできます。提案されたチェンジリストテキストを含むファイルの名前を1つのパラメータとして受け取ります。ゼロ以外のステータスで終了すると、コマンドが中止されます。

フックはチェンジリストファイルを編集することが許可されており、テキストをプロジェクトの標準形式に正規化するために使用できます。また、メッセージファイルを確認した後にSubmitを拒否するためにも使用できます。

詳細は、git-p4 submit --helpを実行してください。

p4-prepare-changelist

このフックは、git-p4 submitによって呼び出されます。

p4-prepare-changelistフックは、デフォルトのチェンジリストメッセージの準備後、エディターが開始される前に実行されます。チェンジリストテキストを含むファイルの名前を1つのパラメータとして受け取ります。スクリプトからゼロ以外のステータスで終了すると、プロセスが中止されます。

フックの目的は、メッセージファイルをその場で編集することです。--no-verifyオプションでは抑制されません。--prepare-p4-onlyが設定されている場合でも、このフックが呼び出されます。

詳細は、git-p4 submit --helpを実行してください。

p4-post-changelist

このフックは、git-p4 submitによって呼び出されます。

p4-post-changelistフックは、P4で送信が正常に完了した後に呼び出されます。パラメータは必要なく、主に通知を目的としており、git p4 submitアクションの結果に影響を与えることはできません。

詳細は、git-p4 submit --helpを実行してください。

p4-pre-submit

このフックは、git-p4 submitによって呼び出されます。パラメータと標準入力からのものは何も受け取りません。このスクリプトからゼロ以外のステータスで終了すると、git-p4 submitの起動が阻止されます。--no-verifyコマンドラインオプションでバイパスできます。詳細は、git-p4 submit --helpを実行してください。

post-index-change

このフックは、read-cache.c do_write_locked_indexでインデックスが書き込まれるときに呼び出されます。

フックに渡される最初の引数は、作業ディレクトリが更新されたかどうかを示す指標です。「1」は作業ディレクトリが更新されたことを、「0」は作業ディレクトリが更新されなかったことを意味します。

フックに渡される2番目の引数は、インデックスが更新され、skip-worktreeビットが変更されたかどうかを示す指標です。「1」はskip-worktreeビットが更新された可能性があることを、「0」は更新されなかったことを意味します。

フックの実行時に、「1」、「1」と渡されるのは1つのパラメータのみです。「1」、「1」を渡してフックを実行することはできません。

参照

GIT

git[1]スイートの一部

scroll-to-top