修复GitHub存储库中损坏的文件:“充气返回-3”

yh2wf1be  于 2023-04-04  发布在  Git
关注(0)|答案(1)|浏览(353)

**问题。**最近,每当我尝试在几个PDF/DjVu文件库中推送到git时,我都会遇到以下错误:

Enumerating objects: 153, done.
Counting objects: 100% (153/153), done.
Delta compression using up to 8 threads
Compressing objects: 100% (152/152), done.
remote: error: inflate: data stream error (incorrect data check)
remote: fatal: pack has bad object at offset 909244: inflate returned -3
error: remote unpack failed: index-pack abnormal exit
To github.com:A-GitHub-Organisation/Algebraic-Geometry.git
! \[remote rejected\] main -\> main (failed)z
error: failed to push some refs to 'github.com:A-GitHub-Organisation/Algebraic-Geometry.git'

我认为问题的根源是我在NAS上拥有这些存储库超过一年,并且相信存储库中的文件(不仅在.git文件夹中)被损坏了,尽管它们仍然在PDF查看器中打开,如evince或zathura。

**失败的解决方案尝试。**以下是我尝试过但没有成功的:

1.创建一个全新的存储库,并将所有文件转移到新的存储库。
1.运行git gcgit gc --aggressivegit-repairgit fsck --full
尝试(% 1)不起作用:似乎inflate returned -3与文件本身有关,而不是.git文件夹内发生的任何损坏。
尝试(2)也不起作用:我仍然得到相同的错误。

**A Successful But Clumsy Solution.**我尝试的最后一件事是首先用git add .;git commit -m "something"提交文件,然后让watch -d -n 2 'git push'运行一段时间。这样,行中的offset #number就可以运行了。

remote: fatal: pack has bad object at offset 909244: inflate returned -3
倾向于改变,例如,这里是我得到的一个示例输出:

remote: fatal: pack has bad object at offset 51177059: inflate returned -3
remote: fatal: pack has bad object at offset 1017: inflate returned -3    
remote: fatal: pack has bad object at offset 6170201: inflate returned -3
remote: fatal: pack has bad object at offset 14620489: inflate returned -3

然而,最终git push在几次尝试之后(通常从1到10+)最终通过了。我还发现,推送所需的尝试次数似乎与提交的总大小成正比(这就是为什么我认为问题的一部分是一些文件被轻微损坏)。

**问题。**这些错误是怎么回事?我该怎么做才能修复它们并正常推送文件?

a8jjtwal

a8jjtwal1#

一种方法是使用一个叫做Git-Repair的工具,你可以在Ubuntu终端中输入(sudo apt install git-repair),可以尝试从远程源修复存储库。您可以使用--force选项运行它,以覆盖任何可能与远程源冲突的本地更改。您可能还需要删除任何损坏的引用(find .git/refs -size 0 -delete -print)并在运行git-repair之前清理所有悬空提交(git gc --prune=now)。之后,您可以尝试从远程获取最新状态(git fetch),看看问题是否解决1。
另一种方法是从GitHub克隆一个新的仓库副本,然后将.git文件夹从克隆的仓库移动到原始仓库。这将用一个应该工作的新文件夹替换损坏的.git文件夹。但是,这也可能覆盖任何尚未推送的本地更改,因此使用此方法时要小心。

相关问题