设置和配置
获取和创建项目
基本快照
分支和合并
共享和更新项目
检查和比较
修补
调试
电子邮件
外部系统
服务器管理
指南
管理
底层命令
- 2.47.0 10/06/24
- 2.46.0 → 2.46.2 无更改
- 2.45.2 无更改
- 2.45.1 04/29/24
- 2.45.0 无更改
- 2.44.2 无更改
- 2.44.1 04/19/24
- 2.44.0 无更改
- 2.43.5 无更改
- 2.43.4 04/19/24
- 2.43.1 → 2.43.3 无更改
- 2.43.0 11/20/23
- 2.42.3 无更改
- 2.42.2 04/19/24
- 2.42.0 → 2.42.1 无更改
- 2.41.2 无更改
- 2.41.1 04/19/24
- 2.41.0 无更改
- 2.40.3 无更改
- 2.40.2 04/19/24
- 2.40.0 → 2.40.1 无更改
- 2.39.5 无更改
- 2.39.4 04/19/24
- 2.39.3 无更改
- 2.39.2 02/06/23
- 2.39.1 无更改
- 2.39.0 12/12/22
- 2.38.1 → 2.38.5 无更改
- 2.38.0 10/02/22
- 2.35.1 → 2.37.7 无更改
- 2.35.0 01/24/22
- 2.30.2 → 2.34.8 无更改
- 2.30.1 无更改
- 2.22.2 → 2.30.0 无更改
- 2.22.1 08/11/19
- 2.22.0 06/07/19
- 2.21.1 → 2.21.4 无更改
- 2.21.0 02/24/19
- 2.19.1 → 2.20.5 无更改
- 2.19.0 09/10/18
- 2.11.4 → 2.18.5 无更改
- 2.10.5 09/22/17
- 2.9.5 07/30/17
- 2.7.6 → 2.8.6 无更改
- 2.6.7 05/05/17
- 2.1.4 → 2.5.6 无更改
- 2.0.5 12/17/14
概要
git fsck [--tags] [--root] [--unreachable] [--cache] [--no-reflogs] [--[no-]full] [--strict] [--verbose] [--lost-found] [--[no-]dangling] [--[no-]progress] [--connectivity-only] [--[no-]name-objects] [<object>…]
选项
- <object>
-
要作为不可达性跟踪的头的对象。
如果未给出任何对象,则git fsck默认为使用索引文件、
refs
命名空间中的所有 SHA-1 引用以及所有 reflog(除非给出 --no-reflogs)作为头。 - --unreachable
-
打印存在但无法从任何参考节点到达的对象。
- --[no-]dangling
-
打印存在但从未直接使用过的对象(默认)。
--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 来加快操作速度(尽管它仍然检查引用的 blob 是否存在)。这将检测提交和树中的损坏,但不进行任何语义检查(例如,格式错误)。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 也会强制执行进度状态。
配置
本节中此行以下的所有内容都从 git-config[1] 文档中选择性地包含。内容与那里找到的内容相同
- fsck.<msg-id>
-
在 fsck 期间,git 可能会发现旧数据存在问题,这些问题不会由当前版本的 git 生成,并且如果设置了
transfer.fsckObjects
,则不会通过网络发送。此功能旨在支持使用包含此类数据的旧存储库。设置
fsck.<msg-id>
将会被 git-fsck[1] 拾取,但要接受此类数据的推送,请改用设置receive.fsck.<msg-id>
,或者要克隆或获取它,请设置fetch.fsck.<msg-id>
。其余文档出于简洁起见讨论
fsck.*
,但相同内容也适用于相应的receive.fsck.*
和fetch.fsck.*
。变量。与
color.ui
和core.editor
等变量不同,如果receive.fsck.<msg-id>
和fetch.fsck.<msg-id>
未设置,则不会回退到fsck.<msg-id>
配置。要在不同情况下统一配置相同的 fsck 设置,必须将所有三个设置为相同的值。当
fsck.<msg-id>
设置时,可以通过配置fsck.<msg-id>
设置将错误切换为警告,反之亦然,其中<msg-id>
是 fsck 消息 ID,值是error
、warn
或ignore
之一。为方便起见,fsck 在错误/警告前加上消息 ID,例如“missingEmail: invalid author/committer line - missing email”表示设置fsck.missingEmail = ignore
将隐藏该问题。通常,最好使用
fsck.skipList
枚举具有问题的现有对象,而不是列出这些问题对象共有的故障类型以忽略,因为后者将允许同一故障的新实例不被注意到。设置未知的
fsck.<msg-id>
值会导致 fsck 退出,但对receive.fsck.<msg-id>
和fetch.fsck.<msg-id>
执行相同的操作只会导致 git 发出警告。有关
<msg-id>
的支持值,请参阅 git-fsck[1] 的“Fsck 消息”部分。 - fsck.skipList
-
已知以非致命方式损坏且应忽略的对象名称列表(即每行一个未缩写的 SHA-1)的路径。在 Git 2.20 及更高版本中,注释(#)、空行以及任何前导和尾随空格将被忽略。在旧版本中,除了每行一个 SHA-1 之外的所有内容都会出错。
当已建立的项目应被接受,即使早期的提交包含可以安全忽略的错误(例如无效的提交者电子邮件地址)时,此功能非常有用。注意:无法使用此设置跳过损坏的对象。
与
fsck.<msg-id>
一样,此变量具有相应的receive.fsck.skipList
和fetch.fsck.skipList
变体。与
color.ui
和core.editor
等变量不同,如果receive.fsck.skipList
和fetch.fsck.skipList
未设置,则不会回退到fsck.skipList
配置。要在不同情况下统一配置相同的 fsck 设置,必须将所有三个设置为相同的值。旧版本的 Git(2.20 之前)记录了对象名称列表应排序。这从来不是必需的;对象名称可以以任何顺序出现,但在读取列表时,我们跟踪列表是否已排序,以用于内部二进制搜索实现的目的,这可以节省自身在已排序列表上的一些工作。除非您有一个巨大的列表,否则没有理由费尽心思地预先排序列表。在 Git 2.20 之后,使用了哈希实现,因此现在没有理由预先排序列表。
讨论
git-fsck 测试 SHA-1 和一般的对象完整性,并且它会完全跟踪结果的可达性和所有其他内容。它会打印出它找到的任何损坏(丢失或错误的对象),如果您使用 --unreachable
标志,它还会打印出存在但无法从任何指定的头部节点(或上述默认集)到达的对象。
您必须在备份或其他档案中找到任何损坏的对象(即,您可以将其删除并使用其他某个站点执行rsync,希望其他人拥有您已损坏的对象)。
如果 core.commitGraph
为真,则还会使用 git commit-graph verify 检查提交图文件。参见 git-commit-graph[1]。
提取的诊断信息
- unreachable <type> <object>
-
<type> 对象 <object> 实际上并没有被任何已知的树或提交对象直接或间接引用。这可能意味着存在您未指定的另一个根节点,或者树已损坏。如果您没有遗漏根节点,则可以删除无法访问的节点,因为它们无法使用。
- missing <type> <object>
-
<type> 对象 <object> 被引用,但数据库中不存在。
- dangling <type> <object>
-
<type> 对象 <object> 存在于数据库中,但从未被 直接 使用。悬挂的提交可能是一个根节点。
- hash mismatch <object>
-
数据库中存在一个对象的哈希值与对象数据库值不匹配。这表示存在严重的数据完整性问题。
FSCK 消息
以下是 git fsck
检测到的错误类型以及每个错误的含义,以及它们的默认严重性。除了标记为“(FATAL)”的错误之外,其他错误的严重性可以通过设置相应的 fsck.<msg-id>
配置变量来调整。
-
badDate
-
(ERROR) 作者/提交者行中的日期格式无效。
-
badDateOverflow
-
(ERROR) 作者/提交者行中的日期值无效。
-
badEmail
-
(ERROR) 作者/提交者行中的电子邮件格式无效。
-
badFilemode
-
(INFO) 树包含错误的文件模式条目。
-
badName
-
(ERROR) 作者/提交者姓名为空。
-
badObjectSha1
-
(ERROR) 对象的 sha1 无效。
-
badParentSha1
-
(ERROR) 提交对象的父 sha1 无效。
-
badRefFiletype
-
(ERROR) 引用具有错误的文件类型。
-
badRefName
-
(ERROR) 引用格式无效。
-
badTagName
-
(INFO) 标签格式无效。
-
badTimezone
-
(ERROR) 在作者/提交者行中发现无效的时区。
-
badTree
-
(ERROR) 无法解析树。
-
badTreeSha1
-
(ERROR) 树格式无效。
-
badType
-
(ERROR) 发现无效的对象类型。
-
duplicateEntries
-
(ERROR) 树包含重复的文件条目。
-
emptyName
-
(WARN) 路径包含空名称。
-
extraHeaderEntry
-
(IGNORE) 在
tagger
之后发现额外的头部信息。 -
fullPathname
-
(WARN) 路径包含以“/”开头的完整路径。
-
gitattributesBlob
-
(ERROR) 在
.gitattributes
中发现非 Blob 对象。 -
gitattributesLarge
-
(ERROR)
.gitattributes
Blob 对象太大。 -
gitattributesLineLength
-
(ERROR)
.gitattributes
Blob 对象包含过长的行。 -
gitattributesMissing
-
(ERROR) 无法读取
.gitattributes
Blob 对象。 -
gitattributesSymlink
-
(INFO)
.gitattributes
是符号链接。 -
gitignoreSymlink
-
(INFO)
.gitignore
是符号链接。 -
gitmodulesBlob
-
(ERROR) 在
.gitmodules
中发现非 Blob 对象。 -
gitmodulesLarge
-
(ERROR)
.gitmodules
文件太大,无法解析。 -
gitmodulesMissing
-
(ERROR) 无法读取
.gitmodules
Blob 对象。 -
gitmodulesName
-
(ERROR) 子模块名称无效。
-
gitmodulesParse
-
(INFO) 无法解析
.gitmodules
Blob 对象。
gitmodulesLarge
; (ERROR) .gitmodules
Blob 对象太大,无法解析。
-
gitmodulesPath
-
(ERROR)
.gitmodules
路径无效。 -
gitmodulesSymlink
-
(ERROR)
.gitmodules
是符号链接。 -
gitmodulesUpdate
-
(ERROR) 发现无效的子模块更新设置。
-
gitmodulesUrl
-
(ERROR) 发现无效的子模块 URL。
-
hasDot
-
(WARN) 树包含名为
.
的条目。 -
hasDotdot
-
(WARN) 树包含名为
..
的条目。 -
hasDotgit
-
(WARN) 树包含名为
.git
的条目。 -
largePathname
-
(WARN) 树包含路径名称过长的条目。如果
fsck.largePathname
的值包含冒号,则该值将用作最大允许长度(例如,“warn:10”将抱怨任何 11 个或更多字节的路径组件)。默认值为 4096。 -
mailmapSymlink
-
(INFO)
.mailmap
是符号链接。 -
missingAuthor
-
(ERROR) 作者缺失。
-
missingCommitter
-
(ERROR) 提交者缺失。
-
missingEmail
-
(ERROR) 作者/提交者行中缺少电子邮件。
-
missingNameBeforeEmail
-
(ERROR) 作者/提交者行中在电子邮件之前缺少姓名。
-
missingObject
-
(ERROR) 标签对象中缺少
object
行。 -
missingSpaceBeforeDate
-
(ERROR) 作者/提交者行中在日期之前缺少空格。
-
missingSpaceBeforeEmail
-
(ERROR) 作者/提交者行中在电子邮件之前缺少空格。
-
missingTag
-
(ERROR) 标签对象中
type
行之后意外结束。 -
missingTagEntry
-
(ERROR) 标签对象中缺少
tag
行。 -
missingTaggerEntry
-
(INFO) 标签对象中缺少
tagger
行。 -
missingTree
-
(ERROR) 提交对象中缺少
tree
行。 -
missingType
-
(ERROR) 标签对象中
type
行上的类型值无效。 -
missingTypeEntry
-
(ERROR) 标签对象中缺少
type
行。 -
multipleAuthors
-
(ERROR) 在提交中发现多个作者行。
-
nulInCommit
-
(WARN) 在提交对象主体中发现空字符 (NUL)。
-
nulInHeader
-
(FATAL) 对象头部存在空字符 (NUL)。
-
nullSha1
-
(WARN) 树包含指向空 sha1 的条目。
-
treeNotSorted
-
(ERROR) 树排序不正确。
-
unknownType
-
(ERROR) 发现未知的对象类型。
-
unterminatedHeader
-
(FATAL) 对象头部缺少行尾。
-
zeroPaddedDate
-
(ERROR) 在作者/提交者行中发现零填充的日期。
-
zeroPaddedFilemode
-
(WARN) 在树中发现零填充的文件模式。
GIT
git[1] 套件的一部分