|  | gitformat-bundle(5) | 
|  | =================== | 
|  |  | 
|  | NAME | 
|  | ---- | 
|  | gitformat-bundle - The bundle file format | 
|  |  | 
|  |  | 
|  | SYNOPSIS | 
|  | -------- | 
|  | [verse] | 
|  | *.bundle | 
|  | *.bdl | 
|  |  | 
|  | DESCRIPTION | 
|  | ----------- | 
|  |  | 
|  | The Git bundle format is a format that represents both refs and Git | 
|  | objects. A bundle is a header in a format similar to | 
|  | linkgit:git-show-ref[1] followed by a pack in *.pack format. | 
|  |  | 
|  | The format is created and read by the linkgit:git-bundle[1] command, | 
|  | and supported by e.g. linkgit:git-fetch[1] and linkgit:git-clone[1]. | 
|  |  | 
|  |  | 
|  | FORMAT | 
|  | ------ | 
|  |  | 
|  | We will use ABNF notation to define the Git bundle format. See | 
|  | linkgit:gitprotocol-common[5] for the details. | 
|  |  | 
|  | A v2 bundle looks like this: | 
|  |  | 
|  | ---- | 
|  | 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 | 
|  | ---- | 
|  |  | 
|  | A v3 bundle looks like this: | 
|  |  | 
|  | ---- | 
|  | 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 | 
|  | --------- | 
|  |  | 
|  | A Git bundle consists of several parts. | 
|  |  | 
|  | * "Capabilities", which are only in the v3 format, indicate functionality that | 
|  | the bundle requires to be read properly. | 
|  |  | 
|  | * "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. | 
|  |  | 
|  | CAPABILITIES | 
|  | ------------ | 
|  |  | 
|  | Because there is no opportunity for negotiation, unknown capabilities cause 'git | 
|  | bundle' to abort. | 
|  |  | 
|  | * `object-format` specifies the hash algorithm in use, and can take the same | 
|  | values as the `extensions.objectFormat` configuration value. | 
|  |  | 
|  | * `filter` specifies an object filter as in the `--filter` option in | 
|  | linkgit:git-rev-list[1]. The resulting pack-file must be marked as a | 
|  | `.promisor` pack-file after it is unbundled. | 
|  |  | 
|  | GIT | 
|  | --- | 
|  | Part of the linkgit:git[1] suite |