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

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


SYNOPSIS
--------
[verse]
'git-fsck-objects' [--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-objects 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-objects --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-objects" 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-objects: 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

