簡體中文 ▾ 主題 ▾ 最新版本 ▾ git-pack-refs 最後更新於 2.50.0

名稱

git-pack-refs - 打包頭和標籤以實現高效倉庫訪問

概要

git pack-refs [--all] [--no-prune] [--auto] [--include <pattern>] [--exclude <pattern>]

描述

傳統上,分支和標籤的末端(統稱為引用)以每個引用一個檔案的形式儲存在$GIT_DIR/refs目錄下的(子)目錄中。雖然許多分支末端經常更新,但大多數標籤和一些分支末端從不更新。當一個倉庫有數百或數千個標籤時,這種一個引用一個檔案的格式既浪費儲存空間又損害效能。

此命令透過將引用儲存在單個檔案$GIT_DIR/packed-refs中來解決儲存和效能問題。當傳統$GIT_DIR/refs目錄層次結構中缺少某個引用時,將在此檔案中查詢並使用它(如果找到)。

隨後對分支的更新總是在$GIT_DIR/refs目錄層次結構下建立新檔案。

處理擁有過多引用的倉庫的推薦做法是,使用--all選項打包其引用一次,然後偶爾執行git pack-refs。標籤根據定義是靜態的,並且不會預期會改變。分支頭將透過最初的pack-refs --all進行打包,但只有當前活躍的分支頭會被解包,而下一次pack-refs(不帶--all選項)將保持它們處於解包狀態。

選項

--all

該命令預設打包所有標籤和已打包的引用,並保持其他引用不變。這是因為分支預計會活躍開發,打包其末端無助於提高效能。此選項也會導致所有引用被打包,但隱藏引用、損壞引用和符號引用除外。對於包含許多歷史分支的倉庫非常有用。

--no-prune

該命令通常在打包引用後刪除$GIT_DIR/refs層次結構下的鬆散引用。此選項指示它不要這樣做。

--auto

根據引用資料庫的當前狀態按需打包引用。此行為取決於倉庫使用的引用格式,並可能在未來發生變化。

  • "files":尚未實現對--auto的特殊處理。

  • "reftable":表被壓縮,使其形成幾何序列。對於兩個表N和N+1(其中N+1較新),這保持了N至少是N+1兩倍大的特性。只有違反此特性的表才會被壓縮。

--include <pattern>

根據glob(7)模式打包引用。重複此選項會累積包含模式。如果一個引用同時被--include--exclude包含,則--exclude優先。使用--include將預設排除所有標籤的包含。符號引用和損壞引用永遠不會被打包。與--all一起使用時,它將不執行任何操作。使用--no-include清除並重置模式列表。

--exclude <pattern>

不要打包與給定glob(7)模式匹配的引用。重複此選項會累積排除模式。使用--no-exclude清除並重置模式列表。如果一個引用已經被打包,使用--exclude包含它不會解包它。

--all一起使用時,只打包不匹配任何提供--exclude模式的鬆散引用。

--include一起使用時,將打包提供給--include的引用,減去提供給--exclude的引用。

BUG

在引入打包引用機制之前編寫的舊文件可能仍然會說“.git/refs/heads/<branch>檔案存在”,而它的意思是“分支<branch>存在”。

GIT

Git[1] 套件的一部分

scroll-to-top