1. ホーム
  2. git

[解決済み] Gitのエラー「object file ... is empty」はどうすれば直せますか?

2022-02-05 23:14:22

質問

変更をコミットしようとすると、このエラーが表示されます。

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

このエラーを解決するにはどうしたらいいですか?

どのように解決するのですか?

私も同じような問題がありました。私のノートパソコンは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 . HEADが壊れているので失敗。

git reflog

fatal: bad object HEAD

ステップ6:グーグル 検索する これ . 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