設定和配置
獲取和建立專案
基本快照
分支與合併
共享和更新專案
檢查和比較
打補丁
除錯
電子郵件
外部系統
伺服器管理
指南
管理
底層命令
- 2.50.1 無更改
-
2.50.0
2025-06-16
- 2.49.1 無更改
-
2.49.0
2025-03-14
- 2.43.1 → 2.48.2 無變更
-
2.43.0
2023-11-20
- 2.42.2 → 2.42.4 無更改
-
2.42.1
2023-11-02
- 2.39.1 → 2.42.0 無變更
-
2.39.0
2022-12-12
- 2.37.1 → 2.38.5 無變更
-
2.37.0
2022-06-27
- 2.35.1 → 2.36.6 無更改
-
2.35.0
2022-01-24
- 2.34.1 → 2.34.8 無更改
-
2.34.0
2021-11-15
- 2.33.1 → 2.33.8 無更改
-
2.33.0
2021-08-16
- 2.32.1 → 2.32.7 無變更
-
2.32.0
2021-06-06
- 2.31.1 → 2.31.8 無更改
-
2.31.0
2021-03-15
- 2.23.1 → 2.30.9 無變更
-
2.23.0
2019-08-16
- 2.20.1 → 2.22.5 無變更
-
2.20.0
2018-12-09
- 2.19.1 → 2.19.6 無更改
-
2.19.0
2018-09-10
- 2.18.1 → 2.18.5 無更改
-
2.18.0
2018-06-21
- 2.15.4 → 2.17.6 無更改
-
2.14.6
2019-12-06
- 2.11.4 → 2.13.7 無變更
-
2.10.5
2017-09-22
-
2.9.5
2017-07-30
-
2.8.6
2017-07-30
- 2.5.6 → 2.7.6 無變更
-
2.4.12
2017-05-05
- 2.1.4 → 2.3.10 無更改
-
2.0.5
2014-12-17
概要
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] 的objects
和objects/info/alternates
部分。 - -b
- --write-bitmap-index
-
在重新打包時寫入可達性點陣圖索引。這僅在與
-a
、-A
或-m
一起使用時有意義,因為點陣圖必須能夠引用所有可達物件。此選項會覆蓋repack.writeBitmaps
的設定。如果建立了多個包檔案,此選項將無效,除非寫入 MIDX(在這種情況下會建立多包點陣圖)。 - --pack-kept-objects
-
在重新打包時包含
.keep
檔案中的物件。請注意,在pack-objects
完成後,我們仍然不會刪除.keep
包。這意味著我們可能會複製物件,但這使得此選項在併發推送或拉取時可以安全使用。此選項通常僅在您使用-b
或repack.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 的檔案,不使用增量壓縮。