blob: 5f0ae7b8c3ac6db268a30b5d06980a92cd411dc2 [file] [log] [blame]
'\" t
.\" Title: git-fsck
.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
.\" Date: 04/16/2019
.\" Manual: Git Manual
.\" Source: Git 2.21.0.419.gffac537e6c
.\" Language: English
.\"
.TH "GIT\-FSCK" "1" "04/16/2019" "Git 2\&.21\&.0\&.419\&.gffac53" "Git Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.\" http://bugs.debian.org/507673
.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------
.SH "NAME"
git-fsck \- Verifies the connectivity and validity of the objects in the database
.SH "SYNOPSIS"
.sp
.nf
\fIgit fsck\fR [\-\-tags] [\-\-root] [\-\-unreachable] [\-\-cache] [\-\-no\-reflogs]
[\-\-[no\-]full] [\-\-strict] [\-\-verbose] [\-\-lost\-found]
[\-\-[no\-]dangling] [\-\-[no\-]progress] [\-\-connectivity\-only]
[\-\-[no\-]name\-objects] [<object>*]
.fi
.sp
.SH "DESCRIPTION"
.sp
Verifies the connectivity and validity of the objects in the database\&.
.SH "OPTIONS"
.PP
<object>
.RS 4
An object to treat as the head of an unreachability trace\&.
.sp
If no objects are given,
\fIgit fsck\fR
defaults to using the index file, all SHA\-1 references in
\fBrefs\fR
namespace, and all reflogs (unless \-\-no\-reflogs is given) as heads\&.
.RE
.PP
\-\-unreachable
.RS 4
Print out objects that exist but that aren\(cqt reachable from any of the reference nodes\&.
.RE
.PP
\-\-[no\-]dangling
.RS 4
Print objects that exist but that are never
\fIdirectly\fR
used (default)\&.
\fB\-\-no\-dangling\fR
can be used to omit this information from the output\&.
.RE
.PP
\-\-root
.RS 4
Report root nodes\&.
.RE
.PP
\-\-tags
.RS 4
Report tags\&.
.RE
.PP
\-\-cache
.RS 4
Consider any object recorded in the index also as a head node for an unreachability trace\&.
.RE
.PP
\-\-no\-reflogs
.RS 4
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\(cqt, but are still in that corresponding reflog\&.
.RE
.PP
\-\-full
.RS 4
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\&. This is now default; you can turn it off with \-\-no\-full\&.
.RE
.PP
\-\-connectivity\-only
.RS 4
Check only the connectivity of reachable objects, making sure that any objects referenced by a reachable tag, commit, or tree is present\&. This speeds up the operation by avoiding reading blobs entirely (though it does still check that referenced blobs exist)\&. This will detect corruption in commits and trees, but not do any semantic checks (e\&.g\&., for format errors)\&. Corruption in blob objects will not be detected at all\&.
.sp
Unreachable tags, commits, and trees will also be accessed to find the tips of dangling segments of history\&. Use
\fB\-\-no\-dangling\fR
if you don\(cqt care about this output and want to speed it up further\&.
.RE
.PP
\-\-strict
.RS 4
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\&.
.RE
.PP
\-\-verbose
.RS 4
Be chatty\&.
.RE
.PP
\-\-lost\-found
.RS 4
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\&.
.RE
.PP
\-\-name\-objects
.RS 4
When displaying names of reachable objects, in addition to the SHA\-1 also display a name that describes
\fBhow\fR
they are reachable, compatible with
\fBgit-rev-parse\fR(1), e\&.g\&.
\fBHEAD@{1234567890}~25^2:src/\fR\&.
.RE
.PP
\-\-[no\-]progress
.RS 4
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\&.
.RE
.SH "DISCUSSION"
.sp
git\-fsck tests SHA\-1 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 \fB\-\-unreachable\fR flag it will also print out objects that exist but that aren\(cqt reachable from any of the specified head nodes (or the default set, as mentioned above)\&.
.sp
Any corrupt objects you will have to find in backups or other archives (i\&.e\&., you can just remove them and do an \fIrsync\fR with some other site in the hopes that somebody else has the object you have corrupted)\&.
.sp
If core\&.commitGraph is true, the commit\-graph file will also be inspected using \fIgit commit\-graph verify\fR\&. See \fBgit-commit-graph\fR(1)\&.
.SH "EXTRACTED DIAGNOSTICS"
.PP
expect dangling commits \- potential heads \- due to lack of head information
.RS 4
You haven\(cqt specified any nodes as heads so it won\(cqt be possible to differentiate between un\-parented commits and root nodes\&.
.RE
.PP
missing sha1 directory \fI<dir>\fR
.RS 4
The directory holding the sha1 objects is missing\&.
.RE
.PP
unreachable <type> <object>
.RS 4
The <type> object <object>, isn\(cqt actually referred to directly or indirectly in any of the trees or commits seen\&. This can mean that there\(cqs another root node that you\(cqre not specifying or that the tree is corrupt\&. If you haven\(cqt missed a root node then you might as well delete unreachable nodes since they can\(cqt be used\&.
.RE
.PP
missing <type> <object>
.RS 4
The <type> object <object>, is referred to but isn\(cqt present in the database\&.
.RE
.PP
dangling <type> <object>
.RS 4
The <type> object <object>, is present in the database but never
\fIdirectly\fR
used\&. A dangling commit could be a root node\&.
.RE
.PP
hash mismatch <object>
.RS 4
The database has an object whose hash doesn\(cqt match the object database value\&. This indicates a serious data integrity problem\&.
.RE
.SH "ENVIRONMENT VARIABLES"
.PP
GIT_OBJECT_DIRECTORY
.RS 4
used to specify the object database root (usually $GIT_DIR/objects)
.RE
.PP
GIT_INDEX_FILE
.RS 4
used to specify the index file of the index
.RE
.PP
GIT_ALTERNATE_OBJECT_DIRECTORIES
.RS 4
used to specify additional object database roots (usually unset)
.RE
.SH "GIT"
.sp
Part of the \fBgit\fR(1) suite