设置和配置
获取和创建项目
基本快照
分支与合并
共享和更新项目
检查和比较
打补丁
调试
电子邮件
外部系统
服务器管理
指南
管理
底层命令
-
2.52.0
2025-11-17
- 2.46.1 → 2.51.2 无更改
-
2.46.0
2024-07-29
- 2.44.1 → 2.45.4 无更改
-
2.44.0
2024-02-23
- 2.39.1 → 2.43.7 无更改
-
2.39.0
2022-12-12
- 2.38.1 → 2.38.5 无更改
-
2.38.0
2022-10-02
- 2.30.1 → 2.37.7 无更改
-
2.30.0
2020-12-27
- 2.29.1 → 2.29.3 无更改
-
2.29.0
2020-10-19
- 2.28.1 无更改
-
2.28.0
2020-07-27
- 2.27.1 无更改
-
2.27.0
2020-06-01
- 2.26.1 → 2.26.3 无更改
-
2.26.0
2020-03-22
- 2.25.1 → 2.25.5 无更改
- 2.25.0 无更改
- 2.24.1 → 2.24.4 无更改
-
2.24.0
2019-11-04
- 2.23.1 → 2.23.4 无更改
-
2.23.0
2019-08-16
- 2.19.3 → 2.22.5 无更改
-
2.19.2
2018-11-21
- 2.19.1 无更改
-
2.19.0
2018-09-10
- 2.18.1 → 2.18.5 无更改
-
2.18.0
2018-06-21
概要
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>
命令
- write
-
根据 packfiles 中找到的提交写入 commit-graph 文件。如果配置选项
core.commitGraph被禁用,则此命令将输出一个警告,然后成功返回而不写入 commit-graph 文件。使用
--stdin-packs选项,通过遍历指定 pack-indexes 中的对象来生成新的 commit graph。 (不能与--stdin-commits或--reachable结合使用。)使用
--stdin-commits选项,通过遍历 stdin 中指定的提交(以十六进制 OID 列表的形式,每行一个 OID)来生成新的 commit graph。解析为非提交对象的 OID(直接解析或通过剥离标签)将被静默忽略。格式错误或不存在的 OID 将导致错误。(不能与--stdin-packs或--reachable结合使用。)使用
--reachable选项,通过遍历所有 ref 的提交来生成新的 commit graph。(不能与--stdin-commits或--stdin-packs结合使用。)使用
--append选项,包含现有 commit-graph 文件中存在的所有提交。使用
--changed-paths选项,计算并写入有关提交与其第一个父提交之间更改的路径信息。此操作在大仓库上可能需要一些时间。它为使用gitlog--<path> 获取目录或文件的历史记录提供了显著的性能提升。如果提供了此选项,未来的 commit-graph 写入将自动假定已指定此选项。使用--no-changed-paths停止存储此数据。--changed-paths是通过配置commitGraph.changedPaths=true隐含的。使用
--max-new-filters=<n> 选项,生成最多n个新的 Bloom 过滤器(如果指定了--changed-paths)。如果n为-1,则不执行限制。只有新层中存在的提交才计入此限制。为了追溯性地计算早期层的 Bloom 过滤器,建议使用--split=replace。覆盖commitGraph.maxNewFilters配置。使用
--split[=<strategy>] 选项,将 commit-graph 写入为存储在 <dir>/info/commit-graphs中的多个 commit-graph 文件链。Commit-graph 层根据策略和其他拆分选项进行合并。新添加到 commit-graph 的提交将添加到一个新的“尖端”文件中。如果满足以下合并条件,则此文件将与现有文件合并。-
如果指定了
--split=no-merge,则永远不会执行合并,并且将忽略其余选项。--split=replace会用新的链覆盖现有链。裸--split选项将按照其余选项执行。(请注意,合并 commit graph 链会将现有链替换为长度为 1 的链,其中第一个也是唯一的增量持有整个图)。 -
如果未指定
--size-multiple=<X>,则令X等于 2。如果新的尖端文件包含N个提交,而前一个尖端文件包含M个提交,并且X乘以N大于M,则将这两个文件合并为一个文件。 -
如果指定了
--max-commits=<M> 且M为正整数,并且新的尖端文件将包含超过M个提交,则将新的尖端与前一个尖端合并。最后,如果未指定
--expire-time=<datetime>,则令datetime为当前时间。写入拆分的 commit-graph 后,删除所有修改时间早于datetime的未使用的 commit-graph。
-
- verify
-
读取 commit-graph 文件并将其内容与对象数据库进行验证。用于检查损坏的数据。
使用
--shallow选项,仅检查已拆分 commit-graph 链中的尖端 commit-graph 文件。
示例
-
为本地
.git目录中的已打包提交写入 commit-graph 文件。$ git commit-graph write
-
写入 commit-graph 文件,使用 <pack-index> 中的提交扩展当前的 commit-graph 文件。
$ echo <pack-index> | git commit-graph write --stdin-packs
-
写入一个包含所有可达提交的 commit-graph 文件。
$ git show-ref -s | git commit-graph write --stdin-commits
-
写入一个 commit-graph 文件,该文件包含当前 commit-graph 文件中的所有提交以及从
HEAD可达的提交。$ git rev-parse HEAD | git commit-graph write --stdin-commits --append
配置
本节中以下所有内容均从 git-config[1] 文档中选择性地包含。内容与彼处相同:
- commitGraph.generationVersion
-
指定写入或读取 commit-graph 文件时使用的生成号版本类型。如果指定版本 1,则不会写入或读取已更正的提交日期。默认为 2。
- commitGraph.maxNewFilters
-
指定
gitcommit-graphwrite的--max-new-filters选项的默认值(参见 git-commit-graph[1])。 - commitGraph.changedPaths
-
如果为 true,则
gitcommit-graphwrite将默认计算并写入 changed-path Bloom 过滤器,相当于传递--changed-paths。如果为 false 或未设置,则仅当过滤器已存在于当前 commit-graph 文件中时,在gitcommit-graphwrite期间写入 changed-paths Bloom 过滤器。这与不带任何--[no-]changed-paths选项的gitcommit-graphwrite的默认行为一致。要重写没有过滤器的 commit-graph 文件,请使用--no-changed-paths选项。命令行选项--[no-]changed-paths始终优先于此配置。默认为未设置。 - commitGraph.readChangedPaths
-
已弃用。如果为 true,则等同于 commitGraph.changedPathsVersion=-1;如果为 false,则等同于 commitGraph.changedPathsVersion=0。(如果 commitGraph.changedPathVersion 也已设置,则 commitGraph.changedPathsVersion 优先。)
- commitGraph.changedPathsVersion
-
指定 Git 将读取和写入的 changed-path Bloom 过滤器的版本。可以是 -1、0、1 或 2。请注意,大于 1 的值可能与不支持这些版本的旧版本 Git 不兼容。在混合版本环境中操作时请小心。
默认为 -1。
如果为 -1,Git 将使用仓库中 changed-path Bloom 过滤器的版本,如果不存在则默认为 1。
如果为 0,Git 不会读取任何 Bloom 过滤器,并且在指示写入时将写入版本 1 的 Bloom 过滤器。
如果为 1,Git 只会读取版本 1 的 Bloom 过滤器,并且会写入版本 1 的 Bloom 过滤器。
如果为 2,Git 只会读取版本 2 的 Bloom 过滤器,并且会写入版本 2 的 Bloom 过滤器。
有关更多信息,请参见 git-commit-graph[1]。