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

名稱

git-repack - 在倉庫中打包未打包的物件

概要

git repack [-a] [-A] [-d] [-f] [-F] [-l] [-n] [-q] [-b] [-m]
	[--window=<n>] [--depth=<n>] [--threads=<n>] [--keep-pack=<pack-name>]
	[--write-midx] [--name-hash-version=<n>]

描述

此命令用於將當前未儲存在“包”(pack)中的所有物件組合成一個包。它還可以用於將現有包重新組織成一個更高效的包。

一個包是物件的集合,這些物件經過單獨壓縮,並應用了增量壓縮,儲存在單個檔案中,並附帶一個關聯的索引檔案。

包用於減少映象系統、備份引擎、磁碟儲存等的負載。

選項

-a

不增量打包未打包的物件,而是將所有引用的內容打包到一個包中。當打包用於私人開發的倉庫時特別有用。與 -d 一起使用。這將清理 git prune 留下的物件,但 git fsck --full --dangling 顯示為懸空的物件。

請注意,透過非智慧協議(dumb protocols)獲取的使用者將不得不獲取整個新包,以獲取其中包含的任何物件,無論他們本地已經有多少該包中的其他物件。

承諾包檔案(Promisor packfiles)將單獨重新打包:如果存在關聯“.promisor”檔案的包檔案,這些包檔案將被重新打包成另一個單獨的包,並且將寫入一個與新單獨包對應的空“.promisor”檔案。

-A

-a 相同,除非使用了 -d。在這種情況下,之前包中任何不可達的物件將變成鬆散的、未打包的物件,而不是留在舊包中。不可達物件即使在重新打包時也絕不會被有意新增到包中。此選項可防止不可達物件因留在舊包中然後被刪除而立即被刪除。相反,鬆散的不可達物件將根據正常的過期規則在下一次 *git gc* 呼叫時被修剪。請參閱 git-gc[1]

-d

打包後,如果新建立的包使現有某些包變得冗餘,則刪除這些冗餘包。同時執行 *git prune-packed* 以刪除冗餘的鬆散物件檔案。

--cruft

-a 相同,除非使用了 -d。在這種情況下,任何不可達物件都將被打包到一個單獨的垃圾(cruft)包中。不可達物件可以使用正常的過期規則在下一次 git gc 呼叫時被修剪(請參閱 git-gc[1])。與 -k 不相容。

--cruft-expiration=<approxidate>

立即過期比 <approxidate> 更舊的不可達物件,而不是等待下一次 git gc 呼叫。僅與 --cruft -d 一起使用時有用。

--max-cruft-size=<n>

覆蓋垃圾包的 --max-pack-size。預設情況下繼承 --max-pack-size 的值(如果有)。有關更多詳細資訊,請參閱 --max-pack-size 的文件。

--combine-cruft-below-size=<n>

在生成垃圾包而不進行修剪時,僅重新打包大小嚴格小於 <n> 的現有垃圾包,其中 <n> 表示位元組數,可選地可以帶有“k”、“m”或“g”字尾。大小大於或等於 <n> 的垃圾包將保持原樣不重新打包。當您希望避免在包含許多和/或大型不可達物件的倉庫中重新打包大型垃圾包時,此選項非常有用。

--expire-to=<dir>

將包含已修剪物件(如果有)的垃圾包寫入目錄 <dir>。此選項用於在單獨的目錄中保留任何已修剪物件的副本作為備份。僅與 --cruft -d 一起使用時有用。

-l

--local 選項傳遞給 git pack-objects。請參閱 git-pack-objects[1]

-f

--no-reuse-delta 選項傳遞給 git-pack-objects,請參閱 git-pack-objects[1]

-F

--no-reuse-object 選項傳遞給 git-pack-objects,請參閱 git-pack-objects[1]

-q
--quiet

不在標準錯誤流上顯示進度,並將 -q 選項傳遞給 git pack-objects。請參閱 git-pack-objects[1]

-n

不使用 git update-server-info 更新伺服器資訊。此選項會跳過更新透過 HTTP 或 FTP 釋出此倉庫(或其直接副本)所需的本地目錄檔案。請參閱 git-update-server-info[1]

--window=<n>
--depth=<n>

這兩個選項會影響包中物件使用增量壓縮的儲存方式。物件首先按型別、大小和可選名稱進行內部排序,然後與 --window 內的其他物件進行比較,以檢視使用增量壓縮是否節省空間。--depth 限制了最大增量深度;深度過大會影響解包器的效能,因為需要多次應用增量資料才能獲得所需物件。

--window 的預設值為 10,--depth 的預設值為 50。最大深度為 4095。

--threads=<n>

此選項將傳遞給 git pack-objects

--window-memory=<n>

此選項在 --window 之上提供了一個額外限制;視窗大小將動態縮小,以確保記憶體佔用不超過 <n> 位元組。這對於包含大物件和小物件的倉庫很有用,可以在視窗較大時避免記憶體不足,同時仍能利用大視窗處理較小的物件。大小可以帶有“k”、“m”或“g”字尾。--window-memory=0 使記憶體使用無限制。預設值取自 pack.windowMemory 配置變數。請注意,實際記憶體使用量將是限制乘以 git-pack-objects[1] 使用的執行緒數。

--max-pack-size=<n>

每個輸出包檔案的最大大小。大小可以帶有“k”、“m”或“g”字尾。允許的最小大小限制為 1 MiB。如果指定,可能會建立多個包檔案,這也阻止了點陣圖索引的建立。預設是無限制的,除非設定了配置變數 pack.packSizeLimit。請注意,此選項可能導致倉庫更大且更慢;請參閱 pack.packSizeLimit 中的討論。

--filter=<filter-spec>

從生成的包檔案中移除與過濾器規範匹配的物件,並將它們放入單獨的包檔案。請注意,工作目錄中使用的物件不會被過濾掉。因此,為了使拆分完全生效,最好在裸倉庫中執行此操作,並結合此選項使用 -a-d 選項。此外,應使用 --no-write-bitmap-index(或將 repack.writebitmaps 配置選項設定為 false),否則寫入點陣圖索引將失敗,因為它假定所有物件都在單個包檔案中。有關有效的 <filter-spec> 形式,請參閱 git-rev-list[1]

--filter-to=<dir>

將包含已過濾物件的包寫入目錄 <dir>。僅與 --filter 一起使用時有用。這可用於將包放置在透過 Git 備用(alternates)機制訪問的單獨物件目錄中。警告:如果包含已過濾物件的包檔案無法訪問,倉庫可能會損壞,因為可能無法訪問該包檔案中的物件。請參閱 gitrepository-layout[5]objectsobjects/info/alternates 部分。

-b
--write-bitmap-index

在重新打包時寫入可達性點陣圖索引。這僅在與 -a-A-m 一起使用時有意義,因為點陣圖必須能夠引用所有可達物件。此選項會覆蓋 repack.writeBitmaps 的設定。如果建立了多個包檔案,此選項將無效,除非寫入 MIDX(在這種情況下會建立多包點陣圖)。

--pack-kept-objects

在重新打包時包含 .keep 檔案中的物件。請注意,在 pack-objects 完成後,我們仍然不會刪除 .keep 包。這意味著我們可能會複製物件,但這使得此選項在併發推送或拉取時可以安全使用。此選項通常僅在您使用 -brepack.writeBitmaps 寫入點陣圖時才有用,因為它確保點陣圖包檔案具有必要的物件。

--keep-pack=<pack-name>

從重新打包中排除給定的包。這相當於在包上有一個 .keep 檔案。<pack-name> 是不帶前導目錄的包檔名(例如 pack-123.pack)。此選項可以指定多次以保留多個包。

--unpack-unreachable=<when>

在鬆散不可達物件時,不要鬆散任何比 <when> 更舊的物件。這可用於最佳化寫出任何會被後續 git prune 立即修剪的物件。

-k
--keep-unreachable

-ad 一起使用時,現有包中的任何不可達物件將被附加到包檔案末尾而不是被移除。此外,任何不可達的鬆散物件都將被打包(並移除其對應的鬆散物件)。

-i
--delta-islands

--delta-islands 選項傳遞給 git-pack-objects,請參閱 git-pack-objects[1]

-g<factor>
--geometric=<factor>

安排生成的包結構,使每個連續的包包含的物件數量至少是下一個最大包的 <factor> 倍。

git repack 透過確定需要重新打包成一個包以確保幾何級數遞進的包檔案“切片”來確保這一點。它選擇最小的包檔案集合,以便儘可能多地保留較大的包檔案(按該包中包含的物件數量計算)。

與其他重新打包模式不同,要打包的物件集完全由正在“彙總”的包集決定;換句話說,是那些被確定需要合併以恢復幾何級數遞進的包。

鬆散物件隱式包含在此“彙總”中,而不考慮其可達性。這在未來可能會有所改變。

在寫入多包點陣圖時,git repack 選擇最大的結果包作為 MIDX 物件選擇的首選包(請參閱 git-multi-pack-index[1])。

-m
--write-midx

寫入包含非冗餘包的多包索引(請參閱 git-multi-pack-index[1])。

--name-hash-version=<n>

將此引數提供給底層的 git pack-objects 程序。有關詳細資訊,請參閱 git-pack-objects[1]

配置

各種配置變數會影響打包,請參閱 git-config[1](搜尋“pack”和“delta”)。

預設情況下,此命令將 --delta-base-offset 選項傳遞給 git pack-objects;這通常會生成稍小的包,但生成的包與 1.4.4 版本之前的 Git 不相容。如果您需要直接或透過非智慧 http 協議與這些舊版 Git 共享您的倉庫,則需要將配置變數 repack.UseDeltaBaseOffset 設定為“false”並重新打包。舊版 Git 透過原生協議的訪問不受此選項的影響,因為在這種情況下會根據需要即時執行轉換。

對於大於 core.bigFileThreshold 配置變數的物件以及設定了 delta 屬性為 false 的檔案,不使用增量壓縮。

GIT

Git[1] 套件的一部分

scroll-to-top