【问题标题】:Git push failed - unpack-objects abnormal exitGit push 失败 - unpack-objects 异常退出
【发布时间】:2011-12-09 08:07:24
【问题描述】:

我正在使用远程 git 存储库。我成功提交了我的文件,现在我正在尝试 将其推送到流媒体。

操作失败并显示此消息:

git.exe push --progress  "origin" master:master

error: unpack failed: unpack-objects abnormal exit
error: RPC failed; result=18, HTTP code = 200

我在 Windows 7 上使用 TortoiseGit 客户端。

为什么我会收到此消息?如何从这种状态中恢复?

【问题讨论】:

  • 运行git push-v 是否提供任何额外的输出?

标签: git version-control


【解决方案1】:

如果您的 git 存储库是自托管的,请检查远程 git 目录上的文件系统权限。如果这被损坏,则您的 git 服务器可能没有权限。

例如,我在 Ubuntu 服务器上托管我自己的 gitosis 系统。当我在服务器上创建 git repo 时,我运行 sudo git init --bare <repo name> 然后我必须运行 sudo chgrp -R gitosis <repo name> && sudo chown -R gitosis <repo name>

【讨论】:

  • 这对我来说是一个很好的答案,我几乎没有 root 拥有的目录,而不是正确的 git 用户。
【解决方案2】:

根据this 文章git repack remote/origin/master 可能会在您的本地存储库损坏时有所帮助。检查您是否可以尝试将您的远程仓库克隆到新目录并测试从该目录推送。

【讨论】:

  • 它不起作用。似乎有问题文件,它不允许 git 打包和推送。是否可以?如何解决?
  • 事实上,命令git repack 解决了我的(类似)问题。所以+1
【解决方案3】:

当遥控器上没有剩余空间时也会出现这种情况,请尝试释放一些空间。

【讨论】:

    【解决方案4】:

    请检查远程/原始存储库的权限。 git用户可以写吗?如果没有,您将收到此错误。比如:

    chown git_user.git_user -R /path/to/repo/your_funky_repo
    

    应该在 *nix 系统上解决问题。如果你的遥控器在 Windows 上,我相信你可以运行类似的东西。

    【讨论】:

    • 任何知道 Windows 等效项的人,请随时用它来编辑我的答案。非常感谢。
    【解决方案5】:

    我在设置新的远程服务器并使用我的root 用户(而不是我的个人用户帐户)创建远程 git 存储库/文件夹时遇到了这个问题。通过删除 git 存储库并使用我的个人帐户重做它们来解决问题。现在一切正常。

    【讨论】:

      【解决方案6】:

      当我将 git 从 VPN 更改为 https 连接时,我遇到了同样的问题。

      在我的 git 存储库中发生了一些事情,我无法再推送,但 pull 仍然有效。我还尝试了git -repack remote/origin/master 的解决方案,但仍然是同样的问题。

      为了解决这个问题,I just made a new clone from my repo with the new connection 能够使用已知的推送方法。我真的不知道为什么 git -repack 不能解决这个问题,但是这样肯定可以工作!

      当我将访问方法更改为 https 时,我猜有些东西不适合服务器的 VPN 远程设置。

      希望这会有所帮助。

      【讨论】:

      • 对不起,为什么这个被否决了?这个问题的任何其他答案对我没有帮助。我的解决方案可能不是最好的,但它提供了一个可行的解决方案。因此,遇到此错误并且无法弄清楚的任何人都可以尝试以这种方式使其工作。谢谢。
      【解决方案7】:

      还要检查您的磁盘是否未满。几分钟前,我在我的一个 VPS 上遇到了同样的问题。

      【讨论】:

        【解决方案8】:

        在 Windows 上,唯一对我有用的解决方法是从我的 .gitconfig 文件中删除以下行:

        [credential]
        helper = !'C:\\Users\\YourNameHere\\AppData\\Roaming\\GitCredStore\\git-credential-winstore.exe'
        

        完成后,我手动推送了一次(成功),然后将上述行添加回 .gitconfig,一切正常。

        【讨论】:

          【解决方案9】:

          在我的 (gitlab) 服务器上,我首先需要 chown -R git:git repositories/ ,但 git repack 不起作用。当我使用 scp 将目标文件从本地 repo 复制到服务器时,问题得到了解决:

              scp .git/objects/0d/449dd91d8c20c1820d1284371b28637e08a0f3 root@server:/home/git/repositories/my/project.git/objects/0d/
          

          【讨论】:

            【解决方案10】:

            如果您使用 HTTP URL,则无法通过 HTTP 推送数据。 HTTP 用于只读访问。请改用 ssh。

            执行git remote -v 以检查您的存储库 URL 是否是 HTTP 的。 您可以通过 git remote set-url origin ssh:user@server/dir/project.git 更改此 URL

            之后就可以推送了!

            【讨论】:

              【解决方案11】:

              我使用“git push —no-thin origin HEAD”成功推送了

              有时当我们执行 git push 将新分支推送到远程仓库时,会被远程仓库阻塞。

              也许我们没有适当的权限。但是,当我将--no-thin参数添加到git push时,我可以将它推上去。

              但是,这个命令可能会受到不同级别的权限的影响,所以不保证会被推送。但我成功了。

              【讨论】:

                【解决方案12】:

                就我而言,远程仓库是一个浅层克隆。我正在推动一个合并提交,该提交显然使用了在浅存储库的最早提交之前日期的提交。

                要解决此问题,您需要取消远程: git fetch --unshallow

                【讨论】:

                  猜你喜欢
                  • 2017-01-14
                  • 2015-06-05
                  • 2014-07-29
                  • 1970-01-01
                  • 2014-07-20
                  • 2021-03-15
                  • 2013-03-21
                  • 2014-04-30
                  • 2011-04-26
                  相关资源
                  最近更新 更多