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

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

`gitmodulesLarge`;
	(ERROR) `.gitmodules` blob is too large to parse.

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