日本語 ▾ トピック ▾ 最新バージョン ▾ gitprotocol-common は 2.43.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ビットクリーンであることを保証しなければなりません。

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

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

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

長さフィールドが0(「0000」)のpkt-lineは、flush-pktと呼ばれ、特殊なケースであり、空のpkt-line(「0004」)とは異なる方法で処理されなければなりません。

  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