`badDate`::
	(ERROR) Invalid date format in an author/committer line.

`badDateOverflow`::
	(ERROR) Invalid date value in an author/committer line.

`badEmail`::
	(ERROR) Invalid email format in an author/committer line.

`badFilemode`::
	(INFO) A tree contains a bad filemode entry.

`badGpgsig`::
	(ERROR) A tag contains a bad (truncated) signature (e.g., `gpgsig`) header.

`badHeaderContinuation`::
	(ERROR) A continuation header (such as for `gpgsig`) is unexpectedly truncated.

`badName`::
	(ERROR) An author/committer name is empty.

`badObjectSha1`::
	(ERROR) An object has a bad sha1.

`badPackedRefEntry`::
	(ERROR) The "packed-refs" file contains an invalid entry.

`badPackedRefHeader`::
	(ERROR) The "packed-refs" file contains an invalid
	header.

`badParentSha1`::
	(ERROR) A commit object has a bad parent sha1.

`badRefContent`::
	(ERROR) A ref has bad content.

`badRefFiletype`::
	(ERROR) A ref has a bad file type.

`badRefName`::
	(ERROR) A ref has an invalid format.

`badReferentName`::
	(ERROR) The referent name of a symref is invalid.

`badReftableTableName`::
	(WARN) A reftable table has an invalid name.

`badTagName`::
	(INFO) A tag has an invalid format.

`badTimezone`::
	(ERROR) Found an invalid time zone in an author/committer line.

`badTree`::
	(ERROR) A tree cannot be parsed.

`badTreeSha1`::
	(ERROR) A tree has an invalid format.

`badType`::
	(ERROR) Found an invalid object type.

`duplicateEntries`::
	(ERROR) A tree contains duplicate file entries.

`emptyName`::
	(WARN) A path contains an empty name.

`emptyPackedRefsFile`::
	(INFO) "packed-refs" file is empty. Report to the
	git@vger.kernel.org mailing list if you see this error. As only
	very early versions of Git would create such an empty
	"packed_refs" file, we might tighten this rule in the future.

`extraHeaderEntry`::
	(IGNORE) Extra headers found after `tagger`.

`fullPathname`::
	(WARN) A path contains the full path starting with "/".

`gitattributesBlob`::
	(ERROR) A non-blob found at `.gitattributes`.

`gitattributesLarge`::
	(ERROR) The `.gitattributes` blob is too large.

`gitattributesLineLength`::
	(ERROR) The `.gitattributes` blob contains too long lines.

`gitattributesMissing`::
	(ERROR) Unable to read `.gitattributes` blob.

`gitattributesSymlink`::
	(INFO) `.gitattributes` is a symlink.

`gitignoreSymlink`::
	(INFO) `.gitignore` is a symlink.

`gitmodulesBlob`::
	(ERROR) A non-blob found at `.gitmodules`.

`gitmodulesLarge`::
	(ERROR) The `.gitmodules` file is too large to parse.

`gitmodulesMissing`::
	(ERROR) Unable to read `.gitmodules` blob.

`gitmodulesName`::
	(ERROR) A submodule name is invalid.

`gitmodulesParse`::
	(INFO) Could not parse `.gitmodules` blob.

`gitmodulesPath`::
	(ERROR) `.gitmodules` path is invalid.

`gitmodulesSymlink`::
	(ERROR) `.gitmodules` is a symlink.

`gitmodulesUpdate`::
	(ERROR) Found an invalid submodule update setting.

`gitmodulesUrl`::
	(ERROR) Found an invalid submodule url.

`hasDot`::
	(WARN) A tree contains an entry named `.`.

`hasDotdot`::
	(WARN) A tree contains an entry named `..`.

`hasDotgit`::
	(WARN) A tree contains an entry named `.git`.

`largePathname`::
	(WARN) A tree contains an entry with a very long path name. If
	the value of `fsck.largePathname` contains a colon, that value
	is used as the maximum allowable length (e.g., "warn:10" would
	complain about any path component of 11 or more bytes). The
	default value is 4096.

`mailmapSymlink`::
	(INFO) `.mailmap` is a symlink.

`missingAuthor`::
	(ERROR) Author is missing.

`missingCommitter`::
	(ERROR) Committer is missing.

`missingEmail`::
	(ERROR) Email is missing in an author/committer line.

`missingNameBeforeEmail`::
	(ERROR) Missing name before an email in an author/committer line.

`missingObject`::
	(ERROR) Missing `object` line in tag object.

`missingSpaceBeforeDate`::
	(ERROR) Missing space before date in an author/committer line.

`missingSpaceBeforeEmail`::
	(ERROR) Missing space before the email in an author/committer line.

`missingTag`::
	(ERROR) Unexpected end after `type` line in a tag object.

`missingTagEntry`::
	(ERROR) Missing `tag` line in a tag object.

`missingTaggerEntry`::
	(INFO) Missing `tagger` line in a tag object.

`missingTree`::
	(ERROR) Missing `tree` line in a commit object.

`missingType`::
	(ERROR) Invalid type value on the `type` line in a tag object.

`missingTypeEntry`::
	(ERROR) Missing `type` line in a tag object.

`multipleAuthors`::
	(ERROR) Multiple author lines found in a commit.

`nulInCommit`::
	(WARN) Found a NUL byte in the commit object body.

`nulInHeader`::
	(FATAL) NUL byte exists in the object header.

`nullSha1`::
	(WARN) Tree contains entries pointing to a null sha1.

`packedRefEntryNotTerminated`::
	(ERROR) The "packed-refs" file contains an entry that is
	not terminated by a newline.

`packedRefUnsorted`::
	(ERROR) The "packed-refs" file is not sorted.

`refMissingNewline`::
	(INFO) A loose ref that does not end with newline(LF). As
	valid implementations of Git never created such a loose ref
	file, it may become an error in the future. Report to the
	git@vger.kernel.org mailing list if you see this error, as
	we need to know what tools created such a file.

`symlinkRef`::
	(INFO) A symbolic link is used as a symref. Report to the
	git@vger.kernel.org mailing list if you see this error, as we
	are assessing the feasibility of dropping the support to drop
	creating symbolic links as symrefs.

`symrefTargetIsNotARef`::
	(INFO) The target of a symbolic reference points neither to
	a root reference nor to a reference starting with "refs/".
	Although we allow create a symref pointing to the referent which
	is outside the "ref" by using `git symbolic-ref`, we may tighten
	the rule in the future. Report to the git@vger.kernel.org
	mailing list if you see this error, as we need to know what tools
	created such a file.

`trailingRefContent`::
	(INFO) A loose ref has trailing content. As valid implementations
	of Git never created such a loose ref file, it may become an
	error in the future. Report to the git@vger.kernel.org mailing
	list if you see this error, as we need to know what tools
	created such a file.

`treeNotSorted`::
	(ERROR) A tree is not properly sorted.

`unknownType`::
	(ERROR) Found an unknown object type.

`unterminatedHeader`::
	(FATAL) Missing end-of-line in the object header.

`zeroPaddedDate`::
	(ERROR) Found a zero padded date in an author/committer line.

`zeroPaddedFilemode`::
	(WARN) Found a zero padded filemode in a tree.
