git-fsck(1)
===========

NAME
----
git-fsck - Verifies the connectivity and validity of the objects in the database


SYNOPSIS
--------
[verse]
'git-fsck' [--tags] [--root] [--unreachable] [--cache]
		 [--full] [--strict] [<object>*]

DESCRIPTION
-----------
Verifies the connectivity and validity of the objects in the database.

OPTIONS
-------
<object>::
	An object to treat as the head of an unreachability trace.
+
If no objects are given, git-fsck defaults to using the
index file and all SHA1 references in .git/refs/* as heads.

--unreachable::
	Print out objects that exist but that aren't readable from any
	of the reference nodes.

--root::
	Report root nodes.

--tags::
	Report tags.

--cache::
	Consider any object recorded in the index also as a head node for
	an unreachability trace.

--full::
	Check not just objects in GIT_OBJECT_DIRECTORY
	($GIT_DIR/objects), but also the ones found in alternate
	object pools listed in GIT_ALTERNATE_OBJECT_DIRECTORIES
	or $GIT_DIR/objects/info/alternates,
	and in packed git archives found in $GIT_DIR/objects/pack
	and corresponding pack subdirectories in alternate
	object pools.

--strict::
	Enable more strict checking, namely to catch a file mode
	recorded with g+w bit set, which was created by older
	versions of git.  Existing repositories, including the
	Linux kernel, git itself, and sparse repository have old
	objects that triggers this check, but it is recommended
	to check new projects with this flag.

It tests SHA1 and general object sanity, and it does full tracking of
the resulting reachability and everything else. It prints out any
corruption it finds (missing or bad objects), and if you use the
'--unreachable' flag it will also print out objects that exist but
that aren't readable from any of the specified head nodes.

So for example

	git-fsck --unreachable HEAD $(cat .git/refs/heads/*)

will do quite a _lot_ of verification on the tree. There are a few
extra validity tests to be added (make sure that tree objects are
sorted properly etc), but on the whole if "git-fsck" is happy, you
do have a valid tree.

Any corrupt objects you will have to find in backups or other archives
(i.e., you can just remove them and do an "rsync" with some other site in
the hopes that somebody else has the object you have corrupted).

Of course, "valid tree" doesn't mean that it wasn't generated by some
evil person, and the end result might be crap. git is a revision
tracking system, not a quality assurance system ;)

Extracted Diagnostics
---------------------

expect dangling commits - potential heads - due to lack of head information::
	You haven't specified any nodes as heads so it won't be
	possible to differentiate between un-parented commits and
	root nodes.

missing sha1 directory '<dir>'::
	The directory holding the sha1 objects is missing.

unreachable <type> <object>::
	The <type> object <object>, isn't actually referred to directly
	or indirectly in any of the trees or commits seen. This can
	mean that there's another root node that you're not specifying
	or that the tree is corrupt. If you haven't missed a root node
	then you might as well delete unreachable nodes since they
	can't be used.

missing <type> <object>::
	The <type> object <object>, is referred to but isn't present in
	the database.

dangling <type> <object>::
	The <type> object <object>, is present in the database but never
	'directly' used. A dangling commit could be a root node.

warning: git-fsck: tree <tree> has full pathnames in it::
	And it shouldn't...

sha1 mismatch <object>::
	The database has an object who's sha1 doesn't match the
	database value.
	This indicates a serious data integrity problem.

Environment Variables
---------------------

GIT_OBJECT_DIRECTORY::
	used to specify the object database root (usually $GIT_DIR/objects)

GIT_INDEX_FILE::
	used to specify the index file of the index

GIT_ALTERNATE_OBJECT_DIRECTORIES::
	used to specify additional object database roots (usually unset)

Author
------
Written by Linus Torvalds <torvalds@osdl.org>

Documentation
--------------
Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel.org>.

GIT
---
Part of the gitlink:git[7] suite

