2012-02-20 5 views
2

私は、ハードドライブの故障によるgitリポジトリの破損の場合をデバッグしています。私は持っていますオブジェクトがどのコミットに属しているかを見つけますか?

>git fsck --full 
fatal: loose object 25e9d8d2deb964c3da0f86f60bbd5a23e8387349 (stored in 
.git/objects/25/e9d8d2deb964c3da0f86f60bbd5a23e8387349) is corrupt 

>git show 25e9d8d2deb964c3da0f86f60bbd5a23e8387349 
fatal: loose object 25e9d8d2deb964c3da0f86f60bbd5a23e8387349 (stored in 
.git/objects/25/e9d8d2deb964c3da0f86f60bbd5a23e8387349) is corrupt 

今、私はこのオブジェクトについて何かを知りたいと思います、それはどこに属していますか?私はその中に保存されたオブジェクトを調査しようとすると(?どのフォルダ、コミットする)

、私が取得:

>git show e9d8d2deb964c3da0f86f60bbd5a23e8387349 
fatal: ambiguous argument 'e9d8d2deb964c3da0f86f60bbd5a23e8387349': unknown revision or 
path not in the working tree. Use '--' to separate paths from revisions 

どのように進めるべき?

私は今日のリポジトリのコピーを持っていますが、私はローカルの変更をゴミ箱に入れたくありません。リポジトリを修正できるか、あるいは単にコミットするだけです。

P.S. - 私は「緩いオブジェクト」問題について、いくつかのスレッドを発見しませんが、/決意を調査する方法についての具体的な指示を何も、両方とも私は別のレポでは、ノーがある場合に破損したオブジェクトのバックアップを見つけるのですか場合でこのオブジェクトのバックアップ。

P.S. 2 - 奇妙なことに、gitk --allはうまく動作し、この破損した状態を気にしません。

+0

私が最初にすることは、それがあるオブジェクトの種類を見つけることを試みるために、 'gitの猫ファイル-p'を使用することであると言うでしょう。 –

+0

@グレッグ - 出力: 'エラー:inflateEnd:25e9d8d2deb964c3da0f86f60bbd5a23e8387349ヘッダー エラーを解凍することができませんでし有効なオブジェクト名25e9d8d2deb964c3da0f86f60bbd5a23e8387349' – ripper234

+0

[OK]を、多分何をすることができます見て、他の'猫-file'オプションのいくつかを試していない: 致命的に失敗しました調べる。 –

答えて

2

メッセージ「緩いオブジェクト25e9d8d2deb964c3da0f86f60bbd5a23e8387349」は、前述のオブジェクトの正確なハッシュを既に示しています。それは25e9d8d2deb964c3da0f86f60bbd5a23e8387349です。 Gitは、最初の2文字を別のディレクトリに分割してサブディレクトリ内のオブジェクトを整理するだけです。だから、そのオブジェクトが/25/e9d8d2deb964c3da0f86f60bbd5a23e8387349に保存されているが、それはその識別子がいっぱいハッシュであることは変わりません。

そのようにあなただけのgit show 25e9d8d2deb964c3da0f86f60bbd5a23e8387349を使用する必要があります。オブジェクトは破損しているため、これは失敗します。したがって、復元する実際の方法はありません。

ただし、「緩いオブジェクト」とは何も指していないということです。リポジトリがうまくいけば、そのオブジェクトは必要ありません。

Oddly enough, gitk --all works well and doesn't care about this corrupt state.

gitk - だけでなく、ほぼすべての他のユーザーコマンドGitリポジトリから - のみHEADから到達可能なオブジェクトまたは別の名前の参照(支店、タグ)を見てください。したがって、オブジェクトがゆるい場合は、何も指していません。特に、HEADも別の名前付き参照が指し示していないため、エラーは表示されません。

+0

'もしそうでなければリポジトリがうまくいけば、そのオブジェクトは必要ありません。' - 単に最後の正常なコミットにインデックスを戻す方法があります? 'reset -hard'のようなものは、破損したレポで動作しますか? – ripper234

+0

私はあなたが本当にインデックスを意味するとは思わない。もちろん、 'reset -hard'を使ってHEADを別のコミットに移動することはできます。そして私が言ったように、あなたのリポジトリは壊れていないようです。ただ1つの*緩い*オブジェクトがあるので、すべてがとにかくうまくいくはずです。 – poke

関連する問題