зеркало из https://github.com/microsoft/git.git
git-fsck-objects is now synonym to git-fsck
Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Родитель
e0d10e1c63
Коммит
df391b192d
|
@ -42,6 +42,7 @@ git-findtags
|
|||
git-fmt-merge-msg
|
||||
git-for-each-ref
|
||||
git-format-patch
|
||||
git-fsck
|
||||
git-fsck-objects
|
||||
git-gc
|
||||
git-get-tar-commit-id
|
||||
|
|
|
@ -97,7 +97,7 @@ git-fetch-pack synchingrepositories
|
|||
git-fmt-merge-msg purehelpers
|
||||
git-for-each-ref plumbinginterrogators
|
||||
git-format-patch mainporcelain
|
||||
git-fsck-objects ancillaryinterrogators
|
||||
git-fsck ancillaryinterrogators
|
||||
git-gc mainporcelain
|
||||
git-get-tar-commit-id ancillaryinterrogators
|
||||
git-grep mainporcelain
|
||||
|
|
|
@ -82,7 +82,7 @@ size> + <byte\0> + <binary object data>.
|
|||
|
||||
The structured objects can further have their structure and
|
||||
connectivity to other objects verified. This is generally done with
|
||||
the `git-fsck-objects` program, which generates a full dependency graph
|
||||
the `git-fsck` program, which generates a full dependency graph
|
||||
of all objects, and verifies their internal consistency (in addition
|
||||
to just verifying their superficial consistency through the hash).
|
||||
|
||||
|
|
|
@ -28,7 +28,7 @@ Everybody uses these commands to maintain git repositories.
|
|||
* gitlink:git-init[1] or gitlink:git-clone[1] to create a
|
||||
new repository.
|
||||
|
||||
* gitlink:git-fsck-objects[1] to check the repository for errors.
|
||||
* gitlink:git-fsck[1] to check the repository for errors.
|
||||
|
||||
* gitlink:git-prune[1] to remove unused objects in the repository.
|
||||
|
||||
|
@ -43,7 +43,7 @@ Examples
|
|||
Check health and remove cruft.::
|
||||
+
|
||||
------------
|
||||
$ git fsck-objects <1>
|
||||
$ git fsck <1>
|
||||
$ git count-objects <2>
|
||||
$ git repack <3>
|
||||
$ git gc <4>
|
||||
|
|
|
@ -8,132 +8,10 @@ git-fsck-objects - Verifies the connectivity and validity of the objects in the
|
|||
|
||||
SYNOPSIS
|
||||
--------
|
||||
[verse]
|
||||
'git-fsck-objects' [--tags] [--root] [--unreachable] [--cache]
|
||||
[--full] [--strict] [<object>*]
|
||||
'git-fsck-objects' ...
|
||||
|
||||
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
|
||||
|
||||
This is a synonym for gitlink:git-fsck[1]. Please refer to the
|
||||
documentation of that command.
|
||||
|
|
|
@ -0,0 +1,139 @@
|
|||
git-fsck(1)
|
||||
===========
|
||||
|
||||
NAME
|
||||
----
|
||||
git-fsck - Verifies the connectivity and validity of the objects in the database
|
||||
|
||||
|
||||
SYNOPSIS
|
||||
--------
|
||||
[verse]
|
||||
'git-fsck' [--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 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 --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" 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: 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
|
||||
|
|
@ -21,7 +21,7 @@ given will be ignored when checking which packs are required. This makes the
|
|||
following command useful when wanting to remove packs which contain unreachable
|
||||
objects.
|
||||
|
||||
git-fsck-objects --full --unreachable | cut -d ' ' -f3 | \
|
||||
git-fsck --full --unreachable | cut -d ' ' -f3 | \
|
||||
git-pack-redundant --all | xargs rm
|
||||
|
||||
OPTIONS
|
||||
|
|
|
@ -13,7 +13,7 @@ SYNOPSIS
|
|||
DESCRIPTION
|
||||
-----------
|
||||
|
||||
This runs `git-fsck-objects --unreachable` using all the refs
|
||||
This runs `git-fsck --unreachable` using all the refs
|
||||
available in `$GIT_DIR/refs`, optionally with additional set of
|
||||
objects specified on the command line, and prunes all
|
||||
objects unreachable from any of these head objects from the object database.
|
||||
|
|
3
Makefile
3
Makefile
|
@ -192,7 +192,7 @@ SCRIPTS = $(patsubst %.sh,%,$(SCRIPT_SH)) \
|
|||
|
||||
# ... and all the rest that could be moved out of bindir to gitexecdir
|
||||
PROGRAMS = \
|
||||
git-convert-objects$X git-fetch-pack$X git-fsck-objects$X \
|
||||
git-convert-objects$X git-fetch-pack$X git-fsck$X \
|
||||
git-hash-object$X git-index-pack$X git-local-fetch$X \
|
||||
git-merge-base$X \
|
||||
git-daemon$X \
|
||||
|
@ -214,6 +214,7 @@ EXTRA_PROGRAMS =
|
|||
BUILT_INS = \
|
||||
git-format-patch$X git-show$X git-whatchanged$X git-cherry$X \
|
||||
git-get-tar-commit-id$X git-init$X git-repo-config$X \
|
||||
git-fsck-objects$X \
|
||||
$(patsubst builtin-%.o,git-%$X,$(BUILTIN_OBJS))
|
||||
|
||||
# what 'all' will build and 'install' will install, in gitexecdir
|
||||
|
|
|
@ -606,7 +606,7 @@ int main(int argc, char **argv)
|
|||
continue;
|
||||
}
|
||||
if (*arg == '-')
|
||||
usage("git-fsck-objects [--tags] [--root] [[--unreachable] [--cache] [--full] [--strict] <head-sha1>*]");
|
||||
usage("git-fsck [--tags] [--root] [[--unreachable] [--cache] [--full] [--strict] <head-sha1>*]");
|
||||
}
|
||||
|
||||
fsck_head_link();
|
|
@ -12,7 +12,7 @@ fi
|
|||
laf="$GIT_DIR/lost-found"
|
||||
rm -fr "$laf" && mkdir -p "$laf/commit" "$laf/other" || exit
|
||||
|
||||
git fsck-objects --full |
|
||||
git fsck --full |
|
||||
while read dangling type sha1
|
||||
do
|
||||
case "$dangling" in
|
||||
|
|
|
@ -1069,7 +1069,7 @@ int main(int argc, const char **argv)
|
|||
fprintf(stderr,
|
||||
"Some loose object were found to be corrupt, but they might be just\n"
|
||||
"a false '404 Not Found' error message sent with incorrect HTTP\n"
|
||||
"status code. Suggest running git fsck-objects.\n");
|
||||
"status code. Suggest running git-fsck.\n");
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
|
|
|
@ -20,7 +20,7 @@ check_have () {
|
|||
}
|
||||
|
||||
check_fsck () {
|
||||
output=$(git fsck-objects --full)
|
||||
output=$(git fsck --full)
|
||||
case "$1" in
|
||||
'')
|
||||
test -z "$output" ;;
|
||||
|
|
|
@ -63,13 +63,13 @@ pull_to_client () {
|
|||
case "$heads" in *B*) echo $BTIP > .git/refs/heads/B;; esac
|
||||
git-symbolic-ref HEAD refs/heads/`echo $heads | sed -e 's/^\(.\).*$/\1/'`
|
||||
|
||||
test_expect_success "fsck" 'git-fsck-objects --full > fsck.txt 2>&1'
|
||||
test_expect_success "fsck" 'git-fsck --full > fsck.txt 2>&1'
|
||||
|
||||
test_expect_success 'check downloaded results' \
|
||||
'mv .git/objects/pack/pack-* . &&
|
||||
p=`ls -1 pack-*.pack` &&
|
||||
git-unpack-objects <$p &&
|
||||
git-fsck-objects --full'
|
||||
git-fsck --full'
|
||||
|
||||
test_expect_success "new object count after $number pull" \
|
||||
'idx=`echo pack-*.idx` &&
|
||||
|
@ -145,7 +145,7 @@ test_expect_success "clone shallow object count (part 2)" '
|
|||
'
|
||||
|
||||
test_expect_success "fsck in shallow repo" \
|
||||
"(cd shallow; git-fsck-objects --full)"
|
||||
"(cd shallow; git-fsck --full)"
|
||||
|
||||
#test_done; exit
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@ reachable_via() {
|
|||
}
|
||||
|
||||
test_valid_repo() {
|
||||
git fsck-objects --full > fsck.log &&
|
||||
git fsck --full > fsck.log &&
|
||||
test `wc -l < fsck.log` = 0
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче