## 命名

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] [<object>*]

## 描述

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

## 选项

<对象>

作为不可达跟踪头的对象。

如果没有给定对象，则`git fsck`默认使用索引文件，`refs`命名空间中的所有SHA-1引用以及所有reflog（除非给出--no-reflogs）作为首部。

--unreachable

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

--no-dangling

打印存在但从未`directly`使用的对象（默认）。`--no-dangling`可以用来从输出中省略这些信息。

--root

报告根节点。

--tags

报告标签。

--cache

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

--no-reflogs

不要将仅由reflog中的条目引用的提交视为可访问。此选项仅用于搜索曾经在ref中的提交，但现在不是，但仍在相应的reflog中。

--full

不仅检查GIT_OBJECT_DIRECTORY（$ GIT_DIR / objects）中的对象，还检查在GIT_ALTERNATE_OBJECT_DIRECTORIES或$ GIT_DIR / objects / info / alternates中列出的替代对象池中发现的对象，以及在$ GIT_DIR / objects / pack中找到的打包Git存档中的对象以及相应的对象在备用对象池中打包子目录。这现在是默认的; 你可以用--no-full来关闭它。

--connectivity-only

仅检查标签，提交和树对象的连通性。通过避免解开blob，这会加快操作速度，但会损失丢失的对象或其他有问题的问题。

--strict

启用更严格的检查，即捕获使用旧版Git创建的g + w位集记录的文件模式。现有的存储库（包括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。 - 即使标准错误流未指向终端，进度也会强制进行状态。

## 讨论

git-fsck测试SHA-1和一般对象的完整性，并且完全跟踪由此产生的可达性和其他一切。它打印出它发现的任何损坏（丢失或损坏的对象），并且如果使用该`--unreachable`标记，它还将打印出存在但不能从任何指定头节点（或默认设置，如上所述）到达的对象）。

任何损坏的对象，你必须找到备份或其他档案（即，你可以删除它们，并`rsync`与其他网站做一个希望别人有你已经损坏的对象）。

## 提取的诊断

由于缺乏头部信息，预计会出现悬而未决的承诺 - 潜在负责人

您没有指定任何节点作为头，因此无法区分未提交的提交和根节点。

缺少sha1目录<dir>

持有sha1对象的目录缺失。

无法访问<type> <object>

<type>对象<object>实际上并不直接或间接引用到所看到的任何树或提交中。这可能意味着您没有指定另一个根节点，或者该树已损坏。如果你没有错过根节点，那么你可能会删除无法访问的节点，因为它们不能被使用。

missing <type> <object>

<type> object <object>被引用，但不存在于数据库中。

dangling <type> <object>

<type> object <object>存在于数据库中，但从未`directly`使用。一个悬而未决的提交可能是一个根节点。

sha1 mismatch <object>

数据库中有一个sha1与数据库值不匹配的对象。这表示严重的数据完整性问题。

## 环境变量

GIT_OBJECT_DIRECTORY

用于指定对象数据库的根目录（通常为$ GIT_DIR / objects）

GIT_INDEX_FILE

用于指定索引的索引文件

GIT_ALTERNATE_OBJECT_DIRECTORIES

用于指定其他对象数据库根目录（通常未设置）