The bundle format was not documented. Describe the format with ABNF and explain the meaning of each part. Signed-off-by: Masaya Suzuki <masayasuzuki@xxxxxxxxxx> --- Documentation/technical/bundle-format.txt | 40 +++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 Documentation/technical/bundle-format.txt diff --git a/Documentation/technical/bundle-format.txt b/Documentation/technical/bundle-format.txt new file mode 100644 index 0000000000..dbb80225b5 --- /dev/null +++ b/Documentation/technical/bundle-format.txt @@ -0,0 +1,40 @@ += Git bundle v2 format + +The Git bundle format is a format that represents both refs and Git objects. + +== Format + +We will use ABNF notation to define the Git bundle format. See +protocol-common.txt for the details. + +---- +bundle = signature references pack +signature = "# v2 git bundle" LF + +references = *(prerequisite / ref) LF +prerequisite = "-" obj-id SP comment LF +comment = *CHAR +ref = obj-id SP refname LF + +pack = ... ; packfile +---- + +== Semantics + +A Git bundle consists of three parts. + +* Prerequisites: Optional list of objects that are not included in the bundle + file. A bundle can reference these prerequisite objects (or it can reference + the objects reachable from the prerequisite objects). The bundle itself + might not contain those objects. +* References: Mapping of ref names to objects. +* Git objects: Commit, tree, blob, and tags. These are included in the pack + format. + +If a bundle contains prerequisites, it means the bundle has a thin pack and the +bundle alone is not enough for resolving all objects. When you read such +bundles, you should have those missing objects beforehand. + +In the bundle format, there can be a comment following a prerequisite obj-id. +This is a comment and it has no specific meaning. When you write a bundle, you +can put any string here. When you read a bundle, you can ignore this part. -- 2.25.0.341.g760bfbb309-goog