Git エラー「オブジェクト ファイル ... が空です」を修正するにはどうすればよいですか? 質問する

Git エラー「オブジェクト ファイル ... が空です」を修正するにはどうすればよいですか? 質問する

変更をコミットしようとすると、次のエラーが発生します:

error: object file .git/objects/31/65329bb680e30595f242b7c4d8406ca63eeab0 is empty
fatal: loose object 3165329bb680e30595f242b7c4d8406ca63eeab0 (stored in .git/objects/31/65329bb680e30595f242b7c4d8406ca63eeab0) is corrupt

試してみgit fsckた結果:

error: object file .git/objects/03/dfd60a4809a3ba7023cbf098eb322d08630b71 is empty
fatal: loose object 03dfd60a4809a3ba7023cbf098eb322d08630b71 (stored in .git/objects/03/dfd60a4809a3ba7023cbf098eb322d08630b71) is corrupt

このエラーを解決するにはどうすればよいですか?

ベストアンサー1

私も同じような問題を抱えていました。Git 操作中にラップトップのバッテリーが切れてしまいました。残念。

バックアップは取っていませんでした。(注意: Ubuntu One は Git のバックアップ ソリューションではありません。正常なリポジトリを破損したリポジトリで上書きすることになります。)

Git の達人たち、もしこれが修正方法として適切でなかったら、コメントを残してください。ただし、私の場合は、少なくとも一時的にはうまくいきました。

ステップ 1: フォルダー.gitのバックアップを作成します(実際には、何かを変更するすべてのステップの合間にこれを実行しますが、コピー先の名前は新しいものになります (例: .git-old-1.git-old-2など))。

cd ~/workspace/mcmc-chapter
cp -a .git .git-old

ステップ2: 実行git fsck --full

git fsck --full

error: object file .git/objects/8b/61d0135d3195966b443f6c73fb68466264c68e is empty
fatal: loose object 8b61d0135d3195966b443f6c73fb68466264c68e (stored in .git/objects/8b/61d0135d3195966b443f6c73fb68466264c68e) is corrupt

ステップ 3: 空のファイルを削除します。どうせ空なんだから仕方ないと思いました。

rm .git/objects/8b/61d0135d3195966b443f6c73fb68466264c68e

rm: remove write-protected regular empty file `.git/objects/8b/61d0135d3195966b443f6c73fb68466264c68e'? y

ステップ 3:git fsck再度実行します。空のファイルの削除を続けます。ディレクトリcdに移動して.git実行し、find . -type f -empty -delete -printすべての空のファイルを削除することもできます。最終的に、Git はオブジェクト ディレクトリで実際に何かを実行していることを通知し始めました。

git fsck --full

Checking object directories: 100% (256/256), done.
error: object file .git/objects/e0/cbccee33aea970f4887194047141f79a363636 is empty
fatal: loose object e0cbccee33aea970f4887194047141f79a363636 (stored in .git/objects/e0/cbccee33aea970f4887194047141f79a363636) is corrupt

ステップ 4: 空のファイルをすべて削除した後、実際git fsckに実行しました。

git fsck --full

Checking object directories: 100% (256/256), done.
error: HEAD: invalid sha1 pointer af9fc0c5939eee40f6be2ed66381d74ec2be895f
error: refs/heads/master does not point to a valid object!
error: refs/heads/master.u1conflict does not point to a valid object!
error: 0e31469d372551bb2f51a186fa32795e39f94d5c: invalid sha1 pointer in cache-tree
dangling blob 03511c9868b5dbac4ef1343956776ac508c7c2a2
missing blob 8b61d0135d3195966b443f6c73fb68466264c68e
missing blob e89896b1282fbae6cf046bf21b62dd275aaa32f4
dangling blob dd09f7f1f033632b7ef90876d6802f5b5fede79a
missing blob caab8e3d18f2b8c8947f79af7885cdeeeae192fd
missing blob e4cf65ddf80338d50ecd4abcf1caf1de3127c229

ステップ 5: 試すgit reflog。頭が壊れているので失敗します。

git reflog

fatal: bad object HEAD

ステップ6: Googleで検索これreflog の最後の 2 行を手動で取得します。

tail -n 2 .git/logs/refs/heads/master

f2d4c4868ec7719317a8fce9dc18c4f2e00ede04 9f0abf890b113a287e10d56b66dbab66adc1662d Nathan VanHoudnos <[email protected]> 1347306977 -0400    commit: up to p. 24, including correcting spelling of my name
9f0abf890b113a287e10d56b66dbab66adc1662d af9fc0c5939eee40f6be2ed66381d74ec2be895f Nathan VanHoudnos <[email protected]> 1347358589 -0400    commit: fixed up to page 28

ステップ 7: ステップ 6 から、HEAD が現在最後のコミットを指していることがわかったことに注意してください。それでは、親コミットだけを見てみましょう。

git show 9f0abf890b113a287e10d56b66dbab66adc1662d

commit 9f0abf890b113a287e10d56b66dbab66adc1662d
Author: Nathan VanHoudnos <nathanvan@XXXXXX>
Date:   Mon Sep 10 15:56:17 2012 -0400

    up to p. 24, including correcting spelling of my name

diff --git a/tex/MCMC-in-IRT.tex b/tex/MCMC-in-IRT.tex
index 86e67a1..b860686 100644
--- a/tex/MCMC-in-IRT.tex
+++ b/tex/MCMC-in-IRT.tex

出来た!

ステップ 8: ここで、HEAD を 9f0abf890b113a287e10d56b66dbab66adc1662d にポイントする必要があります。

git update-ref HEAD 9f0abf890b113a287e10d56b66dbab66adc1662d

文句を言わなかった。

ステップ 9: fsck の出力を確認します。

git fsck --full

Checking object directories: 100% (256/256), done.
error: refs/heads/master.u1conflict does not point to a valid object!
error: 0e31469d372551bb2f51a186fa32795e39f94d5c: invalid sha1 pointer in cache-tree
dangling blob 03511c9868b5dbac4ef1343956776ac508c7c2a2
missing blob 8b61d0135d3195966b443f6c73fb68466264c68e
missing blob e89896b1282fbae6cf046bf21b62dd275aaa32f4
dangling blob dd09f7f1f033632b7ef90876d6802f5b5fede79a
missing blob caab8e3d18f2b8c8947f79af7885cdeeeae192fd
missing blob e4cf65ddf80338d50ecd4abcf1caf1de3127c229

ステップ10: キャッシュツリー内の無効なsha1ポインタは、(現在は古い)インデックスファイルからのものであるようです(ソース)。そこで、それを強制終了してリポジトリをリセットしました。

rm .git/index
git reset

Unstaged changes after reset:
M    tex/MCMC-in-IRT.tex
M    tex/recipe-example/build-example-plots.R
M    tex/recipe-example/build-failure-plots.R

ステップ 11: fsck をもう一度確認します...

git fsck --full

Checking object directories: 100% (256/256), done.
error: refs/heads/master.u1conflict does not point to a valid object!
dangling blob 03511c9868b5dbac4ef1343956776ac508c7c2a2
dangling blob dd09f7f1f033632b7ef90876d6802f5b5fede79a

ぶら下がっているブロブはエラーではない私は master.u1conflict については気にしていません。今は動作しているので、これ以上触りたくありません。

ステップ 12: ローカル編集の追いつき:

git status

# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#    modified:   tex/MCMC-in-IRT.tex
#    modified:   tex/recipe-example/build-example-plots.R
#    modified:   tex/recipe-example/build-failure-plots.R
#
< ... snip ... >
no changes added to commit (use "git add" and/or "git commit -a")


git commit -a -m "recovering from the git fiasco"

[master 7922876] recovering from the git fiasco
 3 files changed, 12 insertions(+), 94 deletions(-)

git add tex/sept2012_code/example-code-testing.R
git commit -a -m "adding in the example code"

[master 385c023] adding in the example code
 1 file changed, 331 insertions(+)
 create mode 100644 tex/sept2012_code/example-code-testing.R

おすすめ記事