日本語 ▾ トピック ▾ 最新バージョン ▾ gitprotocol-common は 2.50.0 で最終更新されました

名前

gitprotocol-common - さまざまなプロトコルに共通するもの

概要

<over-the-wire-protocol>

説明

このドキュメントは、Gitで使用されるさまざまなワイヤプロトコルとファイル形式に共通するものを定義します。

ABNF表記法

プロトコルドキュメントでは、RFC 5234に記載されているABNF表記法を使用しますが、以下の置換コア規則が使用されます

  HEXDIG    =  DIGIT / "a" / "b" / "c" / "d" / "e" / "f"

また、以下の共通規則も定義します

  NUL       =  %x00
  zero-id   =  40*"0"
  obj-id    =  40*(HEXDIGIT)

  refname  =  "HEAD"
  refname /=  "refs/" <see discussion below>

参照名 (refname) は、「refs/」で始まり、git-check-ref-format コマンドの検証規則に違反しない階層的なオクテット文字列です。具体的には、

  1. 階層的な(ディレクトリ)グループ化のためにスラッシュ / を含めることができますが、スラッシュで区切られたコンポーネントはドット . で始めることはできません。

  2. 少なくとも1つの / を含める必要があります。これにより、heads/tags/ などのカテゴリの存在が強制されますが、実際の名前は制限されません。

  3. どこにも2つの連続するドット .. を含めることはできません。

  4. どこにもASCII制御文字(つまり、値が \040 より小さいバイト、または \177 DEL)、スペース、チルダ ~、キャレット ^、コロン :、疑問符 ?、アスタリスク *、または開始角括弧 [ を含めることはできません。

  5. スラッシュ / またはドット . で終わることはできません。

  6. シーケンス .lock で終わることはできません。

  7. シーケンス @{ を含めることはできません。

  8. \\ を含めることはできません。

pkt-line フォーマット

ペイロードの多く(すべてではないが)はpkt-lineを中心に記述されています。

pkt-lineは可変長のバイナリ文字列です。行の最初の4バイトであるpkt-lenは、行の合計長を16進数で示します。pkt-lenには、長さの16進数表現を含むために使用される4バイトが含まれます。

pkt-lineにはバイナリデータが含まれる場合があるため、実装者はpkt-lineの解析/フォーマットルーチンが8ビットクリーンであることを確認しなければなりません (MUST)。

非バイナリ行はLFで終端されるべきであり (SHOULD)、存在する場合は合計長に含まれなければなりません (MUST)。受信者は、非バイナリデータを含むpkt-lineを、末尾のLFが含まれているかどうかにかかわらず同じように扱う必要があります(存在する場合はLFを削除し、存在しない場合は文句を言わない)。

pkt-lineのデータコンポーネントの最大長は65516バイトです。実装は、長さが65520(ペイロード65516バイト+長さデータ4バイト)を超えるpkt-lineを送信してはなりません (MUST NOT)。

実装は、空のpkt-line ("0004") を送信すべきではありません (SHOULD NOT)。

長さフィールドが0 ("0000") のpkt-line(フラッシュpktと呼ばれる)は特別なケースであり、空のpkt-line ("0004") とは異なる方法で処理しなければなりません (MUST)。

  pkt-line     =  data-pkt / flush-pkt

  data-pkt     =  pkt-len pkt-payload
  pkt-len      =  4*(HEXDIG)
  pkt-payload  =  (pkt-len - 4)*(OCTET)

  flush-pkt    = "0000"

例(Cスタイルの文字列として)

  pkt-line          actual value
  ---------------------------------
  "0006a\n"         "a\n"
  "0005a"           "a"
  "000bfoobar\n"    "foobar\n"
  "0004"            ""

GIT

git[1]スイートの一部

scroll-to-top