簡體中文 ▾ 主題 ▾ 最新版本 ▾ gitformat-bundle 上次更新於 2.43.0

名稱

gitformat-bundle - bundle 檔案格式

概要

*.bundle
*.bdl

描述

Git bundle 格式是一種同時表示 refs 和 Git 物件的格式。bundle 是一個類似於 git-show-ref[1] 的格式的頭部,後面跟著一個 *.pack 格式的 pack。

該格式由 git-bundle[1] 命令建立和讀取,並由例如 git-fetch[1]git-clone[1] 支援。

格式

我們將使用 ABNF 表示法來定義 Git bundle 格式。有關詳細資訊,請參閱 gitprotocol-common[5]

v2 bundle 如下所示

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 如下所示

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 bundle 由幾個部分組成。

  • “功能”(Capabilities),僅在 v3 格式中存在,指示 bundle 正確讀取所需的功能。

  • “先決條件”(Prerequisites) 列出了 bundle 中未包含的物件,以及 bundle 的讀取者在開始使用 bundle 中的資料時必須已有的物件。儲存在 bundle 中的物件可以引用先決物件及其可達物件(例如,bundle 中的樹物件可以引用可從先決物件達到的 blob)和/或表示為與先決物件進行增量的物件。

  • “引用”(References) 記錄了歷史圖的末端,即 bundle 的讀取者可以從中“git fetch”的內容。

  • “Pack”是“git fetch”在從擁有“References”中記錄的引用的倉庫獲取到擁有“Prerequisites”中列出的物件引用的倉庫時會發送的 pack 資料流。

在 bundle 格式中,可能有一個註釋跟在先決 obj-id 後面。這是一個註釋,沒有特定含義。bundle 的編寫者可以放置任何字串在這裡。bundle 的讀取者必須忽略該註釋。

關於淺克隆和 Git bundle 的注意事項

請注意,先決條件並不代表淺克隆邊界。先決條件和淺克隆邊界的語義是不同的,Git bundle v2 格式無法表示淺克隆倉庫。

功能

由於沒有協商的機會,未知的 capability 會導致 git bundle 中止。

  • object-format 指定了正在使用的雜湊演算法,並且可以接受與 extensions.objectFormat 配置值相同的值。

  • filter 指定了一個物件過濾器,就像 git-rev-list[1] 中的 --filter 選項一樣。生成的 pack-file 在 unbundle 後必須標記為 .promisor pack-file。

GIT

Git[1] 套件的一部分