設定和配置
獲取和建立專案
基本快照
分支與合併
共享和更新專案
檢查和比較
打補丁
除錯
電子郵件
外部系統
伺服器管理
指南
管理
底層命令
- 2.50.1 無更改
-
2.50.0
2025-06-16
- 2.45.1 → 2.49.1 無更改
-
2.45.0
2024-04-29
- 2.42.1 → 2.44.4 無更改
-
2.42.0
2023-08-21
- 2.1.4 → 2.41.3 無更改
-
2.0.5
2014-12-17
描述
傳統上,分支和標籤的末端(統稱為引用)以每個引用一個檔案的形式儲存在$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
的引用。