【问题标题】:Git error: remote unpack failed when pushing to a bare repoGit错误:推送到裸仓库时远程解包失败
【发布时间】:2019-07-31 05:06:12
【问题描述】:

我在将本地 SugarCRM 实例从 gitlab 存储库切换到新的 github 存储库时遇到问题。在本地,该项目位于 Windows 10 主机上运行的 vagrant VM 上。我从主机运行 git 命令。我创建了一个新的私有 github 存储库,将其设置为新的远程,并在 C:\Users\.ssh 中的主机上生成了一个新的公共/私有 ssh 密钥对。当我第一次尝试将项目推送到远程仓库时,我得到了

Enumerating objects: 58649, done.
error: remote unpack failed: eof before pack header was fully read
error: failed to push some refs to 'git@github.com:yvoloshin-fidelus/Sugar.git'

这个image 显示了我从 Github Desktop 获得的更详细的错误消息。

在关注this SO post时,我尝试过

git gc --aggressive --prune=now

得到了这个:

fatal: bad object refs/remotes/origin/HEAD
error: failed to run repack 

我用他们的输出尝试过的其他 git 命令:

git count-objects -vH

warning: garbage found: .git/objects/pack/tmp_pack_2dy4gc
warning: garbage found: .git/objects/pack/tmp_pack_tnF02a
warning: garbage found: .git/objects/pack/tmp_pack_XY7JBa
count: 4904
size: 10.77 MiB
in-pack: 68200
packs: 4
size-pack: 1.15 GiB
prune-packable: 0
garbage: 3
size-garbage: 1.32 GiB

git gc --aggressive --no-prune

Enumerating objects: 65624, done.
error: failed to run repack25/65624)

这些命令对原始错误没有影响。 我还应该在这里尝试什么?

【问题讨论】:

    标签: git github sugarcrm


    【解决方案1】:

    编辑/更新: OP 的真正诀窍是git update-git-for-windows。详情见 cmets!

    在这种情况下我会尝试的事情:

    • 确保我当前的用户拥有所有当前的 git 内部文件,因为缺少权限会干扰各种 git 操作。
      • Linux:sudo chown -R --changes "$USER" .git
      • Windows:打开主文件夹权限并通过Advanced Security Settings 对话框让权限向下滚动(使用☑ Replace all child object permissions with inheritable permissions from this object
    • 在 Windows 上:确保路径不长,因为如果路径超过 255 个字符/字节,Windows 文件系统 NTFS 会弄乱 git。请记住,仅常规 git 对象路径(例如.git/objects/fe/73f087d8c25fbc1159a50434ef9bf15773e7ac)的长度为 55 个字符。此外,特殊的 unicode 字符可能会占用超过 1 个字节的文件路径。此外,repo 中超过最大路径长度的文件对于某些操作可能会产生问题。在最坏的情况下,只需将回购移动到例如C:\repo\ 或类似长度的内容并在那里尝试。
    • 如果即使这样失败并且 repo 似乎完全损坏,我会尝试通过在本地克隆它来清理 repo git clone ./repo newrepo 并在新的 repo 克隆中重试推送

    【讨论】:

    • 谢谢杰!我确保 .git 归“vagrant”用户所有,并在 Windows 中运行了“替换所有子权限”选项。问题仍然存在。然后我在本地克隆了 repo,得到了 7 个“文件太长”错误,然后是“克隆成功,但结帐失败”。这可能解释了“远程解包”错误。克隆的 repo 位于旧 repo (/oldrepo/cloned_repo) 内。但是现在当我尝试从克隆仓库推送时,我得到了 Permission denied (publickey)。 ssh 密钥位于主机上的 C:\Users\\.ssh。如何让克隆的 repo 访问 ssh 密钥?
    • longpaths = true添加到gitconfig后,我删除了克隆的repo并将本地repo重新克隆到/oldrepo/cloned_repo。这一次,没有出现Clone succeeded, but checkout failed 错误。克隆和检出都成功。我使用set-url 将远程来源从/oldrepo 更改为github repo。但另一次尝试将git push 指向原点导致了相同的remote unpack failed 错误。
    • 我想我解决了这个问题。看起来我所要做的就是使用git update-git-for-windows 更新 git。它从 2.19 更新到 2.22。现在remote unpack failed 错误消失了。但是新的问题出现了。我现在得到File database/sugar800ent.sql is 2627.60 MB; this exceeds GitHub's file size limit of 100.00 MB。这是没有意义的,因为这个文件不存在,而且据我所知,这个 repo 中从未存在过。但这是一个不同的问题,我将为它创建一个新帖子。谢谢!
    • 是的,你所说的正是发生的事情。 git log 显示了两个提交,其中添加了该文件,然后将其删除。我必须运行 git reset --hard 来删除 Sugar 创建的自动本地更改,然后运行 ​​BFG 命令。这从 git 历史记录中删除了该文件。在此之后,git push 工作没有问题。再次感谢您!
    • 不客气,感谢您的更新。周末愉快! :)
    【解决方案2】:

    发生这种情况可能有几个原因:

    1. 您没有足够的权限推送目标仓库
    2. 您的 git 头已损坏 - 为此您可以重新设置 git 头
    3. 或者创建一个新分支并从上游 repo 克隆并将更改推送到新分支 - 这对我有用,因为我没有 AWS 权限。

    我有一个错误: “远程解包失败 - 未知提交 6879900878 错误:未能将一些引用推送到“https://git-codecommit.ap-south.amazonaws.com/[REPO PATH]”

    【讨论】:

      猜你喜欢
      • 2019-06-29
      • 2011-12-23
      • 1970-01-01
      • 2014-10-21
      • 2018-08-02
      • 2018-05-02
      • 1970-01-01
      • 2013-02-21
      • 1970-01-01
      相关资源
      最近更新 更多