【问题标题】:Git pull fails with bad pack header errorGit pull 失败,包头错误
【发布时间】:2011-11-13 19:57:04
【问题描述】:

git pull 失败并出现以下错误

remote: Counting objects: 146, done.
remote: fatal: unable to create thread: Resource temporarily unavailable
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


【解决方案1】:

我可以通过以下步骤解决这个问题

步骤 1. 使用较小的深度进行克隆

git clone https://your_git_clone_url --depth 3

步骤 2. 编辑 .git/config 并添加开发行。这是必需的,因为在设置深度后我无法切换除 master 以外的远程分支

[core]
    repositoryformatversion = 0
    filemode = false
    bare = false
    logallrefupdates = true
    symlinks = false
    ignorecase = true
[remote "origin"]
    url = https:<your git clone url>
    fetch = +refs/heads/master:refs/remotes/origin/master
    fetch = +refs/heads/develop:refs/remotes/origin/develop  <<--- Add this line
[branch "master"]
    remote = origin
    merge = refs/heads/master
[branch "develop"]
    remote = origin
    merge = refs/heads/develop

第 3 步:获取

【讨论】:

    【解决方案2】:

    补充 @Mark Longair 的回答

    我必须运行以下命令来解决此问题:

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

    您可以在 git 文档git config 中查看有关这些命令的更多信息。

    【讨论】:

      【解决方案3】:

      警告:如果您在 Git 2.19.1 中看到此错误,这是意料之中的,并记录在 git-for-windows/git issue 1839 中:“git gc 在 33% 的计数对象处崩溃”(它报告了 git gc 的 APPCRASH,但对于git pull),因为“git pack-objects”中使用的互斥锁未正确初始化并导致“git repack”在Windows上转储核心。

      如问题中所述:

      它影响的不仅仅是gc。我也用pull 打了它的一个变种:

      $ git pull
      remote: Enumerating objects: 3548, done.
      error: git upload-pack: git-pack-objects died with error.
      fatremote: aborting due to possible repository corruption on the remote side.
      al: git uploadf-pack: aborting due to possible repository corruption on the remote side.
      atal: protocol error: bad pack header
      

      这已在 Git 2.20(2018 年第四季度)中修复。
      请参阅Johannes Schindelin (dscho)commit 34204c8commit 9308f45commit ce498e0(2018 年 10 月 16 日)。
      (由 Junio C Hamano -- gitster -- 合并于 commit 620b00e,2018 年 10 月 30 日)

      pack-objects (mingw):在正确的位置初始化 packing_data 互斥体

      9ac3f0epack-objects:修复打包大增量时的性能问题,2018-07-22,Git v2.19.0-rc1)中,引入了一个互斥体,用于保护设置增量大小的调用.这个提交甚至添加了代码来初始化它,但是在一个不正确的位置:在init_threaded_search(),而对oe_set_delta_size()(以及因此对packing_data_lock())的调用可能发生在调用链check_object()get_object_details()prepare_pack() cmd_pack_objects(),早在prepare_pack() 函数调用ll_find_deltas()(初始化线程搜索)之前。

      互斥锁在错误位置初始化的另一个迹象是,初始化它的函数位于 builtin/ 中,而使用互斥锁的代码在 libgit.a 头文件中定义。

      【讨论】:

        【解决方案4】:

        remote 开头的行是从远程系统上运行的 git 输出的。错误:

        fatal: unable to create thread: Resource temporarily unavailable
        

        ...强烈建议您的服务器内存不足,如果您有以下任何一种情况,都可能发生这种情况:

        1. 一个包含大量大文件的存储库,这可能会导致重新打包占用大量内存。
        2. 由于ulimit 设置,虚拟内存有限 - 一般而言,或仅用于该帐户

        建议here 是通过登录远程系统(作为 git 运行的用户)并执行以下操作来限制打包可能占用的内存量:

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

        【讨论】:

        • 谢谢!我收到与 OP 相同的错误。我尝试实现 pack.windowMemory 和 pack.SizeLimit 配置项,但我仍然收到错误。当我添加 pack.threads "1" 时,一切都解决了!
        • 当我尝试从 svn 切换到 git 时,我怀着极大的热情开始。但是从一个晦涩难懂的问题到解决更加晦涩难懂的问题,我不确定这个转换的决定有多明智。
        • 我有一个问题,我更改了属性 pack.SizeLimit 而不是 pack.packSizeLimit。这解决了我的问题。非常感谢!!!
        • git config --global pack.windowMemory "100m" 解决了我的问题
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-10
        • 2014-01-06
        • 2017-05-26
        • 2014-04-14
        • 2012-06-03
        • 2021-06-08
        相关资源
        最近更新 更多