【问题标题】:GIT pull error - remote object is corruptedGIT 拉取错误 - 远程对象已损坏
【发布时间】:2011-05-09 09:23:45
【问题描述】:
$ 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 也没有任何帮助。当我重新克隆或从另一个克隆中提取时,我没有看到此错误。

【问题讨论】:

  • 你在远程运行git fsck吗?如果不是,它与错误无关 - 这是远程端的对象,您的仓库中的 fsck 检查您的仓库中的对象。它没有任何方法可以看到遥控器中的那些。
  • 是的,我正在远程裸存储库中运行“git fsck”。
  • 在遥控器上试试git fsck --full 21f3981 ; git repack。如果再次发生这种情况,请检查您的防火墙。
  • 非常感谢 Jefromi 和 J-16SDiZ 提供的信息,不幸的是我无法重现错误,这一次拉动有效,我什么也没做。当我再次收到此错误时,将尝试上述步骤。
  • 我在使用 bitbucket 时遇到了同样的问题。 git fsck 可以解决问题。谢谢。

标签: git git-pull git-fetch


【解决方案1】:

正如朱利安所说,请参阅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"

【讨论】:

  • 如果您的服务器使用智能 http 协议,您可能无法为该进程设置全局配置。取而代之的是,cd 进入 git 存储库本身的目录,并在没有 --global 的情况下运行相同的命令。
  • 这里提到的 atlassan 解决方案对我有用,只是 ssh'd,运行 3 个命令,退出,并在第一次尝试时成功。
【解决方案2】:

添加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"

【讨论】:

  • 这个配置是客户端还是服务器?
  • @AaronWang :这是用于克隆存储库的客户端计算机!
【解决方案3】:

答案似乎在 cmets 中:git fsck

【讨论】:

  • 很可能是服务器在创建包文件时内存不足。
【解决方案4】:

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

也关注了这个帖子:http://git.kernel.org/cgit/git/git.git/tree/Documentation/howto/recover-corrupted-blob-object.txt?id=HEAD

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

【讨论】:

    【解决方案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 服务器中,试试这个: 修改:/home/git/repositories/***.git/config,在下面添加:

    [pack]
             window = 0 
    

    【讨论】:

    • 这也解决了我的问题,即服务器端的配置更改
    【解决方案6】:

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

    【讨论】:

    • 请注意 link-only answers 是不鼓励的,所以答案应该是寻找解决方案的终点(而不是另一个参考中途停留,随着时间的推移往往会变得陈旧)。请考虑在此处添加独立的概要,并保留链接作为参考。
    【解决方案7】:

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

    git gc
    

    这里是文档的链接:

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

    【讨论】:

      猜你喜欢
      • 2016-02-18
      • 1970-01-01
      • 2016-11-24
      • 1970-01-01
      • 2012-05-30
      • 2014-07-06
      • 2011-05-14
      • 2018-01-24
      • 1970-01-01
      相关资源
      最近更新 更多