错误:目标文件为空 .git/objects/../.. 为空 - 致命:松散的对象...已损坏
Posted
技术标签:
【中文标题】错误:目标文件为空 .git/objects/../.. 为空 - 致命:松散的对象...已损坏【英文标题】:error: object file is empty .git/objects/../.. is empty -- fatal: loose object ... is corrupt 【发布时间】:2012-08-31 17:07:17 【问题描述】:所以这是过去三周内第五次发生这种情况,我真的很困惑为什么这种情况会一直发生。这是我执行“git status”时得到的确切消息
error: object file .git/objects/48/088f00d90b0d27de65336bb9ed9a75b0cfed33 is empty
fatal: loose object 48088f00d90b0d27de65336bb9ed9a75b0cfed33 (stored in .git/objects/48/088f00d90b0d27de65336bb9ed9a75b0cfed33) is corrupt
我已经尝试过一些建议,例如删除损坏的对象,但同样的错误出现在另一个松散的对象上。每次我这样做时,最终都会有大约 30 个松散的对象我必须删除,然后在所有损坏的对象都消失后它仍然给我一个错误。
这是第五次发生这种情况,git 或与之相关的东西一定有问题。我已经尝试重新安装 git,但我仍然得到了损坏的对象。我正在使用运行 Ubuntu 的虚拟机,如果这会导致这样的事情,我不知道。我也尝试过切换到 Linux mint,我也解决了这个问题。
最后,我总是将更改保存到一个文本文件,删除我的存储库,从 git hub 中提取新存储库,然后重新编辑更改。这可行,但它很耗时,而且远非理想。我不一定在寻找解决此问题的方法,而是在寻找导致它的原因以及如何防止它再次发生。
【问题讨论】:
您使用什么文件系统?存储库是在 VM 的虚拟驱动器上还是通过 NFS/CFS 或环回挂载或主机上本地设备的直接 ext2/ext3/jfs/reiserfs/xfs/... 挂载或 SAN 磁盘访问?有问题的文件系统是否已满,或者足够接近它以致在某些操作期间可能会满?您的消息/系统日志文件中有任何磁盘/文件系统错误吗? 我正在使用一个格式化为 ext4 的虚拟硬盘驱动器来存储存储库。 vhd 的容量为 100 GB,而我只有 20 GB,所以我还差得很远。也没有文件系统错误... 看到这个出色的答案,***.com/a/12371337/23118,或多或少是相同的问题。 【参考方案1】:外行方式(用 GITHUB 测试):
-
转到您的项目目录
显示隐藏文件
删除
.git
文件夹
将您的(远程)存储库克隆到其他目录中
显示隐藏文件
复制.git
文件夹
将其粘贴到您的旧项目目录中
继续正常操作:git add
、git commit
、git push
奖金: 9. 睡个安稳觉
【讨论】:
这看起来非常流畅,并且假设一个人经常推送到远程应该是最小的破坏【参考方案2】:这通常不会发生,因为 git 首先将文件内容写入临时文件,然后将文件重命名为最终位置。在实践中,由于文件系统损坏,我确实看到了空的 Git 对象文件(VirtualBox 的 vboxsf,用于文件夹共享,每当我看到人们抱怨这样的空文件时,似乎都是有罪的)。
将core.fsyncobjectfiles
设置为true
可能会有所帮助。
【讨论】:
【参考方案3】:运行 git prune 对我有用! 您可能会丢失 origin 没有的旧本地/非活动分支
git prune origin
【讨论】:
【参考方案4】:就我而言,我发现此错误是由于我的本地存储库位于 NFS 挂载的文件系统上造成的。如果存储库位于本地驱动器上,则它可以正常工作。我仍在寻找 NFS 问题是否有解决方法 - 也许 .gitignore 用于 .nfs* 文件。
【讨论】:
以上是关于错误:目标文件为空 .git/objects/../.. 为空 - 致命:松散的对象...已损坏的主要内容,如果未能解决你的问题,请参考以下文章
WSL+samba+git:“错误:将对象添加到存储库数据库.git/objects的权限不足” / git-clone / git-add 权限错误
萌新笔记——git的问题(error: object file .git/objects/* is empty...)的解决方案及对git版本库文件的了解