Documentation / git-fsck-objects.txton commit ls-tree: further tweaks of the rewrite (e246637)
   1git-fsck-objects(1)
   2===================
   3
   4NAME
   5----
   6git-fsck-objects - Verifies the connectivity and validity of the objects in the database
   7
   8
   9SYNOPSIS
  10--------
  11'git-fsck-objects' [--tags] [--root] [--unreachable] [--cache] [--standalone | --full] [--strict] [<object>*]
  12
  13DESCRIPTION
  14-----------
  15Verifies the connectivity and validity of the objects in the database.
  16
  17OPTIONS
  18-------
  19<object>::
  20        An object to treat as the head of an unreachability trace.
  21+
  22If no objects are given, git-fsck-objects defaults to using the
  23index file and all SHA1 references in .git/refs/* as heads.
  24
  25--unreachable::
  26        Print out objects that exist but that aren't readable from any
  27        of the reference nodes.
  28
  29--root::
  30        Report root nodes.
  31
  32--tags::
  33        Report tags.
  34
  35--cache::
  36        Consider any object recorded in the index also as a head node for
  37        an unreachability trace.
  38
  39--standalone::
  40        Limit checks to the contents of GIT_OBJECT_DIRECTORY
  41        ($GIT_DIR/objects), making sure that it is consistent and
  42        complete without referring to objects found in alternate
  43        object pools listed in GIT_ALTERNATE_OBJECT_DIRECTORIES,
  44        nor packed git archives found in $GIT_DIR/objects/pack;
  45        cannot be used with --full.
  46
  47--full::
  48        Check not just objects in GIT_OBJECT_DIRECTORY
  49        ($GIT_DIR/objects), but also the ones found in alternate
  50        object pools listed in GIT_ALTERNATE_OBJECT_DIRECTORIES,
  51        and in packed git archives found in $GIT_DIR/objects/pack
  52        and corresponding pack subdirectories in alternate
  53        object pools; cannot be used with --standalone.
  54
  55--strict::
  56        Enable more strict checking, namely to catch a file mode
  57        recorded with g+w bit set, which was created by older
  58        versions of git.  Existing repositories, including the
  59        Linux kernel, git itself, and sparse repository have old
  60        objects that triggers this check, but it is recommended
  61        to check new projects with this flag.
  62
  63It tests SHA1 and general object sanity, and it does full tracking of
  64the resulting reachability and everything else. It prints out any
  65corruption it finds (missing or bad objects), and if you use the
  66'--unreachable' flag it will also print out objects that exist but
  67that aren't readable from any of the specified head nodes.
  68
  69So for example
  70
  71        git-fsck-objects --unreachable HEAD $(cat .git/refs/heads/*)
  72
  73will do quite a _lot_ of verification on the tree. There are a few
  74extra validity tests to be added (make sure that tree objects are
  75sorted properly etc), but on the whole if "git-fsck-objects" is happy, you
  76do have a valid tree.
  77
  78Any corrupt objects you will have to find in backups or other archives
  79(ie you can just remove them and do an "rsync" with some other site in
  80the hopes that somebody else has the object you have corrupted).
  81
  82Of course, "valid tree" doesn't mean that it wasn't generated by some
  83evil person, and the end result might be crap. git is a revision
  84tracking system, not a quality assurance system ;)
  85
  86Extracted Diagnostics
  87---------------------
  88
  89expect dangling commits - potential heads - due to lack of head information::
  90        You haven't specified any nodes as heads so it won't be
  91        possible to differentiate between un-parented commits and
  92        root nodes.
  93
  94missing sha1 directory '<dir>'::
  95        The directory holding the sha1 objects is missing.
  96
  97unreachable <type> <object>::
  98        The <type> object <object>, isn't actually referred to directly
  99        or indirectly in any of the trees or commits seen. This can
 100        mean that there's another root node that you're not specifying
 101        or that the tree is corrupt. If you haven't missed a root node
 102        then you might as well delete unreachable nodes since they
 103        can't be used.
 104
 105missing <type> <object>::
 106        The <type> object <object>, is referred to but isn't present in
 107        the database.
 108
 109dangling <type> <object>::
 110        The <type> object <object>, is present in the database but never
 111        'directly' used. A dangling commit could be a root node.
 112
 113warning: git-fsck-objects: tree <tree> has full pathnames in it::
 114        And it shouldn't...
 115
 116sha1 mismatch <object>::
 117        The database has an object who's sha1 doesn't match the
 118        database value.
 119        This indicates a serious data integrity problem.
 120
 121Environment Variables
 122---------------------
 123
 124GIT_OBJECT_DIRECTORY::
 125        used to specify the object database root (usually $GIT_DIR/objects)
 126
 127GIT_INDEX_FILE::
 128        used to specify the index file of the index
 129
 130GIT_ALTERNATE_OBJECT_DIRECTORIES::
 131        used to specify additional object database roots (usually unset)
 132
 133Author
 134------
 135Written by Linus Torvalds <torvalds@osdl.org>
 136
 137Documentation
 138--------------
 139Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel.org>.
 140
 141GIT
 142---
 143Part of the gitlink:git[7] suite
 144