簡體中文 ▾ 主題 ▾ 最新版本 ▾ 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