设置和配置
获取和创建项目
基本快照
分支和合并
共享和更新项目
检查和比较
补丁
调试
外部系统
服务器管理
指南
- gitattributes
- 命令行界面约定
- 日常 Git
- 常见问题解答 (FAQ)
- 词汇表
- 钩子 (Hooks)
- gitignore
- gitmodules
- 修订版本
- 子模块
- 教程
- 工作流程
- 所有指南...
管理
底层命令
- 2.48.1 → 2.49.0 无变更
-
2.48.0
2025-01-10
- 2.47.1 → 2.47.2 无变更
-
2.47.0
2024-10-06
- 2.45.3 → 2.46.3 无变更
- 2.45.2 无变更
-
2.45.1
2024-04-29
- 2.44.3 → 2.45.0 无变更
- 2.44.2 无变更
-
2.44.1
2024-04-19
- 2.43.6 → 2.44.0 无变更
- 2.43.5 无变更
-
2.43.4
2024-04-19
- 2.43.1 → 2.43.3 无变更
-
2.43.0
2023-11-20
- 2.42.4 无变更
- 2.42.3 无变更
-
2.42.2
2024-04-19
- 2.41.3 → 2.42.1 无变更
- 2.41.2 无变更
-
2.41.1
2024-04-19
- 2.40.4 → 2.41.0 无变更
- 2.40.3 无变更
-
2.40.2
2024-04-19
- 2.40.0 → 2.40.1 无变更
- 2.39.5 无变更
-
2.39.4
2024-04-19
- 2.39.3 无变更
-
2.39.2
2023-02-06
- 2.39.1 无变更
-
2.39.0
2022-12-12
- 2.38.1 → 2.38.5 无变更
-
2.38.0
2022-10-02
- 2.35.1 → 2.37.7 无变更
-
2.35.0
2022-01-24
- 2.30.2 → 2.34.8 无变更
- 2.30.1 无变更
- 2.22.2 → 2.30.0 无变更
-
2.22.1
2019-08-11
-
2.22.0
2019-06-07
- 2.21.1 → 2.21.4 无变更
-
2.21.0
2019-02-24
- 2.19.1 → 2.20.5 无变更
-
2.19.0
2018-09-10
- 2.11.4 → 2.18.5 无变更
-
2.10.5
2017-09-22
-
2.9.5
2017-07-30
- 2.7.6 → 2.8.6 无变更
-
2.6.7
2017-05-05
- 2.1.4 → 2.5.6 无变更
-
2.0.5
2014-12-17
概要
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 和备用对象池中相应 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 Messages
部分。 - 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
标志,它还会打印出存在的但从任何指定的 head 节点(或如上所述的默认集合)都无法访问的对象。
对于任何损坏的对象,你都需要在备份或其他存档中查找(也就是说,你可以直接删除它们,然后与另一个站点进行rsync,希望其他人拥有你已损坏的对象)。
如果 core.commitGraph 为 true,则 commit-graph 文件也将使用 *git commit-graph verify* 进行检查。请参阅 git-commit-graph[1]。
FSCK 信息
以下列表列出了 git fsck
检测到的错误类型以及每个错误的含义,以及它们的默认严重程度。 除了标记为“(FATAL)”的错误外,可以通过设置相应的 fsck.<msg-id>
配置变量来调整错误的严重程度。
-
badDate
-
(ERROR) 作者/提交者行中的日期格式无效。
-
badDateOverflow
-
(ERROR) 作者/提交者行中的日期值无效。
-
badEmail
-
(ERROR) 作者/提交者行中的电子邮件格式无效。
-
badFilemode
-
(INFO) 树包含错误的 filemode 条目。
-
badName
-
(ERROR) 作者/提交者姓名为空。
-
badObjectSha1
-
(ERROR) 对象的 sha1 错误。
-
badParentSha1
-
(ERROR) 提交对象的父 sha1 错误。
-
badRefContent
-
(ERROR) ref 包含错误内容。
-
badRefFiletype
-
(ERROR) ref 具有错误的文件类型。
-
badRefName
-
(ERROR) ref 的格式无效。
-
badReferentName
-
(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 的条目。
-
refMissingNewline
-
(INFO) 不以换行符(LF)结尾的松散引用。 由于 Git 的有效实现从未创建过这样的松散引用文件,因此将来可能会出现错误。 如果你看到此错误,请报告给 git@vger.kernel.org 邮件列表,因为我们需要知道什么工具创建了这样的文件。
-
symlinkRef
-
(信息) 一个符号链接被用作 symref。如果您看到此错误,请报告给 git@vger.kernel.org 邮件列表,因为我们正在评估放弃支持将创建符号链接作为 symref 的可行性。
-
symrefTargetIsNotARef
-
(信息) 符号引用的目标既不指向根引用,也不指向以 "refs/" 开头的引用。虽然我们允许使用
git symbolic-ref
创建指向 "ref" 之外的引用目标的符号引用,但我们可能会在未来收紧该规则。如果您看到此错误,请报告给 git@vger.kernel.org 邮件列表,因为我们需要知道哪些工具创建了这样的文件。 -
trailingRefContent
-
(信息) 一个松散引用有尾随内容。由于 Git 的有效实现从未创建过这样的松散引用文件,因此将来可能会变成一个错误。如果您看到此错误,请报告给 git@vger.kernel.org 邮件列表,因为我们需要知道哪些工具创建了这样的文件。
-
treeNotSorted
-
(错误) 一棵树没有正确排序。
-
unknownType
-
(错误) 发现一个未知的对象类型。
-
unterminatedHeader
-
(致命) 对象头部缺少换行符。
-
zeroPaddedDate
-
(错误) 在 author/committer 行中发现一个零填充的日期。
-
zeroPaddedFilemode
-
(警告) 在一棵树中发现一个零填充的文件模式。
GIT
属于 git[1] 套件的一部分