Hi, On Thu, 30 Jan 2020, Masaya Suzuki wrote: > The bundle format was not documented. Describe the format with ABNF and > explain the meaning of each part. LGTM, Dscho > > 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 > >