如何修复 Git 错误“目标文件...为空"? [英] How can I fix the Git error "object file ... is empty"?
问题描述
当我尝试提交更改时,出现此错误:
When I try to commit changes, I get this error:
error: object file .git/objects/31/65329bb680e30595f242b7c4d8406ca63eeab0 is empty
fatal: loose object 3165329bb680e30595f242b7c4d8406ca63eeab0 (stored in .git/objects/31/65329bb680e30595f242b7c4d8406ca63eeab0) is corrupt
我尝试了 git fsck
我得到了:
I tried git fsck
I've got:
error: object file .git/objects/03/dfd60a4809a3ba7023cbf098eb322d08630b71 is empty
fatal: loose object 03dfd60a4809a3ba7023cbf098eb322d08630b71 (stored in .git/objects/03/dfd60a4809a3ba7023cbf098eb322d08630b71) is corrupt
我该如何解决这个错误?
How can I solve this error?
推荐答案
我遇到了类似的问题.我的笔记本电脑在 Git 操作期间没电了.嘘.
I had a similar problem. My laptop ran out of battery during a Git operation. Boo.
我没有任何备份.(注意,Ubuntu One 不是 Git 的备份解决方案;它会帮助您用损坏的存储库覆盖正常的存储库.)
I didn't have any backups. (N.B. Ubuntu One is not a backup solution for Git; it will helpfully overwrite your sane repository with your corrupted one.)
对于 Git 向导,如果这是一个不好的修复方法,请发表评论.然而,它确实对我有用……至少是暂时的.
To the Git wizards, if this was a bad way to fix it, please leave a comment. It did, however, work for me... at least temporarily.
第 1 步:备份文件夹 .git(实际上,我在每一步更改某些内容之间执行此操作,但使用新的复制目标名称,例如 .git-old-1、.git-old-2 等):
Step 1: Make a backup of folder .git (in fact I do this in between every step that changes something, but with a new copy-to name, e.g., .git-old-1, .git-old-2, etc.):
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 步:删除空文件.我想出了什么问题;反正都是空白.
Step 3: Remove the empty file. I figured what the heck; it's blank anyway.
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 开始告诉我它实际上是在对对象目录做一些事情:
Step 3: Run git fsck
again. Continue deleting the empty files. You can also cd
into the .git
directory and run find . -type f -empty -delete -print
to remove all empty files. Eventually Git started telling me it was actually doing something with the object directories:
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
第四步:删除所有空文件后,我终于来到git fsck
实际运行:
Step 4: After deleting all of the empty files, I eventually came to git fsck
actually running:
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
.失败,因为我的头坏了.
Step 5: Try git reflog
. Fail because my HEAD is broken.
git reflog
fatal: bad object HEAD
第 6 步:谷歌.找到这个.手动获取reflog的最后两行:
Step 6: Google. Find this. Manually get the last two lines of the reflog:
tail -n 2 .git/logs/refs/heads/master
f2d4c4868ec7719317a8fce9dc18c4f2e00ede04 9f0abf890b113a287e10d56b66dbab66adc1662d Nathan VanHoudnos <nathanvan@gmail.com> 1347306977 -0400 commit: up to p. 24, including correcting spelling of my name
9f0abf890b113a287e10d56b66dbab66adc1662d af9fc0c5939eee40f6be2ed66381d74ec2be895f Nathan VanHoudnos <nathanvan@gmail.com> 1347358589 -0400 commit: fixed up to page 28
第 7 步:请注意,从第 6 步我们了解到 HEAD 当前指向最后一次提交.所以让我们试着只看一下父提交:
Step 7: Note that from Step 6 we learned that the HEAD is currently pointing to the very last commit. So let's try to just look at the parent commit:
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.
Step 8: So now we need to point HEAD to 9f0abf890b113a287e10d56b66dbab66adc1662d.
git update-ref HEAD 9f0abf890b113a287e10d56b66dbab66adc1662d
没有抱怨.
第 9 步:看看 fsck 怎么说:
Step 9: See what fsck says:
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 指针似乎来自(现已过时)索引文件(来源).所以我杀死了它并重置了存储库.
Step 10: The invalid sha1 pointer in cache-tree seemed like it was from a (now outdated) index file (source). So I killed it and reset the repository.
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...
Step 11: Looking at the fsck again...
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,现在它正在工作,我不想再碰它了!
The dangling blobs are not errors. I'm not concerned with master.u1conflict, and now that it is working I don't want to touch it anymore!
第 12 步:赶上我的本地
Step 12: Catching up with my local edits:
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
这篇关于如何修复 Git 错误“目标文件...为空"?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!