diff options
author | Joey Hess <joey@kitenet.net> | 2013-10-20 17:50:51 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2013-10-20 17:50:51 -0400 |
commit | 66ccc37a99994f1206d308c0c0003ac2605d3c42 (patch) | |
tree | 17fd97ca91a7c963cf80ac1274c94ac841e8572c /doc/design/assistant | |
parent | 66e2c6e3a16480e25f82ef447cfebac16997aac5 (diff) |
git-recover-repository 1/2 done
Diffstat (limited to 'doc/design/assistant')
-rw-r--r-- | doc/design/assistant/disaster_recovery.mdwn | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/doc/design/assistant/disaster_recovery.mdwn b/doc/design/assistant/disaster_recovery.mdwn index ccc6a5e6e..2b2ff085e 100644 --- a/doc/design/assistant/disaster_recovery.mdwn +++ b/doc/design/assistant/disaster_recovery.mdwn @@ -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 |