設定和配置
獲取和建立專案
基本快照
分支與合併
共享和更新專案
檢查和比較
打補丁
除錯
電子郵件
外部系統
伺服器管理
指南
管理
底層命令
- 2.43.1 → 2.52.0 無更改
-
2.43.0
2023-11-20
- 2.38.1 → 2.42.4 無更改
-
2.38.0
2022-10-02
描述
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 的讀取者必須忽略該註釋。
功能
由於沒有協商的機會,未知的 capability 會導致 git bundle 中止。
-
object-format指定了正在使用的雜湊演算法,並且可以接受與extensions.objectFormat配置值相同的值。 -
filter指定了一個物件過濾器,就像 git-rev-list[1] 中的--filter選項一樣。生成的 pack-file 在 unbundle 後必須標記為.promisorpack-file。