git-recover-repository 1/2 done
This commit is contained in:
parent
f482de1b76
commit
4f871f89ba
16 changed files with 431 additions and 43 deletions
|
@ -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
|
||||
|
|
28
doc/git-recover-repository.mdwn
Normal file
28
doc/git-recover-repository.mdwn
Normal 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
|
Loading…
Add table
Add a link
Reference in a new issue