git-recover-repository 1/2 done

This commit is contained in:
Joey Hess 2013-10-20 17:50:51 -04:00
parent f482de1b76
commit 4f871f89ba
16 changed files with 431 additions and 43 deletions

View file

@ -87,18 +87,23 @@ git-recover-repository command.
### detailed design
Run `git fsck` and parse output to find bad objects, and determine
from its output if they are a commit, a tree, or a blob.
Check if there's a remote. If so, and if the bad objects are all
present on it, can simply get all bad objects from the remote,
and inject them back into .git/objects to recover:
Run `git fsck` and parse output to find bad objects. Note that
fsck may fall over and fail to print out all bad objects, when
files are corrupt. So if the fsck exits nonzero, need to collect all
bad objects it did find, and:
1. If the local repository contains packs, the packs may be corrupt.
So, start by using `git unpack-objects` to unpack all
packs it can handle (which may include parts of corrupt packs)
back to loose objects. And delete all packs.
2. Delete all loose corrupt objects.
Repeat until fsck finds no new problems.
Check if there's a remote. If so, and if the bad objects are all
present on it, can simply get all bad objects from the remote,
and inject them back into .git/objects to recover:
3. Make a new (bare) clone from the remote.
(Note: git does not seem to provide a way to fetch specific missing
objects from the remote. Also, cannot use `--reference` against

View file

@ -0,0 +1,28 @@
# NAME
git-recover-repository - Fix a broken git repository
# SYNOPSIS
git-recover-repository [--force]
# DESCRIPTION
This can fix a corrupt or broken git repository, which git fsck would
only complain has problems.
It does by deleting all corrupt objects, and retreiving all missing
objects that it can from the remotes of the repository.
If that is not sufficient to fully recover the repository, it can also
reset branches back to commits before the corruption happened. It will only
do this if run with the --force option, since that rewrites history
and throws out missing data.
# AUTHOR
Joey Hess <joey@kitenet.net>
<http://git-annex.branchable.com/>
Warning: Automatically converted into a man page by mdwn2man. Edit with care