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