`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.

`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.
