| = 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 *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 |
| ---- |
| |
| == Semantics |
| |
| A Git bundle consists of three parts. |
| |
| * "Prerequisites" lists the objects that are NOT included in the bundle and the |
| reader of the bundle MUST already have, in order to use the data in the |
| bundle. The objects stored in the bundle may refer to prerequisite objects and |
| anything reachable from them (e.g. a tree object in the bundle can reference |
| a blob that is reachable from a prerequisite) and/or expressed as a delta |
| against prerequisite objects. |
| |
| * "References" record the tips of the history graph, iow, what the reader of the |
| bundle CAN "git fetch" from it. |
| |
| * "Pack" is the pack data stream "git fetch" would send, if you fetch from a |
| repository that has the references recorded in the "References" above into a |
| repository that has references pointing at the objects listed in |
| "Prerequisites" above. |
| |
| In the bundle format, there can be a comment following a prerequisite obj-id. |
| This is a comment and it has no specific meaning. The writer of the bundle MAY |
| put any string here. The reader of the bundle MUST ignore the comment. |
| |
| === Note on the shallow clone and a Git bundle |
| |
| Note that the prerequisites does not represent a shallow-clone boundary. The |
| semantics of the prerequisites and the shallow-clone boundaries are different, |
| and the Git bundle v2 format cannot represent a shallow clone repository. |