49
$ git pull

remote: fatal: object 21f3981dd35fccd28febabd96f27241eea856c50 is corrupted
error: git upload-pack: git-pack-objects died with error.
fatal: git upload-pack: aborting due to possible repository corruption on the remote side.
remote: aborting due to possible repository corruption on the remote side.
fatal: protocol error: bad pack header

任何想法为什么这会失败?
当我运行时,git --bare fsck-objects --full我只看到悬挂的链接,但没有损坏的链接。也git gc没有任何帮助。当我重新克隆或从另一个克隆中提取时,我看不到此错误。

4

7 回答 7

30

正如朱利安所说,请参阅https://confluence.atlassian.com/display/FISHKB/Git+indexing+fails+due+to+bad+pack+header

这确实可能是一个内存问题,为了确保我们不会在这里丢失解决方案,它是:

git config --global pack.windowMemory "100m"
git config --global pack.SizeLimit "100m" 
git config --global pack.threads "1"
于 2013-11-29T22:08:56.057 回答
17

添加git config --global pack.window "0"对我有用......以及以下内容

git config --global pack.windowMemory "100m"
git config --global pack.packSizeLimit "100m" 
git config --global pack.threads "1"

原因:

git clone 在克隆存储库时压缩数据

它在接收数据/文件之前压缩服务器内存上的数据。

如果服务器内存不足,您将在打包对象时收到上述错误

您可以通过使 git clone 存储库而不用以下方法在服务器上打包对象来解决此问题。

git config --global pack.window "0"

于 2015-02-01T14:44:29.237 回答
13

答案似乎在评论中:git fsck

于 2012-05-08T04:51:29.893 回答
6

刚得到这个错误,花了半天时间把帖子里描述的所有事情都做了:fsck,repack,gc,配置内存选项。

还关注了这篇文章:http ://git.kernel.org/cgit/git/git.git/tree/Documentation/howto/recover-corrupted-blob-object.txt?id=HEAD

但最后,它就像在裸存储库中找到损坏的对象(在这种情况下为 21f3981dd35fccd28febabd96f27241eea856c50)并将其替换为未损坏的版本(可以在任何拉取的本地存储库的 .git 文件夹中找到)一样简单/从裸存储库克隆。)

于 2014-01-09T13:12:02.930 回答
5

在客户端,尝试这样做:

git config --global pack.windowMemory "100m"
git config --global pack.SizeLimit "100m" 
git config --global pack.threads "1"
git config --global pack.window "0"

或者在 git 服务器中,试试这个: modify: /home/git/repositories/***.git/config,在下面添加:

[pack]
         window = 0 
于 2017-06-19T06:50:14.460 回答
1

这为我解决了问题,希望对其他人有所帮助。:) https://confluence.atlassian.com/display/FISHKB/Git+indexing+fails+due+to+bad+pack+header

于 2013-11-20T14:48:46.930 回答
0

对我来说,这是因为托管 git 存储库的远程服务器的对象/文件损坏。当我尝试重新打包时,内存不足。我升级了我的实例内存,然后 ssh-ed 重新进入并运行

git gc

这是文档的链接:

https://git-scm.com/book/uz/v2/Git-Internals-Packfiles

于 2016-11-12T07:03:00.020 回答