Git --distributed-even-if-your-workflow-isnt
简体中文 ▾ Topics ▾ Latest version ▾ git-fsck last updated in 2.47.0

名称

git-fsck - 验证数据库中对象的连接性和有效性

概述

git fsck [--tags] [--root] [--unreachable] [--cache] [--no-reflogs]
	 [--[no-]full] [--strict] [--verbose] [--lost-found]
	 [--[no-]dangling] [--[no-]progress] [--connectivity-only]
	 [--[no-]name-objects] [<对象>*]

描述

验证数据库中的对象的连接性和有效性。

选项

<对象>

一个要作为不可及性追踪的头的对象。

如果没有给出对象,git fsck 默认使用索引文件、refs 命名空间中的所有 SHA-1 引用,以及所有引用日志(除非 --no-reflogs 选项被给出)作为头。

--unreachable

打印出存在但不能从任何参考节点到达的对象。

--[no-]dangling

打印存在但从未 'directly ' 使用的对象(默认)。 --no-dangling 可以用来从输出中省略这一信息。

--root

报告根节点。

--tags

报告标签。

--cache

考虑将索引中记录的任何对象也作为不可达性追踪的头节点。

--no-reflogs

不认为那些只被引用日志中的条目引用的提交是可以达到的。 这个选项只是为了搜索那些曾经在引用中,但现在不在了,但仍在那个相应引用日志中的提交。

--full

不仅检查 GIT_OBJECT_DIRECTORY ($GIT_DIR/objects) 中的对象,还检查 GIT_ALTERNATE_OBJECT_DIRECTORIES 或 $GIT_DIR/objects/info/alternates 中列出的备用对象库中的对象,以及 $GIT_DIR/objects/pack 和备用对象库中相应 pack 子目录中的打包 Git 档案。 这现在是默认的;你可以用 --no-full 关闭它。

--connectivity-only

只检查可达对象的连接性,确保可达标签、提交或目录树所引用的任何对象都存在。这样可以完全避免读取 blobs,从而加快操作速度(尽管它仍然会检查被引用的 blobs 是否存在)。这将检测提交和树的损坏,但不做任何语义检查(例如,格式错误)。blob 对象中的损坏将完全不会被检测到。

无法到达的标签、提交和树也会被访问,以找到历史的悬空部分的提示。如果你不关心这个输出并想进一步加快它的速度,请使用 --no-dangling

--strict

启用更严格的检查,即抓取记录有 g+w 位的文件模式,这是由旧版本的 Git 创建的。 现有的仓库,包括 Linux 内核、Git 本身和稀疏仓库都有旧的对象,会触发这个检查,但建议用这个标志检查新项目。

--verbose

要健谈。

--lost-found

将悬空的对象写入 .git/lost-found/commit/ 或 .git/lost-found/other/,具体取决于类型。 如果对象是一个 blob,其内容将被写入文件,而不是其对象名称。

--name-objects

当显示可达对象的名称时,除了 SHA-1外,还显示描述 如何 可达的名称,与 git-rev-parse[1] 兼容,例如,HEAD@{1234567890}~25^2:src/

--[no-]progress

除非指定 --no-progress 或 --verbose,否则当标准错误流连接到终端时,默认情况下会报告进度状态。--progress 即使标准错误流没有指向终端,也会强制显示进度状态。

配置

Warning

Missing zh_HANS-CN/includes/cmd-config-section-all.txt

See original version for this content.

Warning

Missing zh_HANS-CN/config/fsck.txt

See original version for this content.

讨论

git-fsck 测试 SHA-1和一般对象的正确性,并对结果的可及性和其他一切进行全面跟踪。它打印出它发现的任何损坏(缺失或坏的对象),如果你使用 --unreachable 标志,它也会打印出存在但从任何指定的头部节点(或默认集,如上所述)无法到达的对象。

任何损坏的对象,你将不得不在备份或其他档案中找到(也就是说,你可以直接删除它们,并与其他网站做一个 rsync,希望别人拥有你损坏的对象)。

如果 core.commitGraph 为真,提交的图形文件也将用 git commit-graph verify 来检查。见 git-commit-graph[1]

提取的诊断方法

无法到达 <类型> <对象> 的问题

<类型> 对象 <对象>,实际上在看到的任何树或提交中都没有直接或间接地提到过。这可能意味着还有一个根节点没有被你指定,或者目录树被破坏了。如果你没有漏掉一个根节点,那么你不妨删除不可达的节点,因为它们不能被使用。

缺少 <类型> <对象>

<类型> 对象 <object>,被提及但不存在于数据库中。

悬空的 <类型> <对象>

<类型> 对象 <object>,存在于数据库中,但从未 directly 使用。一个悬空的提交可能是一个根节点。

哈希值不匹配 <对象>

数据库中有一个对象的哈希值与对象数据库的值不一致。 这表明一个严重的数据完整性问题。

FSCK 信息

下面列出了 git fsck 检测的错误类型和每个错误的含义,以及它们的默认严重程度。 除了那些被标记为 "(FATAL)" 的错误,其他错误的严重程度可以通过设置相应的 fsck.<msg-id> 配置变量来调整。

Warning

Missing zh_HANS-CN/fsck-msgids.txt

See original version for this content.

环境变量

GIT_OBJECT_DIRECTORY

用来指定对象数据库的根(通常是 $GIT_DIR/objects)

GIT_INDEX_FILE

用来指定索引的索引文件

GIT_ALTERNATE_OBJECT_DIRECTORIES

用来指定额外的对象数据库根(通常不设置)

GIT

属于 git[1] 文档

scroll-to-top