Gitバンドル形式は、refとGitオブジェクトの両方を表す形式です。
Format
ABNF表記を使用してGitバンドル形式を定義します。 詳細については、 protocol-common.txt を参照してください。
v2バンドルは以下のようになります:
bundle = signature *prerequisite *reference LF pack
signature = "# v2 git bundle" LF
prerequisite = "-" obj-id SP comment LF
comment = *CHAR
reference = obj-id SP refname LF
pack = ... ; packfile
v3バンドルは以下のようになります:
bundle = signature *capability *prerequisite *reference LF pack
signature = "# v3 git bundle" LF
capability = "@" key ["=" value] LF
prerequisite = "-" obj-id SP comment LF
comment = *CHAR
reference = obj-id SP refname LF
key = 1*(ALPHA / DIGIT / "-")
value = *(%01-09 / %0b-FF)
pack = ... ; packfile
Semantics
Gitバンドルはいくつかの部分で構成されています。
-
capabilities
(機能)はv3形式のみであり、バンドルを正しく読み取るために必要な機能を示します。 -
prerequisites
(前提条件)には、バンドルに含まれていないオブジェクトがリストされており、バンドル内のデータを使用するには、バンドルのリーダーがそれらを既に持っている必要があります。 バンドルに格納されているオブジェクトは、前提条件オブジェクトとそれらから到達可能なもの(たとえば、バンドル内のツリーオブジェクトは、前提条件から到達可能なブロブを参照できます)、および/または 前提条件オブジェクトに対するデルタとして表現されているものを参照する場合があります。 -
references
には、履歴グラフのヒントが記録されています。つまり、バンドルのリーダーがそこから `git fetch ` できるモノです。 -
pack
は、上記の「references」に記録された参照を持つリポジトリから、上記の「prerequisites」にリストされたオブジェクトを指す参照を持つリポジトリにフェッチする場合に、git fetch
が送信するパックデータストリームです。
バンドル形式では、前提条件(prerequisite)の obj-id の後にコメントを付けることができます。 これはコメントであり、特別な意味はありません。 バンドルの作成者は、ここに任意の文字列を入れてもいいです。 バンドルのリーダーはコメントを無視しなければなりません。
Note on the shallow clone and a Git bundle
注意: 前提条件は、浅いクローンの境界(shallow-clone boundary)を表していないことに注意してください。 前提条件と浅いクローンの境界のセマンティクスは異なり、Gitバンドルv2形式は浅いクローンのリポジトリを表すことはできません。
Capabilities
ネゴシエーションの機会はないので、不明な機能により git bundle
は中止(abort)されます。 唯一の既知の機能は
object-format
です。これは、使用中のハッシュアルゴリズムを指定し、 extensions.objectFormat
構成値と同じ値を取ることができます。