2011-09-08 11 views
11

私はgit 1.6.4.2を実行しています。ガベージコレクションに「エラー:<SHA1>が見つかりません」というエラーが表示されます。Git - 欠けているBLOBから回復する方法

私は、欠落したオブジェクトがblobであると判断することができ、blobファイルを戻す方法はありません。 "git add"と "git commit"を実行する2つのスクリプトが同時に実行されていて、相互に干渉して新しいバージョンのファイルをコミットし、古いバージョンのブロブが消えたようです。

私が今しようとしているのは、失われたBLOBを参照するツリーを参照するコミットを取り出すためにリポジトリをロールバックすることです。

私はコミットしているブランチを知っていますから、 "git reset"を実行してダフコミットの親に巻き戻しました。そして、その支店がどこか別の場所に併合されたことを知っているので、その支店も巻き戻しました。私が知る限り、ダフコミット/ツリー/ブロブは何にも参照されません。しかし、git prune --expire = nowの後にgit gcを実行すると、見つからないオブジェクトについてのエラーが表示されます。

私の質問はこうです:どのようにduff blob idを含むツリーオブジェクトを見つけるためにgitデータベースに問い合わせることができますか?どうすればgit pruneに何が残っているのかを知ることができますか?

トリッキー!

おかげ ケビン

もう少し、それは私の質問への答えがされていることが判明し掘った後
+0

試した 'git fsck'? http://book.git-scm.com/4_maintaining_git.html –

+0

私は何が起こったのか分かりません。あなたは 'git fsck'の言うことを報告できますか? –

+1

もう少し掘り下げたら、私の質問はここで答えられることが分かります:http://stackoverflow.com/questions/7201720/how-to-delete-a-blob-from-git-repo git pruneはありませんでした。 reflogがまだそれを参照していたために巻き戻してしまったものを剪定する - git reflog expire --exires = now --all fixed と参照された投稿は、参照されるすべてのコミットに対してgit lstreeを実行するためのメカニズムを提供するblob – kbro

答えて

11

How to delete a blob from git repo - git pruneがREFLOGはまだそれに言及していたので、私は戻って巻かれたいものをプルーニングされませんでした。 0また、参照されたポストは、コミットごとにgit lstreeを実行し、参照されたBLOBを見つけるためのメカニズムを提供します。

+5

'git reflog expire --expire = now --all'ではなく' -exires = now'ですか? –

1

私は同じ問題(不足しているブロブを)持っていたと

git reflog expire --expire=now --all 

と解決策は、トリックをしませんでした。 私はここに私の解決策が見つかりました:https://git.wiki.kernel.org/index.php/GitFaq#How_to_fix_a_broken_repository.3F

このシンプルなライン

git hash-object -w <file> 

不足しているブロブを修正しました。

これが役に立ちます。

+0

'git hash-object -w 'は、リポジトリに不足しているファイルを再挿入することを可能にします。これは私の問題に正反対です。私はrepoからダフファイルを削除したかったので、 'git prune'はreflogがまだそれを指していたので、実行していませんでした。 – kbro

関連する問題