2010-11-18 12 views
8

ローカルマシンのgitリポジトリに大きな問題があります。gitツリーが壊れていますか?

ファイルを変更した後、git statusを実行し、ファイルが変更されたように見えます。私はgit add .を使用してファイルを追加し、それはいつものように働いた。しかし、私は、変更をコミットしようとしたとき、私は次のエラーました:git cat-file -t e91ce852822d32e380ed7ddd04c93066e3c600eaを実行することにより

error: garbage at end of loose object 'e91ce852822d32e380ed7ddd04c93066e3c600ea' 
fatal: object e91ce852822d32e380ed7ddd04c93066e3c600ea is corrupted 

を、私は、オブジェクトが木であることがわかります。

壊れたブロブやコミットを修復する方法についていくつかの解決策を見てきましたが、これはツリーであり、何がうまくいかなかったのか、それを修正する方法については答えが見つかりません。間違っている可能性が何

すべてのヘルプ感謝:)

+2

'git fsck'を実行しましたか? –

+0

はい、同じエラーです。 それはもう一つのオブジェクトです、それもツリーです。 –

+0

@MarkRushakoff:Olofと同じエラーがあり、 'git fsck'は同じエラーメッセージを出力します。 –

答えて

2

が伝えるのは難しいですし、あなたのGitのバージョンや環境によって異なります。
たとえば、昨日は、の設定のために、この種のメッセージが表示されていました(zlib issue with git1.5.1)。 loose objectsからツリーを復元するよう

、これはSO git fsck --fullは(Mark Rushakoffコメントに言及したように)実行されたことの後に「How to recover Git objects damaged by hard disk failure?」は、それを実行する方法を示して答えます。

git cat-file -t 6c8cae4994b5ec7891ccb1527d30634997a978ee 

and check the type of the object.

If the type is tree: you could use 'git ls-tree' to recover the tree from previous backups; then ' git mktree ' to write it again in your current repository.

しかし、それは古いパックでまたはリポジトリのバックアップのいずれかでこれらのオブジェクトを見つけることとします。

+0

その質問にも遭遇しましたが、.git/objects/pack /は空です。 古いパックで検索するにはどうすればよいですか? –

+0

@Olof:古いパック?私はこれが最後の文章であると信じています。「古いパックやリポジトリのバックアップでこれらのオブジェクトを見つけると仮定します。 – VonC

+0

私はバックアップがありますが、残念ながら約1ヶ月前です。古いパックでどのように見つけることができますか?私は古いコミットもチェックアウトできませんが、動作するように見えるのはgit logだけです。 –

-2

おはよう、私のために、私はちょうどgitディレクトリを削除し、gitを再起動します。

+0

'.git'ディレクトリを削除しますか?それでは...「git init」じゃない? –

3

任意のソリューションがを動作しなかった場合は、あなたのGitのレポを外部ressource(GitHubの)とと同期している場合、あなたはあなたのレポ再initができ

私がやった:

# copy the corrupted .git dir 
mv -f .git .gitback 
git init 
# keep your config file 
cp .gitback/config .git/config 
# load objects 
git pull 

それは働いた。明らかに、それは素晴らしい解決策ではありませんが、それは助けることができます

+0

場合によっては、これで完了です。しかし、素晴らしいソリューションではなく、実際にはソロプロジェクトでしか受け入れられません:) –

関連する問題