$ 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
也没有任何帮助。当我从另一个克隆中退回或拉动时,我没有看到这个错误。
答案 0 :(得分:28)
正如朱利安所说,见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"
答案 1 :(得分:15)
添加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克隆到存储库而不用使用以下内容打包服务器上的对象来解决此问题。
git config --global pack.window "0"
答案 2 :(得分:12)
答案显示在评论中:git fsck
答案 3 :(得分:5)
刚收到这个错误,花了半天时间做了帖子中描述的所有内容:fsck,repack,gc,配置内存选项。
但最后,就像在裸存储库中找到受损对象(在这种情况下为21f3981dd35fccd28febabd96f27241eea856c50)并将其替换为非损坏版本(可以在任何本地的.git文件夹中找到)一样简单从裸存储库中提取/克隆的存储库。)
答案 4 :(得分:1)
这解决了我的问题,并希望帮助其他人。 :) {{3P>
答案 5 :(得分:1)
在客户端,尝试这样做:
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服务器中,试试这个:
修改:/home/git/repositories/***.git/config
,添加如下:
[pack]
window = 0
答案 6 :(得分:0)
对我来说这是因为托管git repo的远程服务器有一个损坏的对象/文件。当我尝试重新包装时,内存耗尽。我升级了我的实例内存,然后ssh-ed回来并运行
git gc
以下是文档的链接: