簡體中文 ▾ 主題 ▾ 最新版本 ▾ git-commit-graph 最後更新於 2.46.0

名稱

git-commit-graph - 寫入和驗證 Git 提交圖檔案

概要

git commit-graph verify [--object-dir <dir>] [--shallow] [--[no-]progress]
git commit-graph write [--object-dir <dir>] [--append]
			[--split[=<strategy>]] [--reachable | --stdin-packs | --stdin-commits]
			[--changed-paths] [--[no-]max-new-filters <n>] [--[no-]progress]
			<split-options>

描述

管理序列化的提交圖檔案。

選項

--object-dir

使用給定目錄作為 packfile 和提交圖檔案的位置。此引數用於指定僅包含物件目錄而不包含完整 .git 目錄的備用位置。提交圖檔案應位於 <dir>/info 目錄中,packfile 應位於 <dir>/pack 目錄中。如果目錄無法轉換為絕對路徑,或者與任何已知物件目錄不匹配,則 git commit-graph ... 將以非零狀態退出。

--[no-]progress

明確開啟/關閉進度顯示。如果未指定,則當標準錯誤連線到終端時顯示進度。

命令

write

根據 packfile 中找到的提交寫入提交圖檔案。如果配置選項 core.commitGraph 被停用,則此命令將輸出警告,然後成功返回而不寫入提交圖檔案。

使用 --stdin-packs 選項,僅透過遍歷指定 pack 索引中的物件來生成新的提交圖。(不能與 --stdin-commits--reachable 結合使用。)

使用 --stdin-commits 選項,透過從標準輸入中指定為十六進位制 OID 列表的提交(每行一個 OID)開始遍歷提交來生成新的提交圖。解析為非提交的 OID(直接或透過剝離標籤)會被靜默忽略。格式錯誤或不存在的 OID 會生成錯誤。(不能與 --stdin-packs--reachable 結合使用。)

使用 --reachable 選項,透過從所有引用開始遍歷提交來生成新的提交圖。(不能與 --stdin-commits--stdin-packs 結合使用。)

使用 --append 選項,包含現有提交圖檔案中存在的所有提交。

使用 --changed-paths 選項,計算並寫入提交與其第一個父項之間更改的路徑資訊。此操作在大型倉庫中可能需要一段時間。它為使用 git log -- <path> 獲取目錄或檔案的歷史記錄提供了顯著的效能提升。如果給出此選項,則未來的提交圖寫入將自動假定此選項是預期的。使用 --no-changed-paths 停止儲存此資料。

使用 --max-new-filters=<n> 選項,最多生成 n 個新的布隆過濾器(如果指定了 --changed-paths)。如果 n-1,則不強制執行限制。只有新層中存在的提交才計入此限制。要追溯計算早期層的布隆過濾器,建議使用 --split=replace。覆蓋 commitGraph.maxNewFilters 配置。

使用 --split[=<strategy>] 選項,將提交圖寫入儲存在 <dir>/info/commit-graphs 中的多個提交圖檔案的鏈。提交圖層根據策略和其他拆分選項進行合併。尚未在提交圖中的新提交將新增到新的“尖端”檔案中。如果滿足以下合併條件,此檔案將與現有檔案合併:

  • 如果指定了 --split=no-merge,則永不執行合併,其餘選項將被忽略。--split=replace 用一個新的鏈覆蓋現有鏈。單獨的 --split 選項將推遲到其餘選項。(請注意,合併提交圖鏈會將現有鏈替換為長度為 1 的鏈,其中第一個也是唯一的增量包含整個圖。)

  • 如果未指定 --size-multiple=<X>,則讓 X 等於 2。如果新尖端檔案將包含 N 個提交,而前一個尖端檔案包含 M 個提交,並且 X 乘以 N 大於 M,則將這兩個檔案合併為一個檔案。

  • 如果指定了 --max-commits=<M>,其中 M 是一個正整數,並且新尖端檔案將包含超過 M 個提交,則將新尖端與前一個尖端合併。

    最後,如果未指定 --expire-time=<datetime>,則讓 datetime 為當前時間。寫入拆分提交圖後,刪除所有修改時間早於 datetime 的未使用提交圖。

verify

讀取提交圖檔案並根據物件資料庫驗證其內容。用於檢查損壞的資料。

使用 --shallow 選項,在拆分提交圖鏈中僅檢查尖端提交圖檔案。

示例

  • 為本地 .git 目錄中的 packed commits 寫入一個提交圖檔案。

    $ git commit-graph write
  • 寫入一個提交圖檔案,使用 <pack-index> 中的提交擴充套件當前提交圖檔案。

    $ echo <pack-index> | git commit-graph write --stdin-packs
  • 寫入一個包含所有可達提交的提交圖檔案。

    $ git show-ref -s | git commit-graph write --stdin-commits
  • 寫入一個包含當前提交圖檔案中所有提交以及從 HEAD 可達的提交的提交圖檔案。

    $ git rev-parse HEAD | git commit-graph write --stdin-commits --append

配置

本節中以下所有內容均從 git-config[1] 文件中選擇性地包含。內容與彼處相同:

commitGraph.generationVersion

指定寫入或讀取提交圖檔案時使用的生成號版本型別。如果指定版本 1,則不會寫入或讀取更正後的提交日期。預設為 2。

commitGraph.maxNewFilters

指定 git commit-graph write--max-new-filters 選項的預設值(參見 git-commit-graph[1])。

commitGraph.readChangedPaths

已棄用。如果為 true,則等同於 commitGraph.changedPathsVersion=-1;如果為 false,則等同於 commitGraph.changedPathsVersion=0。(如果同時設定了 commitGraph.changedPathVersion,則 commitGraph.changedPathsVersion 優先。)

commitGraph.changedPathsVersion

指定 Git 將讀取和寫入的已更改路徑布隆過濾器的版本。可以是 -1、0、1 或 2。請注意,大於 1 的值可能與尚未理解這些版本的老版本 Git 不相容。在混合版本環境中操作時請謹慎。

預設為 -1。

如果為 -1,Git 將使用倉庫中已更改路徑布隆過濾器的版本,如果不存在則預設為 1。

如果為 0,Git 將不讀取任何布隆過濾器,並在指示寫入時寫入版本 1 的布隆過濾器。

如果為 1,Git 將只讀取版本 1 的布隆過濾器,並寫入版本 1 的布隆過濾器。

如果為 2,Git 將只讀取版本 2 的布隆過濾器,並寫入版本 2 的布隆過濾器。

有關更多資訊,請參見 git-commit-graph[1]

檔案格式

GIT

Git[1] 套件的一部分

scroll-to-top