简体中文 ▾ 主题 ▾ 最新版本 ▾ gitformat-bundle 最后更新于 2.43.0

名称

gitformat-bundle - 捆绑包文件格式

概要

*.bundle
*.bdl

描述

Git 捆绑包格式是一种同时表示引用(refs)和 Git 对象(objects)的格式。捆绑包是一个类似于 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 捆绑包由几个部分组成。

  • “功能”(Capabilities),仅存在于 v3 格式中,指示捆绑包需要正确读取所需的功能。

  • “前置条件”(Prerequisites)列出了未包含在捆绑包中且捆绑包读取器必须已有的对象,以便使用捆绑包中的数据。捆绑包中存储的对象可能引用前置对象以及从它们可达的任何内容(例如,捆绑包中的树对象可以引用从前置条件可达的 blob),和/或表示为相对于前置对象的增量。

  • “引用”(References)记录了历史图的尖端,换句话说,捆绑包的读取者可以从中“git fetch”的内容。

  • “包”(Pack)是“git fetch”会发送的包数据流,如果你从一个具有上述“引用”中记录的引用的仓库中抓取到另一个具有指向上述“前置条件”中列出的对象的引用的仓库中。

在捆绑包格式中,前置对象 ID 后面可以跟一个注释。这是一个注释,它没有特定的含义。捆绑包的写入者可以在此处放置任何字符串。捆绑包的读取者必须忽略该注释。

关于浅克隆和 Git 捆绑包的注意事项

请注意,前置条件不代表浅克隆边界。前置条件和浅克隆边界的语义不同,并且 Git 捆绑包 v2 格式无法表示浅克隆仓库。

功能

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

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

  • filter 指定一个对象过滤器,如同 git-rev-list[1] 中的 --filter 选项。解包后,生成的 pack-file 必须标记为 .promisor pack-file。

GIT

Git[1] 套件的一部分

scroll-to-top