All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jakub Narebski <jnareb@gmail.com>
To: "Denis Bueno" <dbueno@gmail.com>
Cc: "Git Mailing List" <git@vger.kernel.org>
Subject: Re: Recovering from repository corruption
Date: Tue, 10 Jun 2008 10:55:52 -0700 (PDT)	[thread overview]
Message-ID: <m3abhtp42o.fsf@localhost.localdomain> (raw)
In-Reply-To: <6dbd4d000806101026m458513ecqa8141f509bad7602@mail.gmail.com>

"Denis Bueno" <dbueno@gmail.com> writes:

> I was told in the thread above that I could use grafts and "git
> filter-branch" to create a new repository that simply got rid of the
> offending object.  That case was simpler, as it was the initial import
> of a file that had only two commits total that was corrupted.
> However, in this case there are changes between the initial and latest
> version of the file, and commits between the corrupted versions, so, I
> can imagine that it would be hard to get rid of in-between commits.
> 
> The thing that makes sense intuitively (read: not as a Git expert, but
> as a user) is to just let me replace the commits associated with the
> problematic objects with new versions of those commits (e.g. make
> change described in the commit message, which is different from the
> actual change that was recorded, due to whitespace/formatting issues).
>  Is this what I should do?  And to do so, should I be reading chapter
> 5 of the manual?

Without checking Git User's Manual, I think the solution could go as
the following.

Assume that history looks like this

    ...---.---a---*---b---.---...

where by '*' is marked corruped commit (commit shich tree contains
corrupted blobs).

First, you can check the commit message for '*' using git-cat-file or
git-show, you can get the difference between 'a' and 'b' using 
"git diff a b".  When you know how repaired commit 'X' should look
like, do something like:

  $ git checkout -b <temp-branch> 'a'
  $ <edit edit edit>
  $ git commit

Then history would look like this

    ...---.---a---*---b---.---...
               \
                \-X

Now with grafts make 'b' be a child of 'X', i.e. modify parent of 'b'
for history to look like below:

    ...---.---a---*   b---.---...
               \     /
                \-X-/

Examine history using git-log, git-show, check tree with git-ls-tree
and examining files, use graphical history browser like gitk.

Then if possible use git-filter-branch to make history recorded in
grafts file permanent...

HTH
-- 
Jakub Narebski
Poland
ShadeHawk on #git

  reply	other threads:[~2008-06-10 17:56 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-06-10 17:26 Recovering from repository corruption Denis Bueno
2008-06-10 17:55 ` Jakub Narebski [this message]
2008-06-10 19:38   ` Denis Bueno
2008-06-10 19:59     ` Jakub Narebski
2008-06-10 20:03       ` Denis Bueno
2008-06-10 20:14         ` Jakub Narebski
2008-06-10 20:35           ` Denis Bueno
2008-06-10 20:23         ` Linus Torvalds
2008-06-10 20:28           ` Denis Bueno
2008-06-10 21:09             ` Linus Torvalds
2008-06-10 21:22               ` Denis Bueno
2008-06-10 21:48                 ` Linus Torvalds
2008-06-10 22:09                   ` Denis Bueno
2008-06-10 22:25                     ` Tarmigan
2008-06-10 22:41                       ` Denis Bueno
2008-06-10 22:45                     ` Linus Torvalds
2008-06-10 23:00                       ` Linus Torvalds
2008-06-11  0:43                       ` Nicolas Pitre
2008-06-11  1:39                         ` Linus Torvalds
2008-06-11  1:47                           ` Nicolas Pitre
2008-06-10 21:27               ` Denis Bueno
2008-06-10 22:52               ` Junio C Hamano
2008-06-11 23:21               ` To graft or not to graft... (Re: Recovering from repository corruption) Stephen R. van den Berg
2008-06-11 23:34                 ` Jakub Narebski
2008-06-11 23:39                 ` Linus Torvalds
2008-06-12  7:14                   ` Johan Herland
2008-06-12  7:47                     ` Jeff King
2008-06-12 10:21                       ` Johan Herland
2008-06-12 12:20                         ` Stephen R. van den Berg
2008-06-10 19:40 ` Recovering from repository corruption Nicolas Pitre
2008-06-10 19:42   ` Denis Bueno

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=m3abhtp42o.fsf@localhost.localdomain \
    --to=jnareb@gmail.com \
    --cc=dbueno@gmail.com \
    --cc=git@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.