git fsck
命名
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
用于指定其他对象数据库根目录(通常未设置)