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

名稱

git-pack-refs - 打包引用(heads and tags)以高效訪問倉庫

概要

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 進行打包,但只有當前活動的分支頭會解包,下一個(不帶 --all 的)pack-refs 將把它們保持解包狀態。

選項

--all

該命令預設打包所有已打包的標籤和引用,並忽略其他引用。這是因為分支預計會活躍開發,打包它們的尖端無助於效能。此選項會打包所有引用,但隱藏引用、損壞引用和符號引用除外。對於具有許多歷史分支的倉庫很有用。

--no-prune

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

--auto

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

  • "files": 鬆散引用根據鬆散引用與 packed-refs 檔案大小的比例打包到 packed-refs 檔案中。 packed-refs 檔案越大,在重新打包之前需要存在的鬆散引用就越多。

  • "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

在引入 packed-refs 機制之前的舊文件可能仍然會說諸如“存在 .git/refs/heads/<branch> 檔案”之類的話,而它的意思是“存在分支 <branch>”。

GIT

Git[1] 套件的一部分