このプロトコルは、Gitが単一のGitコマンドの全期間を通じて外部プロセスと通信する必要がある場合に使用されます。すべての通信は、標準入力および標準出力を介した pkt-line 形式(gitprotocol-common(5) 参照)です。
Handshake
Gitは、ウェルカムメッセージ(例えば git-filter-client
)と、サポートされているプロトコルバージョン番号のリストと、フラッシュパケットを送信することから始めます。 Gitは、 client
ではなく server
(例えば git-filter-server
)や、以前に送信されたリストのうちの1つのプロトコルバージョン番号や、フラッシュパケットを使用してウェルカムメッセージを読み取ることを想定しています。それ以降のすべての通信は、選択したプロトコルバージョンに基づいて行われます。以下の残りのプロトコルの説明は、「version=2」を文書化しています。以下の例の「version=42」は実在せず、複数のバージョンでプロトコルがどのように見えるかを示すためにのみ存在することに注意してください。
プロトコルバージョンネゴシエーション後、Gitはサポートするすべての機能のリストとフラッシュパケットを送信します。Gitは、サポートされている機能リストのサブセットである必要がある目的の機能のリストと、応答としてのフラッシュパケットを読み取ることを期待しています。
packet: git> git-filter-client
packet: git> version=2
packet: git> version=42
packet: git> 0000
packet: git< git-filter-server
packet: git< version=2
packet: git< 0000
packet: git> capability=clean
packet: git> capability=smudge
packet: git> capability=not-yet-invented
packet: git> 0000
packet: git< capability=clean
packet: git< capability=smudge
packet: git< 0000
Shutdown
Gitは終了時にコマンドパイプを閉じます。フィルタはEOFを検出し、それ自体で正常に終了することが期待されています。Gitは、フィルタープロセスが停止するまで待機します。