Git
英文 ▾ 主题 ▾ 最新版本 ▾ gitformat-bundle 最后更新于 2.43.0

名称

gitformat-bundle - 包文件格式

概要

*.bundle
*.bdl

描述

Git 包格式是一种表示引用和 Git 对象的格式。一个包是一个类似于 git-show-ref[1] 格式的头部,后跟一个 *.pack 格式的包。

此格式由 git-bundle[1] 命令创建和读取,并得到例如 git-fetch[1]git-clone[1] 的支持。

格式

我们将使用 ABNF 符号来定义 Git 包格式。有关详细信息,请参见 gitprotocol-common[5]

一个 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

语义

一个 Git 包由几个部分组成。

  • "功能" 仅在 v3 格式中,表示包正确读取所需的运行功能。

  • "先决条件" 列出包中未包含的、读者必须已有的对象,以便使用包中的数据。包中存储的对象可以引用先决条件对象以及从它们可以访问的任何内容(例如,包中的一个树对象可以引用一个从先决条件可以访问的 Blob),或表示为相对于先决条件对象的增量。

  • "引用" 记录历史图的顶端,换句话说,包的读者可以从中“git fetch”的内容。

  • "包" 是“git fetch”将发送的包数据流,如果你从一个包含上面“引用”中记录的引用的存储库中获取,并将其发送到一个包含上面“先决条件”中列出的引用的存储库中。

在包格式中,可以在先决条件 obj-id 之后加一条注释。这是一个注释,它没有特定的含义。包的编写者可以在这里放任何字符串。包的读取者必须忽略注释。

关于浅克隆和 Git 包的说明

请注意,先决条件不代表浅克隆边界。先决条件的语义和浅克隆边界的语义不同,Git 包 v2 格式不能表示浅克隆存储库。

功能

由于没有协商的机会,未知的功能会导致 *git bundle* 中止。

  • object-format 指定了使用的哈希算法,可以采用与 extensions.objectFormat 配置值相同的取值。

  • filter 指定了一个对象过滤器,就像 git-rev-list[1] 中的 --filter 选项一样。生成的 pack 文件必须在解包后标记为 .promisor pack 文件。

GIT

git[1] 套件的一部分

scroll-to-top