2007-01-29 01:33:58 +01:00
|
|
|
git-fsck(1)
|
|
|
|
===========
|
|
|
|
|
|
|
|
NAME
|
|
|
|
----
|
|
|
|
git-fsck - Verifies the connectivity and validity of the objects in the database
|
|
|
|
|
|
|
|
|
|
|
|
SYNOPSIS
|
|
|
|
--------
|
|
|
|
[verse]
|
2008-06-30 08:09:04 +02:00
|
|
|
'git fsck' [--tags] [--root] [--unreachable] [--cache] [--no-reflogs]
|
2011-11-07 03:59:26 +01:00
|
|
|
[--[no-]full] [--strict] [--verbose] [--lost-found]
|
2016-07-17 13:00:02 +02:00
|
|
|
[--[no-]dangling] [--[no-]progress] [--connectivity-only]
|
|
|
|
[--[no-]name-objects] [<object>*]
|
2007-01-29 01:33:58 +01:00
|
|
|
|
|
|
|
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.
|
|
|
|
+
|
2010-01-10 00:33:00 +01:00
|
|
|
If no objects are given, 'git fsck' defaults to using the
|
2013-04-15 19:49:04 +02:00
|
|
|
index file, all SHA-1 references in `refs` namespace, and all reflogs
|
2012-08-06 22:36:47 +02:00
|
|
|
(unless --no-reflogs is given) as heads.
|
2007-01-29 01:33:58 +01:00
|
|
|
|
|
|
|
--unreachable::
|
2011-05-16 20:23:35 +02:00
|
|
|
Print out objects that exist but that aren't reachable from any
|
2007-01-29 01:33:58 +01:00
|
|
|
of the reference nodes.
|
|
|
|
|
2013-05-09 03:16:55 +02:00
|
|
|
--[no-]dangling::
|
2012-02-28 23:55:39 +01:00
|
|
|
Print objects that exist but that are never 'directly' used (default).
|
2012-03-05 20:32:08 +01:00
|
|
|
`--no-dangling` can be used to omit this information from the output.
|
2012-02-28 23:55:39 +01:00
|
|
|
|
2007-01-29 01:33:58 +01:00
|
|
|
--root::
|
|
|
|
Report root nodes.
|
|
|
|
|
|
|
|
--tags::
|
|
|
|
Report tags.
|
|
|
|
|
|
|
|
--cache::
|
|
|
|
Consider any object recorded in the index also as a head node for
|
|
|
|
an unreachability trace.
|
|
|
|
|
2007-04-04 16:46:14 +02:00
|
|
|
--no-reflogs::
|
|
|
|
Do not consider commits that are referenced only by an
|
|
|
|
entry in a reflog to be reachable. This option is meant
|
|
|
|
only to search for commits that used to be in a ref, but
|
|
|
|
now aren't, but are still in that corresponding reflog.
|
|
|
|
|
2007-01-29 01:33:58 +01:00
|
|
|
--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,
|
2013-01-21 20:17:53 +01:00
|
|
|
and in packed Git archives found in $GIT_DIR/objects/pack
|
2007-01-29 01:33:58 +01:00
|
|
|
and corresponding pack subdirectories in alternate
|
2009-10-20 20:46:55 +02:00
|
|
|
object pools. This is now default; you can turn it off
|
|
|
|
with --no-full.
|
2007-01-29 01:33:58 +01:00
|
|
|
|
2015-06-22 17:27:12 +02:00
|
|
|
--connectivity-only::
|
|
|
|
Check only the connectivity of tags, commits and tree objects. By
|
|
|
|
avoiding to unpack blobs, this speeds up the operation, at the
|
|
|
|
expense of missing corrupt objects or other problematic issues.
|
|
|
|
|
2007-01-29 01:33:58 +01:00
|
|
|
--strict::
|
|
|
|
Enable more strict checking, namely to catch a file mode
|
|
|
|
recorded with g+w bit set, which was created by older
|
2013-01-21 20:17:53 +01:00
|
|
|
versions of Git. Existing repositories, including the
|
|
|
|
Linux kernel, Git itself, and sparse repository have old
|
2007-01-29 01:33:58 +01:00
|
|
|
objects that triggers this check, but it is recommended
|
|
|
|
to check new projects with this flag.
|
|
|
|
|
2007-06-05 04:44:00 +02:00
|
|
|
--verbose::
|
|
|
|
Be chatty.
|
|
|
|
|
2007-07-03 02:33:54 +02:00
|
|
|
--lost-found::
|
2007-07-22 22:20:26 +02:00
|
|
|
Write dangling objects into .git/lost-found/commit/ or
|
|
|
|
.git/lost-found/other/, depending on type. If the object is
|
|
|
|
a blob, the contents are written into the file, rather than
|
|
|
|
its object name.
|
2007-07-03 02:33:54 +02:00
|
|
|
|
2016-07-17 13:00:02 +02:00
|
|
|
--name-objects::
|
|
|
|
When displaying names of reachable objects, in addition to the
|
|
|
|
SHA-1 also display a name that describes *how* they are reachable,
|
|
|
|
compatible with linkgit:git-rev-parse[1], e.g.
|
|
|
|
`HEAD@{1234567890}~25^2:src/`.
|
|
|
|
|
2013-05-09 03:16:55 +02:00
|
|
|
--[no-]progress::
|
2011-11-07 03:59:26 +01:00
|
|
|
Progress status is reported on the standard error stream by
|
|
|
|
default when it is attached to a terminal, unless
|
|
|
|
--no-progress or --verbose is specified. --progress forces
|
|
|
|
progress status even if the standard error stream is not
|
|
|
|
directed to a terminal.
|
|
|
|
|
2011-12-16 12:33:10 +01:00
|
|
|
DISCUSSION
|
|
|
|
----------
|
2007-01-29 01:33:58 +01:00
|
|
|
|
2013-04-15 19:49:04 +02:00
|
|
|
git-fsck tests SHA-1 and general object sanity, and it does full tracking
|
2011-12-16 12:33:10 +01:00
|
|
|
of the resulting reachability and everything else. It prints out any
|
|
|
|
corruption it finds (missing or bad objects), and if you use the
|
2016-06-28 13:40:11 +02:00
|
|
|
`--unreachable` flag it will also print out objects that exist but that
|
2011-12-16 12:33:10 +01:00
|
|
|
aren't reachable from any of the specified head nodes (or the default
|
|
|
|
set, as mentioned above).
|
2007-01-29 01:33:58 +01:00
|
|
|
|
|
|
|
Any corrupt objects you will have to find in backups or other archives
|
2008-07-03 07:55:07 +02:00
|
|
|
(i.e., you can just remove them and do an 'rsync' with some other site in
|
2007-01-29 01:33:58 +01:00
|
|
|
the hopes that somebody else has the object you have corrupted).
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
|
|
|
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)
|
|
|
|
|
|
|
|
GIT
|
|
|
|
---
|
2008-06-06 09:07:32 +02:00
|
|
|
Part of the linkgit:git[1] suite
|