当我接近配额时,我进行了 Git pull,结果(我认为)得到了一个损坏的文件:
$ git pull
walk dffbfa18916a9db95ef8fafc6d7d769c29a445aa
fatal: object d4a0e7599494bfee2b5351113895b43c351496b3 is corrupted
$ git fsck --full
bad sha1 file: .git/objects/66/b55c76947b1d38983e0944f1e6388c86f07a1b.temp
fatal: object d4a0e7599494bfee2b5351113895b43c351496b3 is corrupted
$ git cat-file -t d4a0e7599494bfee2b5351113895b43c351496b3
error: unable to find d4a0e7599494bfee2b5351113895b43c351496b3
fatal: git cat-file d4a0e7599494bfee2b5351113895b43c351496b3: bad file
如何解决这种腐败问题?
.git/objects/66/b55c76947b1d38983e0944f1e6388c86f07a1b.temp 为零字节;删除它并不能解决我的问题(同样的错误)。
您可以使用“查找”命令删除
/objects
目录中大小为 0 的所有文件:
find .git/objects/ -size 0 -delete
建议备份。
一般来说,修复损坏的对象可能非常困难。然而,在这种情况下,我们确信问题是传输中止,这意味着该对象位于远程存储库中,因此我们应该能够安全地删除我们的副本并让 git 从远程正确获取它.
临时目标文件的大小为零,显然可以删除。这对我们没有任何好处。引用它的损坏对象,
d4a0e75...
,才是我们真正的问题。可以在.git/objects/d4/a0e75...
中找到。正如我上面所说,删除它是安全的,但为了以防万一,请先备份它。
此时,新的
git pull
应该会成功。
...假设它一开始就会成功。在这种情况下,似乎某些本地修改阻止了尝试合并,因此
stash
、pull
、stash pop
是有序的。不过,任何合并都可能发生这种情况,并且与损坏的对象没有任何关系。 (除非需要进行一些索引清理,并且存储在此过程中做到了这一点......但我不相信如此。)
从存储库损坏中恢复是官方答案。
真正简短的答案是:找到未损坏的对象并复制它们。
对于遇到同样问题的任何人:
我通过在另一个位置再次克隆存储库解决了问题。然后,我将整个 src 目录(显然没有 .git 目录)从损坏的存储库复制到新克隆的存储库中。因此,我拥有了所有最近的更改和一个干净且有效的存储库。
.git
文件夹git clone url
.git
文件夹).git
文件夹剪切并粘贴到您的工作文件夹中git add .
git commit -m 'update-project'
git push
唯一对我有用的是删除 git 存储库并重新配置它:
rm -rf .git
git remote set-url origin <repo-url>
我所做的是: 显示此存储库中的内容,确保您看到一个 .git 文件夹,(首先移动到根目录)
ls-a 删除 .git 文件夹 须藤 rm -r .git
创建并移动到一个新目录,您可以在其中临时存储您正在处理的存储库的新克隆。
cd../ mkdir t007 光盘T007
重新克隆您正在处理的存储库,然后导航到它
git克隆cloneSshUrlOfGitRepo 光盘名称Repo
将 frech .git 文件夹从刚刚克隆的存储库移动到您有损坏对象并删除 .git 文件夹的存储库。 (在此步骤之后,您的旧存储库应该再次启动并运行,因为您用一个应该可以工作的新文件夹替换了损坏的 .git 文件夹)。
mv .git ../../nameOfRepo
现在您应该能够删除新克隆的存储库(因为您不再需要它,我们已经在上一步中移动了其工作 .git 文件夹)
cd../ sudo rm -r 存储库名称
现在您可以返回到出现此问题之前您正在处理的存储库。
cd ../nameOfRepo
我已经解决了这个问题,只是硬重置原点:
git reset --hard origin/develop
始终建议备份,因为您需要将修改的文件复制到分支
find .git/objects/ -size 0 -exec rm -f {} \;
git fetch origin
我用 git 查明对象描述了问题对象 r png 文件没有损坏,因为它们在预览/gimp 中加载..,我 git add 。暂存我当前的版本,但当我尝试加载到 smartgit 时,我收到了一条可爱的消息,git fsck 弹出相同的消息,直到上一次提交,一切都进展顺利